Su IRC in genere si intende per Shell un server dove si ha accesso e dove si
possono far girare processi in background come Eggdrop e Bnc. Le shell che fanno
girare processi sono in genere a pagamento, ne esistono pochissime di shell
gratis che danno il permesso di far girare un processo in background come
eggdrop e psy, e se ci sono, durano molto poco o sono molto instabili a causa
dell'eccessiva dose di utenti che si iscrivono. Ma ora analizziamo per bene la
shell unix.
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.