Înainte Înapoi Cuprins

6. Ce se întâmplă când rulați programe din shell?

Shellul normal vă dă promptul '$' pe care îl vedeți după ce vă logați. (dacă nu l-ați personalizat cu altceva). Nu o să vorbim despre sintaxa shellului și lucrurile ușoare pe care le puteți vedea pe ecran aici; în loc o să ne uităm în spatele scenei la ce se întâmplă din punctul de vedere al calculatorului.

La boot și înainte să rulați un program, puteți să vă gândiți la calculatorul dvs. ca la o grădină zoologica a proceselor care așteaptă toate să facă ceva. Toate așteaptă evenimente. Un eveniment poate să fie o apăsare de tastă sau mișcare de mouse. Sau, dacă mașina dvs. este legată la o rețea, un eveniment poate să fie un pachet de date venind de pe rețeaua respectivă.

Kernelul este unul din aceste procese. Este unul special, deoarece el controlează când celelalte procese ale utilizatorului pot să ruleze, și este în mod normal singurul proces cu acces direct la hardware. De fapt, procesele utilizatorului trebuie să facă cereri la kernel când vor să citească de la tastatură, să scrie pe ecran, să citească sau să scrie pe disc, sau să facă cam orice în afară de a mesteca biți în memorie. Aceste cereri sunt cunoscute ca apeluri de sistem.

Normal toate Intrarile/Ieșirile ( I/O ) trec prin kernel ca el să programeze operațiile și să prevină procesele să se calce unul pe altul. Câteva procese speciale ale utilizatorului au voie să stea pe lângă kernel, de obicei dânduli-se acces direct la porturile I/O. Serverele X (programele care primesc cererile altor programe de a desena grafic pe ecran pe cele mai multe sisteme Unix) sunt exemplele cele mai obișnuite. Dar nu am ajuns încă la un server X; vă uitați la un prompt de shell pe o consolă de caractere.

Shellul este doar un proces de utilizator, și nu unul special. Așteaptă apăsarea tastelor, ascultând (prin kernel) la portul I/O al tastaturii. Cum kernelul le vede, le afișează pe ecran și le dă shellului. Când kernelul vede un `Enter' trimite linia dvs. de text la shell. Shellul încearcă să interpreteze acele apăsări de taste ca comenzi.

Să zicem că tastați `ls' și Enter să invocați cititorul Unix de directoare. Shellul aplică regulile sale interne să își dea seama că vreți să rulați comanda executabilă din fișierul `/bin/ls'. Face un apel de sistem cerând kernelului să pornească /bin/ls ca un nou proces copil și să îi dea acces la ecran și tastatură prin kernel. Apoi shellul se duce la culcare, așteptând ca ls să termine.

Când /bin/ls și-a făcut treaba, îi spune kernelului că a terminat făcând un apel de sistem exit (ieșire). Kernelul trezește shellul și îi spune că poate să continue să ruleze. Shellul vă dă un alt prompt și așteaptă să introduceți altă linie.

Oricum, alte lucruri pot să ruleze în timp ce se execută `ls'-ul dvs (o să presupunem că listați un director foarte lung). Puteți să treceți la altă consolă virtuală, să vă logați acolo, și să porniți un joc Quake, de exemplu. Sau, să presupunem că sunteți conectat la Internet. Mașina dvs. poate să trimită sau să primească poșta în timp ce /bin/ls rulează.


Înainte Înapoi Cuprins