Avanti Indietro Indice

6. Cosa succede quando si eseguono i programmi dalla shell?

La shell normale vi presenta il prompt '$' che vedete dopo il login (a meno che non lo abbiate personalizzato). Non parleremo della sintassi della shell e delle cose semplici che potete vedere da soli sullo schermo; daremo piuttosto uno sguardo dietro le quinte a quello che succede dal punto di vista del computer.

Dopo la fase di avvio e prima che sia eseguito un programma, potete pensare al vostro computer come ad un contenitore di un repertorio di processi che stanno tutti aspettando qualcosa da fare. Stanno tutti aspettando degli eventi. Un evento può essere voi che premete un tasto o muovete il mouse. Oppure, se il vostro computer è collegato ad una rete, un evento può essere un pacchetto di dati che arriva lungo quella rete.

Il kernel è uno di questi processi. È uno speciale, perché controlla quando gli altri processi utente possono girare ed è normalmente l'unico processo con accesso diretto all'hardware del computer. Infatti, i processi utente devono fare richiesta al kernel quando vogliono ottenere un input dalla tastiera, scrivere sullo schermo, leggere o scrivere su disco o fare qualsiasi altra cosa che non sia macinare bit in memoria. Queste richieste sono note come chiamate di sistema.

Normalmente tutto l'I/O passa attraverso il kernel, così quest'ultimo può organizzare le operazioni e impedire che i processi si ostacolino a vicenda. Alcuni processi utente speciali hanno il permesso di aggirare il kernel, di solito per ottenere accesso diretto alle porte I/O. I server X (i programmi che gestiscono le richieste degli altri programmi di generare grafica sullo schermo, sulla maggior parte dei computer Unix) sono i più comuni esempi al riguardo. Ma non siamo ancora arrivati ad un server X; state guardando il prompt della shell su una console a caratteri.

La shell è solo un processo utente e neppure uno tanto speciale. Attende che voi digitiate qualcosa, ascoltando (attraverso il kernel) sulle porte I/O della tastiera. Come il kernel vede che avete digitato qualcosa lo visualizza sullo schermo e poi lo passa alla shell. Quando il kernel vede un `Invio' passa la vostra linea di testo alla shell. La shell tenta di interpretare questo testo come se si trattasse di comandi.

Diciamo che digitate `ls' e Invio per invocare il programma Unix che lista le directory. La shell applica le sue regole incorporate per indovinare che volete lanciare il comando eseguibile nel file `/bin/ls'. Fa una chiamata di sistema chiedendo al kernel di far partire /bin/ls come un nuovo processo figlio e di dargli accesso allo schermo e alla tastiera attraverso il kernel. Poi la shell va a dormire, aspettando che finisca.

Quando /bin/ls ha finito dice al kernel che ha terminato emettendo una chiamata di sistema exit. Il kernel allora sveglia la shell e le dice che può riprendere a girare. La shell emette un altro prompt e attende un'altra linea di input.

Tuttavia (supponiamo che stiate listando una directory molto lunga) potrebbero succedere altre cose mentre `ls' è in esecuzione. Potreste passare su un'altra console virtuale, fare il login di là e iniziare una partita a Quake, per esempio. Oppure immaginate di essere collegati a Internet. Il vostro computer potrebbe spedire o ricevere posta mentre /bin/ls è in esecuzione.


Avanti Indietro Indice