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 a 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 a 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 gli esempi più
comuni al riguardo. Ma non siamo ancora arrivati a 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 elenca 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 ls 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 elencando una directory
molto lunga) potrebbero succedere altre cose mentre `ls'
è in esecuzione. Potreste passare su un'altra console
virtuale, fare il log in 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.
|