3.Concepte de bază
Interfaţa dintre sistemul de operare şi programul utilizator este definit de mulţimea de “instrucţiuni extinse“ pe care le furnizează sistemul de operare. Aceste instrucţiuni extinse sunt cunoscute în mod tradiţional ca apeluri sistem deşi ele pot fi împlementate în diverse moduri la ora actuală. Pentru a înţelege cu adevărat ceea ce face sistemul de operare, trebuie să examinăm această interfaţă foarte îndeaproape. Apelurile sistem disponibile în interfaţă variază de la un sistem de operare la altul.
Suntem forţaţi să facem o alegere între vagi generalităţi (“SO au apeluri sistem pentru fişiere ce pot fi citite“) şi câteva SO specifice (“MINIX are un sistem de apeluri pentru citire cu 3 parametri: unul pentru a specifica fişierul, altul pentru a spune unde trebuie depuse datele, şi altul pentru a spune câţi biţi trebuie citiţi“).
Am ales aşadar ultima modalitate de abordare. Este mai mult de lucru în acest mod, dar această variantă oferă detalii mai în amănunt asupra ceea ce face SO. În secţiunea următoare vor fi dezbătute îndeaproape apelurile de sistem. Din motive de simplitate ne vom referi doar la sistemul de operare MINIX, dar majoritatea dintre apelurile de sistem UNIX corespunzătoare sunt bazate pe standardul POSIX. Înainte de a privi apelurile sistem, totuşi, merită să avem o privire de ansamblu asupra sistemului de operare UNIX, pentru a obţine o idee generală asupra ceea ce este un sistem de operare. Această privire de ansamblu se poate realiza la fel de bine şi asupra sistemului de operare UNIX.
Apelurile sistem se pot împărţi în modul brutal în 2 categorii:
-
prima legată de procese;
-
a doua cu privire asupra sistemului de fişiere;
Noi vom examina fiecare dintre acestea în continuare.
A. Procese
Un concept de bază în MINIX, şi în toate sistemele de operare, este cel de proces. Un proces este în mod intuitiv un program în execuţie. Asociat fiecărui proces este spaţiul de adrese, adică o listă de locaţii de memorii de la un minim de obicei zero la un maxim pe care procesul poate sa le citeasca si sa le scrie. Spaţiul de adrese conţine programul executabil, datele programului şi stiva. De asemenea asociate cu fiecare proces sunt seturile de regi inclusand programul de contabilizare ,pointerul de stivă, regiştrii hardware, şi orice alte informaţii necesare pentru a rula un program.
Ne vom întoarce asupra conceptului de proces în detaliu în capitolul 2, dar pentru moment, cel mai simplu mod pentru a avea o bună idee intuitivă despre procese este să ne gândim la sistemele distribuite. Periodic, sistemul de operare decide oprirea rulării unui proces şi pornirea rulării altuia, de exemplu, deoarece primul a beneficiat in ultimle secundde mai mult de procesor decat a avut dreptul .
Când un proces a fost suspendat temporar ca acesta, el trebuie repornit mai târziu în exact aceeaşi formă în care era când a fost oprit. Aceasta înseamnă că toate informţiile despre proces trebuie salvate explicit undeva în timpul suspendării. De exemplu un proces are de deschis mai multe fişiere pentru citire sau scriere. Asociat cu fiecare dintre aceste fişiere este un pointer ce indică poziţia curentă (de exemplu numărul de biţi sau articolul ce urmează a fi citit). Când un proces este suspendat temporar toţi aceşti pointeri trebuie salvaţi astfel ca un apel de citire executat după repornirea procesului să citească datele corect. În multe sisteme de operare, toate informaţiile despre fiecare proces, altele decât conţinutul spaţiilor sale de adrese, sunt stocate într-un tabel al sistemului de operare numit tabela proceselor, care este un tabel (sau o listă înlănţuită) de structuri, câte una pentru fiecare proces curent existent.
Astfel, un proces este reprezentat de spaţiile sale de adrese, numit uzual core image şi tabela de intrări ale procesorului care conţine regiştrii alături de alte lucruri.
Ideea managementului proceselor şi a apelurilor sistem este relaţia dintre crearea şi terminarea proceselor. Să considerăm un exemplu tipic. Un proces numit intrepretor de comenzi sau shell citeşte comenzi de la un terminal. Utilizatorul tocmai tastează o comandă cerând ca programul să fie compilat. Shell-ul trebuie acum să creeze un nou proces ce va rula compilatoral. Când acel proces va termina compilarea, el va executa un apel sistem pentru a se opri.
Dacă un proces poate creea unul sau mai multe procese (aşa numitele procese fiu) şi aceste procese în acţiune pot să creeze procese fiu, ajungem la un arbore al proceselor structurat ca în figura următoare:
B, C – procese fiu ale lui A;
D, E, F – procese fiu ale lui B;
Relaţia dintre procese se bazează pe cooperarea care are ca scop obţinerea de noi sarcini, comunicarea cu alte procese şi sincronizarea acţiunilor lor. Această comunicare se numeşte IPC (interprocess comunication) şi va fi tratată pe larg în capitolul 2.
Alt proces de apelari ale sistemului sunt disponibile pentru a solicita mai multa memorie sau a elibera memorie neutilizata ,sa astepte ca un proces subordonat sa se incheie si sa isi suprapuna programul pe unul dieferit .
Uneori, există o nevoie de a transmite o informaţie la un proces în rulare care nu stă în aşteptarea pentru aceasta. De exemplu, un proces care comunică cu un alt proces de pe un calculator diferit trebuie să transmită mesaje în reţea. Pentru a ne proteja împotriva posibilităţii ca un mesaj sau răspunsul său să fie pierdut, expeditorul poate cere sistemului de operare să îl anunţe după un număr specificat de secunde dacă îi poate retransmite procesului orice efectuează procesul în acel timp, salvarea regiştrilor săi pe stivă, şi porneşte un semnal special pentru o procedură de tratare, de exemplu, de a retransmite semnalul presupus pierdut. Când semnalul de tratare este emis procesul este repornit în aceeaşi stare în care era înainte de primirea semnalului. Semnalele sunt analogul software al întrruperilor hardware şi pot fi generate de o serie de cauze sau de expirarea timpului. Multe capcane detectate de hardware, ca executarea unei instrucţiuni ilegale sau utilizarea unei adrese invalide, sunt convertite de asemenea în semnale de oprire a proceselor.
Fiecărei persoane autorizate să utilizeze MINIX îi este asociat un UID (user indentification) de către administratorul de sistem. Fiecare proces pornit în MINIX are UID-ul persoanei care l-a pornit. Un proces fiu are acelaşi UID cu al părintelui. Un uid, numit super-user, are o putere specială, şi poate viola multe dintre regulile de protecţie. În reţelele mari, doar administratorul cunoaşte parola pentru a deveni super-user, dar mulţi dintre utilizatorii obişnuiţi depun un efort considerabil pentru a încerca să găsească o slăbiciune a sistemului care să le permită să devină super-useri fără parolă.
Dostları ilə paylaş: |