Sunteți pe pagina 1din 27

CAPITOLUL 6

SISTEMUL DE OPERARE UNIX

UNIX este un sistem de operare time -sharing universal. Principala sa caracteristică este
portabilitatea - disponibilitatea sa pentru majoritatea sistemelor de calcul (supercalculatoare,
mainframes, minicalculatoare, sisteme de birotică, microcalculatoare).
Oportunitatea apariţiei acestui sistem de operare a constat din:
- necesitatea standardizării şi unificării sistemelor de operare, în special a interfeţei cu
utilizatorul;
- păstrarea în condiţiile transferului pe alte sisteme de calcul, a structurii volumelor şi fişierelor;
- asigurarea unor niveluri superioare de portabilitate a produselor
- program;
- posibilitatea interconectării de sisteme cu arhitecturi, tipuri şi puteri diferite, sub acelaşi sistem
de operare.
- independenţa software-ului de aplicaţii, faţă de evoluţia hardware.

4.1. CARACTERISTICI ŞI COMPONENTE MAJORE

4.1.1. Evoluţie şi caracteristici


În anul 1969 apare prima versiune experimentală scrisă în limbaj de asamblare pentru
minicalculatoarele PDP-11, al firmei DEC (Digital Equipment Corporation) pentru un singur
utilizator (monouser); odată cu primul compilator pentru limbajul C (1972), UNIX a fost rescris
în acest limbaj cu scopul asigurării portabilităţii. În 1978 s-a realizat prima implementare
comercială IS/1 (Interactive System One), urmată la scurt timp de versiunea XENIX a firmei
Microsoft.
În 1980, UNIX s-a impus ca principală soluţie de standardizare in domeniul sistemelor
de operare, reprezentând o modalitate de realizare a sistemelor deschise pentru toate categoriile
de sisteme de calcul.
După 1981, firma AT&T elaborează versiunile UNIX System III şi V, iar firma Berkeley
Software Distribuitors (BSD) realizează standardele BSD 1,2,3 urmate de BSD 4.2, 4.3 şi din
1993 BSD 4.4 Companiile SUN şi AT&T au dezvoltat versiunea System V.4 în 1988, iar IBM,
DEC şi Hewlett Packard au format Open Software Foundation (OSF) independent de AT&T (fig.
4.1.).
Fig.4.1. Evoluţia sistemelor de operare UNIX

Dintre principalele raţiuni de utilizare se pot specifica:


- existenţa unui limbaj de comandă simplu, logic şi consistent, prin care utilizatorul comunică cu
sistemul de calcul, indiferent din ce categorie de sisteme de calcul face parte;
- oferirea de servicii pentru dezvoltarea interactivă de programe scrise în majoritatea limbajelor
de programe de nivel înalt, pentru baze de date, reţele locale (LAN) şi generale (WANG),
inteligenţă artificială, statistică, simulare, etc.;
- portabilitatea pe toată gama sistemelor de calcul ce lucrează sub UNIX, deci independenţa de
hardware;
- posibilitatea de a executa mai multe sarcini simultan, pentru mai mulţi utilizatori concomitent,
asigurând exploatarea eficientă a capacităţii de prelucrare puse la dispoziţie.
Caracteristicile de bază se pot sintetiza astfel:
- este un sistem de operare time - sharing, multiuser şi multitasking;
- asigură protecţia fişierelor şi execuţiei, prin existenţa unor parole şi drepturi de acces;
- dispune de intrări/ieşiri generalizate prin care operaţiile de intrare/ieşire sunt integrate în
sistemul de fişiere;
- existenţa unui sistem de întreruperi logice pentru sincronizarea proceselor reentrante şi
asincrone multiple;
- managementul spaţiului afectat execuţiei proceselor şi controlul timpului de acces la procesele
în aşteptare, se face prin transferul de pagini între memoria RAM şi cea externă;
- existenţa unei interfeţe simple şi interactive (SHELL) prin care se asigură dialogul utilizatorului
cu sistemul de operare;
- caracterul de sistem deschis este conferit de asigurarea atât a portabilităţii sistemului de
operare, cât şi a software-ului de aplicaţie;
- acoperirea unei vaste game de aplicaţii: compilatoare, sisteme de gestiune a bazelor de date
(Oracle, Gupta), reţele de calculatoare, inteligenţă artificială, simulare, gestiune, statistică,
instruire asistată de calculator, etc.;
- permite execuţia aplicaţiilor în MS-DOS, în paralel cu execuţia de procese sub UNIX
(submeniu pentru MS-DOS);
- întreţinere şi dezvoltare facilă.

4.1.2. Arhitectura sistemelor de calcul ce lucrează cu UNIX


Arhitectura unui sistem de calcul din punct de vedere al funcţionalităţii, se prezintă sub
formă stratificată pe trei niveluri (fig.4.2.).

Fig. 4.2. Arhitectura sistemelor ce lucrează sub Unix

Cel mai inferior nivel este nivelul fizic -nivelul la care operează hardware-ul, acesta
incluzând dispozitivele fizice, microcodul şi limbajul de asamblare.
Următorul nivel -software-ul de bază sau software-ul de sistem are ca principală
componentă sistemul de operare având la bază nucleul (Kernel) alături de editoare de texte,
compilatoare, interpretere de comenzi şi utilitare.
Nivelul superior materializat prin software-ul aplicativ, cuprinde practic, o gamă infinită
de aplicaţii.
Este de remarcat faptul că orice nivel comunică numai cu nivelul imediat inferior sau
superior, furnizând servicii pentru nivelul imediat superior.
Scopul principal al sistemului de operare fiind acela de a controla resursele hardware ale
sistemului, se poate aprecia că sistemul de operare acţionează ca o interfaţă între utilizator
reprezentat prin programele de aplicaţie pe care acesta le lansează în execuţie şi componenta
hardware (fig. 4.3.).

Fig. 4.3. Sistemul de operare UNIX - interfaţă între hardware şi utilizator

Fig. 4.4. Componentele majore ale sistemului de operare UNIX

Nucleul (Kernel) este componenta care asigură servicii de sistem pentru programele de
aplicaţii asigurând gestiunii proceselor, a memoriei, a intrărilor / ieşirilor şi a timpului; Shell -
interpreterul de comenzi, reprezintă mecanismul prin care sistemul de operare realizează interfaţa
între utilizator şi sistemul de calcul; interpreterele de comenzi existente pe sistemele de operare
Unix sunt:
* Bourne Shell (bsh) şi Bourne Again Shell (bash) al cărui producător este firma AT&T; bsh a
fost prima variantă a interpreterelor de comenzi;
* C Shell (csh) elaborat de firma Sun Microsystem; interpreterul are o sintaxă a comenzilor
similară cu cea a limbajului C;
* Korn Shell (ksh) ce se constituie ca o îmbinare a variantelor anterioare. Sistemul de fişiere
cuprinde programe utilitare, aplicative şi de gestiune a operaţiilor de intrare/ieşire.
Interfeţele disponibile utilizatorului sunt organizate pe trei niveluri:
* nivelul exterior nucleului, care poate fi accesat de către utilizator prin intermediul utilitarelor;
* nivelul intermediar, accesat prin funcţii din biblioteca limbajului C;
* nivelul inferior, a cărui accesare se realizează prin funcţiile de sistem (System Calls).
Asemănător MS-DOS-ului care în cursul dezvoltării sale a fost dotat cu interfeţele grafice
Windows, UNIX-ul a încorporat ca principale interfeţe grafice:
* X/Windows al firmei MIT, folosită şi de SCO în versiunile Open DeskTop (ODT);
* Open Look al cărei producător a fost firmele AT&T şi SUN;
* DEC Windows a firmei DEC.
Prin urmare, există o ierarhizare a straturilor ce se interpun între utilizator şi nucleul
sistemului de operare redată în fig. 4.5.

Fig. 4.5. Straturile interpuse între utilizator şi nucleul sistemului de operare UNIX

4.1.4. Tipuri de sisteme de operare UNIX

Principalele variante de sisteme de operare UNIX existente astăzi în domeniul software-


ului de sistem precum şi sistemul de bază pe care sunt fundamentate sunt redate în fig. 4.6.
Fig. 4.6. Principalele variante de sisteme de operare UNIX

UNIX SYSTEM V RELEASE 4


UNIX SYSTEM V RELEASE 4 cuprinde:
- linia AT&T System V.3;
- linia Berkeley BSD 4.3 şi Sun OS 4.0;
- linia Xenix - Xenix V a lui Microsoft;
- interfeţele grafice cuprind principalele funcţiile din interfeţele X/Windows şi Open Look;
- Shell-urile: Bourne, Korn, C;
- suport pentru conectare la reţea:
* protocolul TCP/IP;
* interfaţă pentru comunicarea între procese;
* gestiunea fişierelor distribuite (NFS);
- interfaţă binară de aplicaţii (ABI).

SCO Santa Cruz Corporation dispune de două variante:


- ODT - Open DeskTop;
- Open Server Release 3.
Sistemul de operare UNIX varianta SCO Open DeskTop 2.0, este bazat pe Unix System
V Release 3.2. cu interfaţă grafică X-DeskTop; elemente mai semnificative care-l caracterizează:
- dispune de un instrument grafic de poştă electronică, protocol TCP/IP şi NFS;
- suportă MS-DOS;
- este emulată interfaţa grafică Windows;
- poate accesa partiţii DOS multiple mai mari de 32 Mb.
SUN OS
Sistemul de operare Unix SUN OS este destinat pentru staţiile de lucru SUN, inclusiv
pentru SUN 386; a fost proiectat având la bază UNIX V Release 3 şi BSD 4.2 şi 4.3. Cuprinde:
- sistemul de fişiere al reţelei (NFS);
- interfaţă grafică utilizator SunView;
- suport pentru operare fără disc pe reţea (Diskless Operation);
- nucleul are circa 200 funcţii sistem, biblioteci cu rutine pentru programe de aplicaţie (rutine
matematice şi aplicaţii reţea);
- Shell Bourne şi C;
- poate rula simultan şi aplicaţii DOS care au acces la fişierele din reţeaua Sun Os.

SOLARIS
Sistemul de operare UNIX varianta Solaris al firmei SUN, cuprinde următoarele
componente semnificative:
- Sun Os 5.0 bazat pe Unix System V Release 4;
- ONC Distributed Computing Platform -colecţie de protocoale de intercomunicare şi servicii
distribuite;
- sistemul de vizualizare OpenWindows V 3;
- interfaţa grafică OpenLook;
- Deskset V3- set de instrumente pentru activitatea de desktop.
Începând cu versiunea Solaris 2.6, sistemul de operare are ca principale noutăţi, un set de
bază pentru servicii de reţea, inclusiv propriul server Web şi browser. Îmbunătăţirile noii
versiuni au condus la următoarele constatări:
- cel mai rapid mediu Java;
- suport pentru fişiere mari;
- creşterea cu cca 35 % a performanţelor pentru baze de date;
- creşterea cu 350 % a performanţelor pentru Web.

HP - UX
HP - UX Hewlett Packard Unix este versiunea Unix System V care încorporează o serie
de caracteristici ale OSF/1:
- HP - UX 9 poate fi asimilat cu Unix System V.3, dispunând suplimentar de câteva extensii;
- HP - UX 10 este un Unix System V.4.

DEC - OSF/1
DEC - OSF/1 Digital Equipment Corporation este versiunea OSF/1 a firmei DEC
implementată pe DEC ALPHA STATION 600.

IRIX
IRIX include majoritatea caracteristicilor de la BSD, av având la bază Unix System V.4.
AIX
Sistemul de operare UNIX varianta AIX a fost proiectat de corporaţia IBM, fiind bazat pe
versiunea UNIX System V BSD şi OSF/1; este disponibil pe calculatoare IBM PS/2 (modelul
Power PC- versiunea AIX 3.x şi AIX 4.1.1) şi compatibile, respectiv pe mainframe având
implementate microprocesoare RISC-6000 versiunea AIX 4.1.3.

UNIX WARE
Unix Ware este o variantă având la bază versiunea UNIX System V Release 4, rezultată
dintr-o colaborare UNIX şi Novell.
Componente esenţiale:
- nucleul din Unix System V Release 4.2;
- sistemul de operare de reţea locală Netware;
- interfeţe grafice utilizator disponibile sunt: Openlook şi OSF/Motif.

LINUX
Linux este sistemul de operare Unix pentru procesoarele Intel, care a oferit software
gratuit.
Linux include esenţialul variantei BSD, fiind destinat utilizării individuale de către
profesionişti Unix. Este o soluţie acceptabilă pentru conectarea la Internet şi poate fi utilizat ca X
terminal în siteurile Unix.

4.2. Sistemul de fişiere UNIX SYSTEM V


Fişierele reprezintă din punct de vedere logic, unitatea elementară de memorare pe
suportul magnetic.

4.2.1. Tipuri de fişiere


Sistemul de operare UNIX System V lucrează cu următoarele tipuri de fişiere:
- fişiere obişnuite
Aceste fişiere sunt constituite dintr-un şir de bytes (memoraţi de obicei pe disc) terminat
cu un marker de sfârşit de fişier (EOF). Şirul este divizat în linii de text terminate cu caracterul
"new line" (CR). Restricţiile de lungime, format, utilizat;
- fişiere speciale
Fişiere speciale se constituie ca o interfaţă între programele utilizator şi rutinele nucleului
sistemului de operare, ce lucrează direct cu dispozitivele periferice de intrare/ieşire. Astfel,
utilizatorul va trata perifericele de intrare/ieşire ca fişiere, activarea unui astfel de fişier
coincizând cu activarea driverului dispozitivului periferic asociat. La rândul lor, fişiere speciale
sunt de 3 categorii:
* fişiere speciale de tip caracter sunt fişierele care transferă un byte printr-o operaţie de
intrare/ieşire;
* fişiere speciale de tip bloc sunt fişierele care transferă un bloc printr-o operaţie de
intrare/ieşire;
* fişiere speciale de tip pipe sunt fişiere ce constituie canale de comunicaţie între 2 procese;
comunicaţia între două procese se poate realiza în memorie prin fişiere pipe obişnuite, sau pe
disc prin aşa zisele fişiere pipe (named pipe).
-cataloage de fişiere (directori)
Directorii sunt cataloage de fişiere ce conţin numele fişierelor componente şi adresa
fizică pe unitate simbolizată prin:
. (un singur punct) identifică numele directorului propriu, numit Home directory (2 bytes);
.. (două puncte) identifică numele directorului părinte ân care fişierul cu un anumit index (inod)
apare ca subdirector (14 bytes).
Aceste fişiere nu se pot citi/scrie direct de utilizator, operaţiile efectuându-se prin
directive de sistem.
4.2.2. Structura arborescentă a sistemului de fişiere
Sistemul de fişiere UNIX System V este organizat într-o structură arborescentă sub formă
de directori şi subdirectori conectaţi la directorul rădăcină (/root).
Restricţia de parcurgere este ca un director să nu fie legat la nivelul superior decât printr-o
singură legătură.
Pentru fiecare utilizator, administratorul de sistem creează câte un director propriu ce
poate conţine subdirectori sau fişiere obişnuite. Identificarea în cadrul structurii arborescente se
realizează prin numele fişierului precedat de calea în care se află; specificarea căii se poate
realiza în două moduri:
- absolut, pornind din directorul rădăcină /root;
- relativ, pornind de la directorul curent.
Schimbarea directorului curent se realizează prin intermediul comenzii:
$cd cale
unde cale poate fi specificată:
- spre extremităţile arborelui, prin specificarea subdirectorului dorit;
- spre baza arborelui, ceea ce presupune specificarea completă a căii;
Spre deosebire de MS-DOS, la UNIX nu apare la prompter calea curentă; determinarea
căii curente se face prin comanda:
$pwd
(print work directory) care va afişa calea completă;
Prin comanda
$cd
se revine în directorul utilizatorului atribuit la începutul sesiunii de lucru de către administratorul
de sistem (Home directory).
Crearea unui director (este permisă numai în directorul propriu atribuit de administratorul
sistemului) se va specifica prin comanda:
$mkdir nume_director
Stergerea unui director se efectuează prin comanda:
$rmdir nume_director
Operaţia este validată numai dacă directorul este vid şi utilizatorul are acest drept la calea
respectivă. Listarea conţinutului unui director se realizează prin comanda:
$ls [-opţiuni] [nume_director]
unde nume_director este numele directorului al cărui conţinut se va afişa pe monitor; implicit
este listat conţinutul din directorul curent;
opţiuni prin intermediul opţiunilor se pot solicita informaţii suplimentare cu privire la conţinutul
directorului respectiv; opţiunile vor fi precedate de caracterul "-"; dintre opţiunile mai
semnificative:
-l oferă informaţii de detaliu ce privesc: tipul fişierului, protecţie, proprietar, dimensiune, data
ultimei modificări, nume;
-a solicită specificarea tuturor intrărilor în director; fiecare intrare va fi precedată de unul din
următoarele caractere având semnificaţia:
d subdirector;
- fişier obişnuit;
b,c fişiere speciale de tip bloc (b) sau caracter (c);
. directorul curent;
.. directorul părinte;
-i numărul de inod;
-t afişarea conţinutului sortat după timpul ultimei modificări;

4.2.3. Structura standard a sistemului de fişiere


O structură standard a unui sistem de fişiere UNIX conţine următorii directori având în
componenţă:
/ dev fişiere speciale pentru dispozitivele periferice: consola sistem, terminale, discuri,
imprimantă, etc.;
/ bin utilitare în formă executabilă: compilatoare, asambloare, instrumente pentru dezvoltarea
programelor;
/ lib biblioteci pentru limbaje de programare şi utilitare;
/ etc programe pentru administrarea sistemului: fişiere cu parole, comenzi de iniţializare;
/ tmp spaţiu temporar de manevră folosit de programele de sistem;
/root / unix nucleul sistemului de operare, direcţionând sistemul către
/aixps2/unix.std;
/ u director în care se creează Home directory pentru fiecare utilizator;
/ local partiţia activă (de aici se face bootarea);
/ lost+found director unde se ataşează fişierele şi directorii găsiţi ca nefăcând parte din nici un
sistem de fişiere;
/ usr alte programe necesare utilizatorilor;
/ bin utilitare nefolosite frecvent;
/ tmp fişiere temporare mai puţin utilizate;
/ lib fişiere de bibliotecă utilizate mai rar;
/ dict lista de cuvinte, despărţirea în silabe;
/ man directori de fişiere text conţinând manualul complet de utilizare.
/ spool -at timpul la care se prelucrează;
-lpd director imprimantă;
/ user_1
/ ... ¦ structuri de directori
/ ... ¦
/ ... ¦ ai utilizatorilor
/ user_n

4.2.4. Protecţia fişierelor şi drepturi de acces

Sistemul de operare UNIX dispune de 3 drepturi de acces la fişiere:


- dreptul de citire read (r);
- dreptul de scriere write (w);
- dreptul de execuţie execute (x);
De asemenea, recunoaşte următoarele categorii de utilizatori:
- proprietarul (u);
- grupul de utilizatori (g);
- ceilalţi utilizatori (o).
De aici decurg cele 3x3 posibiliţăţi pentru precizarea completă a drepturilor de acces.
Vizualizarea drepturilor de acces se realizează prin operaţia de listare a conţinutului
directorului.
Exemplu
Dacă se va introduce comanda:
$ls -al
efectul va fi afişarea la monitor a conţinutului directorului curent cu toate intrările şi informaţii
de detaliu:
total 24 reprezintă numărul de blocuri de 512 bytes ocupate
drwxrwxr-x 6 ase info 687 Apr 28 17:13 . directorul current
drwxrwxr-x 9 ase infocib 212 Ian 12 10:22 .. directorul părinte
drwxrwxr-x 1 ase stud1 43 Mar 11 15:50 fisier1
-r-wxr-x--- 2 ase stud3 8822 Feb 14 12:09 fişier2
(1)(2) (3) (4) (5) (6) (7) (8) (9)
Unde
(1) tipul de fişier;
(2) drepturile de acces ale proprietarului (u);
(3) drepturile de acces ale membrilor grupului (g);
(4) drepturile de acces ale altor utilizatori (o);
(5) numărul de directori în care apar fişierele (numărul de legături);
(6) numele proprietarului şi grupului;
(7) numărul de caractere din fişier;
(8) data ultimei modificări;
(9) numele directorilor şi fişierelor existente în directorul curent.

4.2.5. Modificarea drepturilor de acces


La crearea unui fişier, se asociază atât un identificator de proprietar (uid) cât şi un
identificator de grup (gid), ambele atribuite de către administratorul de sistem.
Cuvântul care păstrează fişierele şi drepturile de acces are următorul format:

Fişierele executabile preiau la execuţie uid-u//gid-ul celui care le lansează; dacă biţii sunt
setaţi pe 1, se preia uid-ul/gid-ul proprietarului fişierului respectiv, iar la comanda ls apare
opţiunea s în loc de x la dreptul de execuţie al proprietarului
Setarea bitului sticky produce rămânerea în memoria internă a fişierului executabil - în
zona de evacuare (swapping); este utilizat pentru fişiere de comenzi sau comenzi apelate frecvent
(TSR).
Schimbarea proprietarului (owner-ului) anumitor fişiere se face prin intermediul
comenzii:
$chown nume_nou_proprietar fis_1 fis_2 ... fis_n
unde nume_nou_proprietar devine noul proprietar al fişierelor fis_1 fis_2 ... fis_n specificate.
Exemplu
Prin comanda:
$chown radu fis1.x fis2.x
radu devine noul proprietar al fişierelor fis1.x şi fis2.x.
Schimbarea grupului care deţine anumite fişiere se realizează cu ajutorul comenzii:
$chgrp nume_nou_grup fis_1 fis_2 ... fis_n
prin care nume_nou_grup devine deţinătorul fişierelor fis_1 fis_2 ... fis_n.
Adăugarea unui nou grup la sistemul de fişiere UNIX se efectuează prin comanda:
$newgrp nume_grup_adaug
în urma căreia nume_grup_adaug este ataşat la sistemul de fişiere existent.
Schimbarea drepturilor de acces la un fişier se poate realiza numai de către proprietarul
acestuia (eventual, de către administratorul sistemului-superuser) cu comanda:
$chmod {cine} {permis}{drept_acces} fis_1 fis_2 ... fis_n
unde cine poate fi:
u user login (proprietarul);
g group (grupul);
o others (alţi utilizatori);
a all (toţi utilizatorii).
permis stăbileşte accesul sau neautorizarea acestuia prin:
+ permisiune;
- neautorizarea accesului;
= permisiune absolută.
drept_acces sunt drepturile de citire (r), scriere(w) sau execuţie (x);
fis_1 fis_2 ... fis_n fişierele asupra cărora se aplică modificarea.

Exemple:
1) Comanda:
$chmod a+rx prog
permite tuturor utilizatorilor (a) să citească (r) şi să execute (x) fişierul prog.
2) Comanda:
$chmod u-w prog
nu permite proprietarului fişierului prog să facă modificări în conţinutul acestuia.
3) Prin comanda:
$chmod o-r mail
nu se permite altor utilizatori (o) să citească (r) fişierul mail.
Observaţie: modificarea drepturilor de acces se poate realiza şi absolut prin însumarea
următoarelor valori:
4000 setare uid
2000 setare gid
1000 setare bit sticky
400 drept de citire pentru proprietar;
200 drept de scriere pentru proprietar;
100 drept de execuţie pentru proprietar;
40 drept de citire pentru grup;
20 drept de scriere pentru grup;
10 drept de execuţie pentru grup;
4 drept de citire pentru alţi utilizatori;
2 drept de scriere pentru alţi utilizatori;
1 drept de execuţie pentru alţi utilizatori;

Exemplu
Comanda:
$chmod 755 prof
modifică drepturile de acces pentru permisiune la citire, scriere, execuţie proprietar 700
(400+200+100), citire, execuţie pentru grup 50 (40+0+10), şi citire, execuţie pentru alţi
utilizatori 5(4+0+1).
Informaţiile despre utilizatori şi grupurile de utilizatori sunt cuprinse în fişierele
/etc/passwd, /etc/shadow şi /etc/group.
Utilizatorii au acces la comenzile generale situate de regulă în căile /bin şi /usr/bin,
aceştia având posibilitatea să-şi modifice propria parolă cu comanda:
$passwd parola
care va solicita introducerea noii parole de două ori.
Orice utilizator are acces la fişierul /etc/passwd, în timp ce la fişierul ce conţine parolele
(/etc/shadow), nu are acces decât numai utilizatorul cu drept deplin la root (administratorul
sistemului).
Fişierul /etc/passwd conţine câte o linie pentru fiecare utilizator, având următoarea
structură:
- numele de conectare (login);
- X parola invizibilă;
- numărul de identificare al utilizatorului uid (user identification);
- numărul de identificare al grupului gid (group identification);
- numele proprietarului (name owner);
- directorul atribuit la conectare (home directory);
- numele interpreterului de comenzi (shell).
La execuţia oricărui program, acestuia i se atribuie patru identificatori:
1.uid-ul real din /etc/passwd;
2.gid-ul real din /etc/passwd;
3.uid-ul efectiv al programului;
4.gid-ul efectiv al programului.
Accesul programului la un fişier va fi determinat de uid-ul şi gid-ul efective astfel:
- programul are aceleaşi drepturi de acces la un fişier ca şi proprietarul fişierului dacă uid-ul
efectiv este identic cu uid-ul fişierului;
- dacă uid-ul efectiv al programului nu este identic cu uid-ul fişierului, dar gid-ul acestuia
coincide cu gid-ul fişierului, programul are aceleaşi drepturi de acces ca şi grupul asociat
fişierului;
- dacă uid-urile şi gid-urile efective ale programului şi fişierului sunt diferite, programul va avea
aceleaşi drepturi de acces la fişier ca şi ceilalţi utilizatori.
Pentru un fişier, pot fi poziţionate (setate) două drepturi speciale de acces:
suid (set uid) şi sgid (set gid) care, la fişierele executabile au atribuite implicit drepturile pe care
le are utilizatorul atunci când le lansează:
- dacă suid a fost setat, atunci programul care accesează un fişier va avea uid-ul efectiv cu cel al
proprietarului, dar numai pe durata execuţiei programului.
Exemplu
Prin comanda:
$chmod u+s fis
se stabilesc drepturile proprietarului asupra fişierului fis, când acesta este accesat; efectul
comenzii este:
-rws-x proprietar grup fis
deci, orice membru al grupului poate accesa fişierul specificat prin fis.
Informaţii despre numerele şi numele de identificare ale utilizatorilor şi a grupurilor se
pot obţine cu comanda $id, iar numele utilizatorului curent prin comanda $logname.

4.2.6. Montarea volumelor în structura arborescentă a sistemului de fişiere

Dispozitivele periferice de intrare/ieşire se pot ataşa sistemului de fişiere în UNIX, sub


forma unor fişiere speciale ce trebuie constituite ca o structură arborescentă de root, director,
subdirector, simpla montare fizică nefiind suficientă; montarea semnifică în acest caz accesul la
dispozitivul periferic.
Comenzile specifice vor fi menţionate cu scopul cunoaşterii manierei de abordare a
dispozitivelor periferice de către sistemul de operare UNIX, dar ele nu pot fi executate decât
dacă sunt date de către superuser (comenzi privilegiate).
Un sistem de fişiere poate fi înregistrat pe diferite volume logice materializate pe variate
suporturi fizice, dar pentru a opera sub sistemul UNIX, toate trebuie să se găsească într-un volum
unic denumit root, volum ce conţine programul de încărcare a sistemului de operare.
Sistemul de fişiere poate fi utilizat doar dacă este încorporat în structura de fişiere
accesibilă la pornirea sistemului; operaţia se poate realiza prin legarea sistemului de fişiere
respectiv, la un director al sistemului de fişiere accesibile- operaţia se numeşte montare. În
momentul montării celelalte fişiere devin transparente pentru sistem până la realizarea comenzii
inverse (demontare).
Montarea unui volum se realizează cu comanda:
$/etc/mount [-r] /dev/tip_dispozitiv /nume_director
unde tip_dispozitiv reprezintă numele fişierului special asociat dispozitivului fizic care se află
în directorul /dev;
-r protejat la scriere;
nume_director este numele directorului ce va fi substituit de directorul rădăcină al volumului;
acesta trebuie să fie creat în prealabil ca director vid);
/etc este directorul în care se află comanda mount.
Demontarea unui volum se realizează cu comanda:
$/etc/umount /dev/tip_dispozitiv /nume_director
De remarcat că atât montarea cât şi demontarea volumelor se poate realiza şi prin
directive de sistem ce pot fi apelate din programele utilizatorilor.
Pentru crearea unei structuri arborescente de director pentru volum se foloseşte comanda:
$/etc/mkfs /dev/nume_fis_special dimensiune_fis
care şterge tot conţinutul volumului, creând o structură de director pentru volumul ce se va indica
prin numele asociat (nume_fis_special); dimensiunea fişierului (dimensiune_fis) se specifică
prin numărul de blocuri ocupate de fişier;
/etc directorul în care se găseşte comanda mkfs;
/dev directorul în care se află numele fişierului special.

Exemple
1) Prin comanda:
$/etc/mkfs /dev/dsk1 2000
se crează un sistem de fişiere UNIX pe floppy-disk-ul montat în unitatea 1, cu un singur director,
şi cu 2000 sectoare, iar prin:
$/etc/mount /dev/fd1 /user
se montează sistemul de fişiere UNIX de pe floppy-disk-ul din unitatea 1, în directorul /user/ al
sistemului de fişiere de pe discul principal (fig.4.7.).

Fig. 4.7.

2) Comanda:
$/etc/mount -r /dev/rz4c /radu
montează un disc optic prin intermediul interfeţei de disc SCSI, în directorul /radu protejat la
scriere.
3) Crearea unui fişier special asociat unui dispozitiv periferic se face prin comanda:
$/etc/mknod /dev/nume_fis_special {c/b} nr_maj nr_min
unde c/b tipul fişierului special:
- fişier special de tip caracter (c);
- fişier special de tip bloc (b);
nr_major, nr_minor reprezintă tipul dispozitivului (nr_major), respectiv numărul acestuia
(nr_minor) ambele specificate în octal, numerele depinzând esenţial de sistemul de operare
UNIX.
4.2.7. Implementarea sistemului de fişiere UNIX pe disc
Orice volum de disc este iniţializat ca un sistem de fişiere, conţinând un număr de blocuri
adresabile (de la 0 la valoarea maximă dată la iniţializare) organizate astfel:
Bloc 0: Boot
Bloc 1: Superbloc
Bloc 2: Zona de inod-uri
Bloc 3:
..
Blocuri de date
..
Bloc n: Zona de evacuare temporară (swapping).

Blocul Boot conţine codul încărcătorului părţii rezidente a sistemului de operare (în
general primul sector care este rezervat pentru programul de boot-are şi pentru informaţii despre
partiţionarea discului).
Superblocul conţine informaţii generale despre sistemul de fişiere:
- dimensiunea sistemului de fişiere împreună cu numărul de blocuri libere, tabloul ce conţine
blocurile libere, indexul următorului bloc liber din tablou;
- dimensiunea zonei de inod-uri, numărul de inod-uri libere, tabloul ce conţine inod-urile libere,
indexul următorului inod liber din tablou;
- câmpurile neautorizate la scriere pentru tablourile ce conţin blocuri şi inod-uri libere.
Superblocul este copiat în memoria internă, iar nucleul actualizează permanent
superblocul, pentru a asigura corespondenţa reală cu sistemul de fişiere (există un flag care este
setat la fiecare modificare a superblocului).
Zona de inod-uri conţine câte un inod pentru fiecare fişier de pe disc (eticheta de fişier).
Reprezentarea internă a unui fişier este specificată prin inod-ul asociat; acesta reprezintă o intrare
în lista de indecşi a unui volum, care conţine:
- poziţia pe disc a datelor din fişier (adresa);
- proprietarul fişierului;
- momentul ultimei accesări a fişierului sau ultima modificare a fişierului sau inod-ului.
Un fişier are asociat un singur inod, dar poate avea mai multe nume, fiecare dintre
acestea fiind în relaţie cu acelaşi inod. Relaţiile dintre nume şi inod se numesc legături.
Fiecare inod are asociat un număr de ordine i-number care desemnează în mod unic
numele interne ale fişierelor, iar directorii conţin tocmai tabela de traducere a numelui extern al
fişierului, în numărul de ordine asociat.
Conţinutul unui inod este modificat în momentul schimbării proprietarului, a drepturilor
de acces sau a numărului de legături; astfel, modificarea conţinutului unui fişier implicând
automat modificarea inod-ului asociat. Modificarea inod-ului însă, nu implică neapărat şi o
modificare a conţinutului fişierului.
Ştergerea unui inod se realizează cu comanda:
$clri /dev/nume_fis_special i_number
care şterge din sistemul de fişiere asociat unui dispozitiv periferic (nume_fis_special), inodul
specificat prin număr (i_number).
Exemplu
Prin comanda:
$clri /dev/fd0 5
se va şterge inod-ul 5 din sistemul de fişiere asociat floppy-disk-ului fd0.
Structura zonei de inod-uri cuprinde:
- numărul de identificare proprietar şi grup;
- tipul fişierului şi atributele de acces;
- lista blocurilor fizice ale fişierului compusă din 13 intrări:
10 constituie adresele primelor 10 blocuri de date;
11 bloc de simplă adresare indirectă;
12 bloc de dublă indirectare;
13 blocul de tripla indirectare;
- numărul de legături la fişier, indicând numărul directorilor care au referinţe la acest fişier;
- data ultimei accesări, a ultimei modificări şi data creării.
La deschiderea fişierului, inod-ul este copiat în memoria internă de către nucleu,
adăugându-i-se şi alte informaţii.
Blocurile de date conţin informaţia utilă a fişierelor organizate în blocuri:
- fiecare bloc are mărimea de 512 sau 1024 bytes;
- alocarea se face dinamic, pe baza listei blocurilor libere din superbloc.
Zona de evacuare temporară (swapping) conţine imaginile proceselor utilizator, atunci
când acestea sunt temporar eliminate din memoria internă.
Prin comanda:
$fsck [-sX][-D][nume_fis_special]
el poate testa şi repara sistemul de fişiere specificat prin nume_fis_special; maniera de testare şi
reparare este interactivă. Testarea constă în verificarea consistenţă între valorile parametrilor
memoraţi în tabelele Superblocului şi Zona de inod-uri. Dacă nu sunt depistate erori, atunci se va
afişa:
- numărul de fişiere;
- numărul de blocuri utilizate;
- numărul de blocuri libere.
-s ignoră lista de blocuri libere existentă şi reconstituie o nouă listă, prin rescrierea Superblocului
sistemului;
-D realizează verificarea directorilor în vederea depistării eventualelor blocuri defecte.
Comenzile de afişare a informaţiilor de pe disc:
$du [-ar][f1 f2 ...fn]
afişează numărul de blocuri conţinute în fiecare fişier f1 f2 ...fn; implicit, se afişează directorul
curent;
-a afişează şi numărul de blocuri conţinute în fişiere; implicit, se afişează numai directori;
-r afişează mesaje de eroare pentru directorii care nu pot fi citiţi.

4.3. Interpretorul de comenzi shell


Dintre principalele componente ale sistemului de operare UNIX, o poziţie privilegiată o
au componentele Kernel şi Shell; Kernel este sistemul supervizor care încarcă toate procesele şi
le execută în manieră proprie la un moment dat iar Shell este singura cale prin care utilizatorul
poate comunica cu Kernel-ul cu privire la:
- care programe să le execute;
- cine să le execute;
- ce să facă cu ieşirea;
- alte servicii utilizator;
- comunicarea dorinţelor utilizatorului către Kernel.
Shell primeşte comenzile de la utilizator, le decodifică şi comunică dorinţele acestuia la
Kernel, deci toate comunicaţiile dintre utilizator şi Kernel sunt conduse prin Shell.

4.3.1. Comenzi Shell


După conectarea utilizatorului la o sesiune de lucru, este invocat automat Shell-ul (prin
apariţia prompter-ului $), care informează utilizatorul că aşteaptă comenzi ce se vor introduce de
la tastatură. În continuare interpreterul de comenzi Shell execută următoarele activităţi:
- decodifică linia de comandă (caută programul);
- anunţă Kernell să execute programul şi aşteaptă (sau nu) terminarea execuţiei;
- primeşte răspunsul Kernell şi afişează răspunsul şi prompterul $;
- reia ciclic secvenţa, până la introducerea CTRL/D pe care o interpretează ca "sfârşit transmisie
de la tastatură";
- anunţă Kernell să deconecteze utilizatorul.
Comenzile practic, sunt programe executabile pe care Shell le caută în ordinea: directorul
curent, /bin, /usr/bin unde acestea se regăsesc ca fişiere normale.
Linia de comandă are forma:
$comandă argumente
unde argumente pot fi:
- nume de fişiere, eventual calea în care se găsesc;
- opţiuni urmate imediat după comandă şi precedate de - (specifice fiecărei comenzi).
De exemplu:
$comp -s nf1 nf2
compară f1 cu f2 şi suprimă imprimarea (care este implicită).
Se puteau folosi şi alte opţiuni ca:
-l indică forma lungă a unui serviciu efectuat de comandă;
-sl serviciu lung, fără imprimare.

4.3.2. Fişiere standard. Redirectare şi extensii


Shell deschide implicit trei fişiere standard:
- tastatura, ca fişier de intrare standard având atribuit descriptorul asociat 0 (stdin);
- monitorul, ca fişier standard de ieşire având asociat numărul 1 (stdout);
- fişierul de afişare a erorilor cu descriptorul asociat 2 (stderr).
Pentru a redirecta intrarea/ieşirea standard se pot folosi caracterele:
< pentru redirectare intrare standard;
> pentru redirectare ieşire standard;
>> pentru redirectare ieşire şi adăugare la fişierul existent.
De exemplu
$ls -l > nf1
listare directori forma lungă în nf1 care pierde conţinutul iniţial;
$ls -l >> nf1
idem, dar conţinutul iniţial nu se pierde.
Caracterele speciale (wildcards) "*" şi "?" au aceeaşi semnificaţie ca la MS-DOS, operatorul
de negare fiind "!".
[..] specifică o listă de caractere ordonate sau identificate individual (separate prin virgulă).
De exemplu
$rm stud. [!a-m][2,4,9]
şterge fişierele cu numele stud ce nu conţin la extensie una din literele de la a la m urmate de 2,
4, 9 (exemplu: stud.x9)
Toate intrările de la tastatură sunt intorduse într-o zonă de buffer (arie de memorie
rezervată pentru stocarea caracterelor recepţionate) până când sunt solicitate de Shell, deci Shell
nu prelucrează imediat intrările; la un moment dat Shell va decodifica aceste intrări, pe parcursul
căreia nu va desfăşura alte activităţi; se poate astfel imagina că Shell execută două activităţi
distincte conectate printr-o conductă având rolul de:
- preluarea caracterelor de la tastatură şi memorarea lor ântr-un buffer;
- citirea caracterelor din buffer şi decodificarea lor.
Observaţie: Shell nu poate primi şi decodifica mai puţin de o linie de comandă completă.
Bufferul acceptă maxim 256 de caractere de la tastatură şi prin acţionarea tastei Enter se indică
terminarea liniei de comandă; în acel moment primul program are ieşirea gata, iar al doilea
program are intrările în aşteptare (sunt astfel satisfăcute cerinţele conductelor); când începe
decodificarea, până la terminarea acestuia (marcată prin $ la monitor), utilizatorul poate
introduce caractere de la tastatură în continuare, ele intrând în buffer; dacă se depăşesc 256 de
caractere, se vor ignora fără nici un avertisment.
Efectuarea corecţiilor pentru caracterele introduse, se poate realiza prin operaţii de:
- ştergere a unui caracter (prin "#" sau backspace introduse imediat după caracterele ce se
vor şterge);
- ştergerea unei linii (prin "@" sau CTRL/X după linia introdusă).
Prin comanda:
$stty erase % kill &
se pot înlocui caracterele de ştergere "#" cu "%" şi "@" cu "&".
Dacă se va introduce comanda:
$stty
în urma execuţiei, se va afişa:
- viteza terminalului exprimată în bauds (bytes/s) care poate fi modificată;
- caracterele de ştergere erase='#', kill='@';
- verificarea imparităţii, a terminatorului de linie şi a ecoului caracterelor introduse.

4.3.3. Multitasking şi aşteptare


Comanda
$who
arată care utilizator este conectat, pe ce terminal şi la ce moment.
UNIX permite multitasking (mai multe task-uri ce se execută concomitent) ceea ce
implică apariţia prompter-ului $ fără a aştepta execuţia completă a task-ului lansat în execuţie şi
posibilitatea lansării altei comenzi; pentru a specifica execuţia (fără aşteptarea terminării) unui
task se foloseşte caracterul & astfel:
$comanda1 &
31
$comanda2
la care Kernel arată numărul de identificare al procesului (pid-process identification), de
exemplu 31; fără a aştepta terminarea execuţiei comandă1 Shell furnizează prompterul $ pentru
a introduce altă comandă, comenzile 1 şi 2 executându-se concomitent.
Dacă prima comandă este un task în execuţie iar comanda2 este un program interactiv
(de exemplu, editorul vi), comanda2 se va încheia de către utilizator când va termina editarea,
iar task-ul lansat prin comanda11 este neinteractiv (se mai numeşte proces background
deoarece execuţia sa este invizibilă în timpul cât utilizatorul este ocupat cu editorul vi).
Dacă utilizatorul doreşte oprirea task-ului background va specifica acest lucru prin
comanda:
$kill 31
unde 31 este numărul de identificare al procesului (pid-ul).
Observaţie: pot fi lansate în execuţie mai multe procese background.
Comanda
$ps (process status)
arată ce procese au fost lansate în execuţie, prin ce comandă şi cât timp au fost executate, care
sunt în execuţie, pentru care utilizator, etc.

4.3.4. Conducte şi linii de conducte


Shell permite comunicarea între procese prin conducte (pipes). Conductele sunt canale de
date ce conduc ieşirea unui program către intrarea altui program, fără crearea unor fişiere
intermediare; se utilizează în acest scop caracterul "¦".
De exemplu
$who¦lpr
ieşirea la imprimantă (prin spooler-ul imprimantei -lpr) a utilizatorilor conectaţi, echivalează cu
secvenţa:
$who > fis
$lpr < fis
$rm fis
Atunci când se specifică o conductă (două sau mai multe procese), Kernell startează
execuţia ambelor procese ca şi cum ar fi procese background, cele 2 procese executându-se
sincronizat, aşteptând ieşirile pentru intrări.
De exemplu
$who¦sort¦lpr
reprezintă o linie de conducte (pipeline) unde:
who va produce la ieşire toţi utilizatorii conectaţi;
sort sortează alfabetic;
lpr scrie la imprimantă prin spooler.

4.3.5. Limbajul de programare Shell


O secvenţă de comenzi Shell poate fi constituită ca program (numit procedură Shell) care
poate fi memorat în fişiere asemănător programelor scrise în diverse limbaje şi executate la
cerere.
Prin comanda:
$sh [nf]
este apelată o procedură Shell ce conţine intrările în fişierul specificat prin numele nf;
- dacă nf lipseşte, implicit se consideră fişierul standard de intrare (tastatura);
Această comandă implică două copii Shell: una la pornirea sistemului, iar cealaltă la
solicitarea execuţiei procedurii (prima procedură Shell preia intrări de la tastatură, iar a doua
procedură preia intrările din fişierul nf).
O variabilă Shell se poate declara prin:
$variabila=valoare
iar referirea variabilei se face prin includerea înaintea numelui ei, a caracterului "$".
De exemplu:
$ruta=/usr/user1
$cd $ruta
unde $ruta este o variabilă ce substituie calea /usr/user1.
Utilizarea Shell-ului ca limbaj de programare permite execuţia condiţionată a unor
comenzi, ce se realizează prin testarea indicatorilor de stare poziţionaţi după execuţia unei
comenzi în funcţie de care (True, False) se execută o acţiune.
Structura alternativă if:
if grup_condiţii
then grup_comenzi_1
[elif grup_comenzi_2]
else grup_comenzi_3
fi
ude fi este identificatorul de încheiere a structurii alternative;
Structura alternativă case:
case variabilă in
varianta 1)grup_comenzi_1;;
varianta 2)grup_comenzi_2;;
...
varianta n)grup_comenzi_n;;
esac
Structura repetitivă for:
for variabilă [in valoare1 valoare2 ... valoaren]
do
grup_comenzi
done
unde variabilă ia valori din lista specificată prin valoare1 valoare2 ... valoaren; dacă valoare1
valoare2 ... valoaren lipsesc, variabilă va lua pe rând valorile specificate în procedură ca
parametrii; done este terminator de buclă.
Structura repetitivă while:
while grup_condiţii
do
grup_comenzi
done
unde done este terminator while;
Structura repetitivă until:
until grup_condiţii
do
grup_comenzi
done
4.3.6. Fişiere de comenzi indirecte
Una dintre cele mai importante funcţii ale Shell-ului o constituie executarea fişierelor de
comenzi indirecte (numite şi script-uri).
Un fişier de comenzi indirecte este o procedură Shell constituită ca un fişier text, care
conţine comenzi similare ce pot fi introduse interactiv.
Avantajul utilizării unui astfel de fişier constă în execuţia unui set complex de comenzi
prin trei forme (sursă, obiect, executabil).
Puterea limbajului de comandă constă în posibilitatea de a utiliza diferite programe
tratate ca instrucţiuni, împreună cu mecanismele de interconectare puse la dispoziţie de către
Shell.
Un program lansat în execuţie primeşte anumite şiruri de caractere ce formează mediul
asociat; prin Shell, se pot introduce şi alte şiruri de caractere în mediu.
Mediul curent ce aparţine interpreterului de comenzi se afişează cu comanda:
$env
(environment-echipament)
ce conţine următoarele valori mai semnificative:
- $HOME= referă catalogul alocat utilizatorului (home directory);
- $SHELL= interpreterul de comenzi utilizat;
- $LOGNAME= numele utilizatorului în sistem;
- $PATH= defineşte lista directorilor ce sunt parcurşi de Shell în căutarea fişierelor executabile
corespunzător comenzii introduse;
- $MAIL= numele fişierului ce conţine mesajele primite de utilizator prin e-mail;
- $TERM= tipul terminalului;
- $PS1= defineşte prompter1 asociat interpreterului (implicit este caracterul "$");
- $PS2= stabileşte al doilea prompter de continuare a unei comenzi (implicit este caracterul ">").
Într-o linie de comandă construcţiile prefixate cu $, sunt înlocuite cu valorile variabilelor
de mediu sau variabile Shell; interpreterul Shell conţine şi anumite variabile predefinite, având
următoarea semnificaţie:
- $0 este numele Shell-ului sau fişierului de comenzi indirecte, ca procese curente în curs de
execuţie;
- $1, $2, ... , $9 sunt parametrii transmişi procedurilor Shell pe linia de comandă;
- $# numărul de parametri poziţionali ai unei proceduri Shell;
- $? codul de stare al ultimei comenzi executate;
- $$ identificator de proces al Shell;
- $! identificatorul ultimului proces lansat în background;

4.4. Nucleul sistemului de operare UNIX (KERNEL)


Aşa cum s-a menţionat în acest capitol, o parte a programelor de comandă şi control sunt
rezidente în RAM alcătuind nucleul sistemului de operare (Kernel) încărcat odată cu
pornirea
sistemului de calcul.
Nucleul sistemului se operare UNIX este acea parte a programelor de comandă şi
control
care activează şi controlează:
- alocarea timpului maşină;
- spaţiul de memorie;
- canalele de comunicaţie către diverse taskuri executate de utilizator la un moment dat.

4.4.1. Structură şi funcţii


Nucleul sistemului de operare este alcătuit din următoarele componente:
- programul supervizor central;
- rutine de serviciu pentru o serie de activităţi cum ar fi de exemplu, scrierea în memorie,
gestiunea ceasului sistem, etc.
În mod normal, utilizatorul foloseşte comenzile Shell care dirijează execuţia programelor
dorite sub supervizorul Kernel, acesta fiind astfel invizibil utilizatorului. Pentru utilizator,
sistemul de operare UNIX apare ca fiind alcătuit din:
- un set de programe, fiecare corespunzând unei anumite comenzi;
- Shell-ul care dirijează comenzile şi coordonează execuţia programelor utilizatorului.
Practic însă, sistemul de operare UNIX este compus din :
- un set de programe de servicii care execută funcţiile legate de sarcinile hardware şi software;
- Kernel-ul care coordonează execuţia programelor de servicii, specificate sub forma unor
comenzi adresate către Shell.
Programele de servicii sunt apelate atunci când sunt necesare (zona de tranziente), în timp
ce supervizorul este rezident în RAM, constituind mediul software de bază pentru orice
evenimente din sistem.
Principalele funcţii îndeplinite de nucleul sistemului de operare:
- planificarea, coordonarea şi gestionarea execuţiei proceselor;
- furnizarea de servicii de sistem cum sunt: tratarea operaţiilor de intrare/ieşire şi gestiunea
fişierelor;
- manipularea operaţiilor dependente de hardware, întreruperile şi funcţiile de sistem;
- gestiunea memoriei.
Nucleul UNIX este alcătuit din aproximativ 10000 de linii ce constituie codul
programului care, în funcţie de sistem, se transformă într-un număr mai mare sau mai mic de
cuvinte maşină (sau bytes); dintre acestea, 5 - 10% din totalul codului programelor (Shell,
utilitare, KERNEL şi celelalte) este variabil funcţie de sistemul de calcul şi de setul de utilitare
(fig. 4.8.).
Aşa cum rezultă din fig. 4.8, o mare parte din aceste programe este destinată gestiunii
memoriei şi gestiunii proceselor, această parte evidenţiind:
- conţinutul stivei;
- conţinutul registrelor sistemului;
- detalii de mediu, când procesele sunt introduse în memorie şi răspund la întreruperile
procesorului.
Această parte conţine 7 - 8000 linii codul programelor scrise în limbajul C (deci portabilă
pe orice sistem de calcul). Includerea acestei părţi în nucleu se justifică prin necesitatea unui
răspuns foarte rapid.
Fig. 4.8. Structură Kernel

Altă parte a Kernel-ului conţine driverele dispozitivelor periferice de intrare/ieşire


constituite din programe ce realizează:
- controlul adreselor de citire/scriere, adresarea registrelor de date ale perifericelor de
intrare/ieşire;
- manipularea întreruperilor generate de aceste dispozitive;
- efectuarea recuperării erorilor.
Conţine aproximativ 1000 linii codul programelor scrise tot în limbajul C, dar acest
număr este variabil în funcţie de numărul perifericelor de intrare/ieşire.
Primitivele de sistem sunt specifice fiecărui sistem de calcul (scrise în limbaj de
asamblareaproximativ 1000 linii codul programului), ele conţinând:
- operaţii de intrare/ieşire de bază;
- comutarea execuţiei între procese;
- permiterea sau inhibarea întreruperilor hardware;
- resetarea priorităţilor întreruperilor;
- alte operaţii.
Accesarea primitivelor de sistem se realizează prin apeluri (directive) de sistem (system
calls) din programe în C sau în limbaj de asamblare.
4.4.2. Procese şi stări
Un sistem de calcul poate să lucreze la un moment dat în două moduri:
- sistem (Kernel), când execută un cod sistem.
Comutarea între modul utilizator şi KERNEL se realizează prin următoarele mecanisme:
- ceasul- care întrerupe orice alt program cu frecvenţa de 60 Hz, rutina de ceas permiţând
reevaluarea priorităţilor proceselor şi implicit schimbarea procesului; în absenţa altor întreruperi,
ceasul realizează divizarea timpului, ceea ce permite ca sistemul să fie împărţit între mai mulţi
utilizatori;
- apeluri de sistem prin care utilizatorul solicită diverse servicii oferite de sistemul de operare;
cele care realizează operaţii de intrare/ieşire conducând la suspendarea procesului apelator pe
durata transmiterii datelor;
- cereri de serviciu ale perifericelor de intrare/ieşire.
Procesul este conceput fundamental de organizare a sistemului de operare UNIX. În
esenţa, un proces reprezintă un program în execuţie. Pentru un program activ, pot exista mai
multe procese active- numite instanţe:
- din punct de vedere al procesului, operaţiile nucleului sunt prioritare;
- din punct de vedere al nucleului, procesele sunt structuri de date catalogate.
Informaţiile necesare procesului sunt memorate în:
a) tabela proceselor constituită în memorie, ce conţine o intrare pentru fiecare proces detaliind
starea acestuia:
- localizarea procesului;
- adresa de memorie şi adresa de evacuare;
- mărimea procesului;
- numărul de identificare;
- identificatorul utilizat;
b) tabela utilizator, care este ataşată fiecărui proces activ la rutinele nucleului lui (fig.4.9).
Crearea unui proces implică astfel iniţializarea unei intrări în tabela procesului, care
iniţializează o tabelă a utilizatorului creând totodată textul real şi datele pentru proces.
Fig. 4.9. Iniţializarea tabelei utilizator
Schimbarea stării unui proces (se execută, aşteaptă, este evacuat, este încărcat, primeşte
un semnal) este o activitate ce se focalizează pe tabela procesului (fig. 4.10.):

Fig. 4.10. Tranziţia stărilor unui process


- terminarea unui proces implică eliberarea intrării sale în tabela proceselor, putând fi folosită
pentru alte procese;
- când procesul este activ, au loc alte evenimente, de exemplu aşteptarea terminării unei operaţii
de intrare/ieţire;
- pe durata suspendării unui proces, tabela utilizatorilor nu este accesată sau modificată;
- dacă procesul este evacuat pe disc, este evacuată şi tabela utilizator în cadrul imaginii
procesului; tabela utilizator (structură a utlizatorului) conţine în acel moment:
- numele de identificare al utilizatorului şi al grupului din care face parte, pentru stabilirea
drepturilor de acces;
- pointerii din tabela de fişiere existente în sistem, pentru toate fişierele deschise;
- un pointer către inod-ul directorului curent în tabela de inod-uri;
- o listă a răspunsurilor pentru diverse semnale.
Informaţia curentă despre un proces se schimbă prin execuţia directivei chdir când este
schimbată valoarea pointerului către inod-ul directorului curent.

S-ar putea să vă placă și