Sunteți pe pagina 1din 34

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 apariiei acestui sistem de operare a constat din: necesitatea standardizrii i unificrii sistemelor de operare, n special a interfeei cu utilizatorul; pstrarea n condiiile transferului pe alte sisteme de calcul, a structurii volumelor i fiierelor; asigurarea unor niveluri superioare de portabilitate a produselor - program; posibilitatea interconectrii de sisteme cu arhitecturi, tipuri i puteri diferite, sub acelai sistem de operare. independena software-ului de aplicaii, fa de evoluia hardware.

6.1. CARACTERISTICI I COMPONENTE MAJORE 6.1.1. Evoluie 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 asigurrii portabilitii. 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 soluie de standardizare in domeniul sistemelor de operare, reprezentnd 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. 6.1.).

Sisteme operaionale
AT & T Bell Laboratories Versiunea 6 1975

BSD Xenix

Versiunea 6

1979

System III

1982

1984

BSD 4.2

System V.2

1984 AT&T + SUN

1985

BSD 4.3

System V.3

1986

BSD 4.4 1993 influene descendeni direci

OSF /1 1992

System V.4

1988

Fig. 6.1. Evoluia sistemelor de operare UNIX Dintre principalele raiuni de utilizare se pot specifica: - existena 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, reele locale (LAN) i generale (WANG), inteligen artificial, statistic, simulare, etc.; - portabilitatea pe toat gama sistemelor de calcul ce lucreaz sub UNIX, deci independena de hardware; - posibilitatea de a executa mai multe sarcini simultan, pentru mai muli utilizatori concomitent, asigurnd exploatarea eficient a capacitii de prelucrare puse la dispoziie. Caracteristicile de baz se pot sintetiza astfel: - este un sistem de operare time - sharing, multiuser i multitasking; - asigur protecia fiierelor i execuiei, prin existena unor parole i drepturi de acces; - dispune de intrri/ieiri generalizate prin care operaiile de intrare/ieire sunt integrate n sistemul de fiiere; - existena unui sistem de ntreruperi logice pentru sincronizarea proceselor reentrante i asincrone multiple; - managementul spaiului afectat execuiei proceselor i controlul timpului de acces la procesele n ateptare, se face prin transferul de pagini ntre memoria RAM i cea extern; - existena unei interfee simple i interactive (SHELL) prin care se asigur dialogul utilizatorului cu sistemul de operare; - caracterul de sistem deschis este conferit de asigurarea att a portabilitii sistemului de operare, ct i a software-ului de aplicaie; - acoperirea unei vaste game de aplicaii: compilatoare, sisteme de gestiune a bazelor de date

Capitolul 6 Sistemul de operare UNIX (Oracle, Gupta), reele de calculatoare, inteligen artificial, simulare, gestiune, statistic, instruire asistat de calculator, etc.; - permite execuia aplicaiilor n MS-DOS, n paralel cu execuia de procese sub UNIX (submeniu pentru MS-DOS); - ntreinere i dezvoltare facil. 6.1.2. Arhitectura sistemelor de calcul ce lucreaz cu UNIX Arhitectura unui sistem de calcul din punct de vedere al funcionalitii, se prezint sub form stratificat pe trei niveluri (fig.6.2.).
Software de aplicaii Aplicaie Aplicaie utilizator utilizator Proc. tab SGBD Proc. texte CAD/CAM GAMES

Software de aplicaii Compilatoare Linkeditoare Sistem de operare NUCLEU (KERNEL) Interpreter comenzi Utilitare

Nivel fizic

Hardware Dispozitive fizice

Microprograme - microcod

Limbaj main

Fig. 6.2. Arhitectura sistemelor ce lucreaz sub Unix Cel mai inferior nivel este nivelul fizic -nivelul la care opereaz hardware-ul, acesta incluznd dispozitivele fizice, microcodul i limbajul de asamblare. Urmtorul nivel -software-ul de baz sau software-ul de sistem are ca principal component sistemul de operare avnd la baz nucleul (Kernel) alturi de editoare de texte, compilatoare, interpretere de comenzi i utilitare. Nivelul superior materializat prin software-ul aplicativ, cuprinde practic, o gam infinit de aplicaii. Este de remarcat faptul c orice nivel comunic numai cu nivelul imediat inferior sau superior, furniznd 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 acioneaz ca o interfa ntre utilizator reprezentat prin programele de aplicaie pe care acesta le lanseaz n execuie i componenta hardware (fig. 6.3.).
Software de aplicaie Utilizator Interpretor de comenzi Utilitare Nucleu Nucleu

Fig. 6.3. Sistemul de operare UNIX - interfa ntre hardware i utilizator

Sisteme operaionale

Interpretorul de comenzi Shell Programe aplicative Utilitare

Utilizator

Dispozitive periferice de intrare/ieire

Programe gestiune operaii de intrare/ieire

Fig. 6.4. Componentele majore ale sistemului de operare UNIX Nucleul (Kernel) este componenta care asigur servicii de sistem pentru programele de aplicaii asigurnd gestiunii proceselor, a memoriei, a intrrilor / ieirilor i a timpului; Shell - interpreterul de comenzi, reprezint mecanismul prin care sistemul de operare realizeaz interfaa 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 crui productor 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 fiiere cuprinde programe utilitare, aplicative i de gestiune a operaiilor de intrare/ieire. Interfeele disponibile utilizatorului sunt organizate pe trei niveluri: * nivelul exterior nucleului, care poate fi accesat de ctre utilizator prin intermediul utilitarelor; * nivelul intermediar, accesat prin funcii din biblioteca limbajului C; * nivelul inferior, a crui accesare se realizeaz prin funciile de sistem (System Calls). Asemntor MS-DOS-ului care n cursul dezvoltrii sale a fost dotat cu interfeele grafice Windows, UNIX-ul a ncorporat ca principale interfee grafice: * X/Windows al firmei MIT, folosit i de SCO n versiunile Open DeskTop (ODT); * Open Look al crei productor 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. 6.5.

Capitolul 6 Sistemul de operare UNIX

Kernel Drivere periferice Comenzi i utilitare Shell Ferestre i interfee grafice Utilizator

Fig. 6.5. Straturile interpuse ntre utilizator i nucleul sistemului de operare UNIX 6.1.4. Tipuri de sisteme de operare UNIX Principalele variante de sisteme de operare UNIX existente astzi n domeniul software-ului de sistem precum i sistemul de baz pe care sunt fundamentate sunt redate n fig. 6.6.
BSD OSF/1 System V.4 System V.3

Sun OS

SCO

Linux DEC OSF/1

AIX

HP-UX

Solaris

Irix

Fig. 6.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; - interfeele grafice cuprind principalele funciile din interfeele X/Windows i Open Look; - Shell-urile: Bourne, Korn, C; - suport pentru conectare la reea: * protocolul TCP/IP; * interfa pentru comunicarea ntre procese; * gestiunea fiierelor distribuite (NFS);

Sisteme operaionale - interfa binar de aplicaii (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 pot electronic, protocol TCP/IP i NFS; - suport MS-DOS; - este emulat interfaa grafic Windows; - poate accesa partiii DOS multiple mai mari de 32 Mb. SUN OS Sistemul de operare Unix SUN OS este destinat pentru staiile de lucru SUN, inclusiv pentru SUN 386; a fost proiectat avnd la baz UNIX V Release 3 i BSD 4.2 i 4.3. Cuprinde: - sistemul de fiiere al reelei (NFS); - interfa grafic utilizator SunView; - suport pentru operare fr disc pe reea (Diskless Operation); - nucleul are circa 200 funcii sistem, biblioteci cu rutine pentru programe de aplicaie (rutine matematice i aplicaii reea); - Shell Bourne i C; - poate rula simultan i aplicaii DOS care au acces la fiierele din reeaua Sun Os. SOLARIS Sistemul de operare UNIX varianta Solaris al firmei SUN, cuprinde urmtoarele componente semnificative: - Sun Os 5.0 bazat pe Unix System V Release 4; - ONC Distributed Computing Platform -colecie de protocoale de intercomunicare i servicii distribuite; - sistemul de vizualizare OpenWindows V 3; - interfaa grafic OpenLook; - Deskset V3- set de instrumente pentru activitatea de desktop. ncepnd cu versiunea Solaris 2.6, sistemul de operare are ca principale nouti, un set de baz pentru servicii de reea, inclusiv propriul server Web i browser. mbuntirile noii versiuni au condus la urmtoarele constatri: - cel mai rapid mediu Java; - suport pentru fiiere mari; - creterea cu cca 35 % a performanelor pentru baze de date; - creterea cu 350 % a performanelor 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, dispunnd suplimentar de cteva 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.

Capitolul 6 Sistemul de operare UNIX IRIX IRIX include majoritatea caracteristicilor de la BSD, av avnd la baz Unix System V.4. AIX Sistemul de operare UNIX varianta AIX a fost proiectat de corporaia 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 avnd implementate microprocesoare RISC-6000 versiunea AIX 4.1.3. UNIX WARE Unix Ware este o variant avnd la baz versiunea UNIX System V Release 4, rezultat dintr-o colaborare UNIX i Novell. Componente eseniale: - nucleul din Unix System V Release 4.2; - sistemul de operare de reea local Netware; - interfee 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 esenialul variantei BSD, fiind destinat utilizrii individuale de ctre profesioniti Unix. Este o soluie acceptabilpentru conectarea la Internet i poate fi utilizat ca X terminal n siteurile Unix. 6.2. Sistemul de fiiere UNIX SYSTEM V Fiierele reprezint din punct de vedere logic, unitatea elementar de memorare pe suportul magnetic. 6.2.1. Tipuri de fiiere Sistemul de operare UNIX System V lucreaz cu urmtoarele tipuri de fiiere: - fiiere obinuite Aceste fiiere sunt constituite dintr-un ir de bytes (memorai de obicei pe disc) terminat cu un marker de sfrit de fiier (EOF). irul este divizat n linii de text terminate cu caracterul "new line" (CR). Restriciile de lungime, format, utilizat; - fiiere speciale Fiiere speciale se constituie ca o interfa ntre programele utilizator i rutinele nucleului sistemului de operare, ce lucreaz direct cu dispozitivele periferice de intrare/ieire. Astfel, utilizatorul va trata perifericele de intrare/ieire ca fiiere, activarea unui astfel de fiier coinciznd cu activarea driverului dispozitivului periferic asociat. La rndul lor, fiiere speciale sunt de 3 categorii: * fiiere speciale de tip caracter sunt fiierele care transfer un byte printr-o operaie de intrare/ieire; * fiiere speciale de tip bloc sunt fiierele care transfer un bloc printr-o operaie de intrare/ieire; * fiiere speciale de tip pipe sunt fiiere ce constituie canale de comunicaie ntre 2 procese; comunicaia ntre dou procese se poate realiza n memorie prin fiiere pipe obinuite, sau pe disc prin aa zisele fiiere pipe (named pipe). -cataloage de fiiere (directori) Directorii sunt cataloage de fiiere ce conin numele fiierelor 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 printe n care fiierul cu un anumit index

Sisteme operaionale (inod) apare ca subdirector (14 bytes). Aceste fiiere nu se pot citi/scrie direct de utilizator, operaiile efectundu-se prin directive de sistem. 6.2.2. Structura arborescent a sistemului de fiiere Sistemul de fiiere UNIX System V este organizat ntr-o structur arborescent sub form de directori i subdirectori conectai la directorul rdcin (/root). Restricia de parcurgere este ca un director s nu fie legat la nivelul superior dect printr-o singur legtur. Pentru fiecare utilizator, administratorul de sistem creeaz cte un director propriu ce poate conine subdirectori sau fiiere obinuite. Identificarea n cadrul structurii arborescente se realizeaz prin numele fiierului precedat de calea n care se afl; specificarea cii se poate realiza n dou moduri: - absolut, pornind din directorul rdcin /root; - relativ, pornind de la directorul curent. Schimbarea directorului curent se realizeaz prin intermediul comenzii: $cd cale unde cale poate fi specificat: - spre extremitile arborelui, prin specificarea subdirectorului dorit; - spre baza arborelui, ceea ce presupune specificarea complet a cii; Spre deosebire de MS-DOS, la UNIX nu apare la prompter calea curent; determinarea cii curente se face prin comanda: $pwd (print work directory) care va afia calea complet; Prin comanda $cd se revine n directorul utilizatorului atribuit la nceputul sesiunii de lucru de ctre 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 tergerea unui director se efectueaz prin comanda: $rmdir nume_director Operaia este validat numai dac directorul este vid i utilizatorul are acest drept la calea respectiv. Listarea coninutului unui director se realizeaz prin comanda: $ls [-opiuni] [nume_director] unde nume_director este numele directorului al crui coninut se va afia pe monitor; implicit este listat coninutul din directorul curent; opiuni prin intermediul opiunilor se pot solicita informaii suplimentare cu privire la coninutul directorului respectiv; opiunile vor fi precedate de caracterul "-"; dintre opiunile mai semnificative: -l ofer informaii de detaliu ce privesc: tipul fiierului, protecie, proprietar, dimensiune, data ultimei modificri, nume; -a solicit specificarea tuturor intrrilor n director; fiecare intrare va fi precedat de unul din urmtoarele caractere avnd semnificaia: d subdirector; - fiier obinuit; b,c fiiere speciale de tip bloc (b) sau caracter (c); . directorul curent; .. directorul printe; -i numrul de inod; -t afiarea coninutului sortat dup timpul ultimei modificri;

Capitolul 6 Sistemul de operare UNIX 6.2.3. Structura standard a sistemului de fiiere O structur standard a unui sistem de fiiere UNIX conine urmtorii directori avnd n componen: / dev fiiere 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: fiiere cu parole, comenzi de iniializare; / tmp spaiu temporar de manevr folosit de programele de sistem; /root / unix nucleul sistemului de operare, direcionnd sistemul ctre /aixps2/unix.std; / u director n care se creeaz Home directory pentru fiecare utilizator; / local partiia activ (de aici se face bootarea); / lost+found director unde se ataeaz fiierele i directorii gsii ca nefcnd parte din nici un sistem de fiiere; / usr alte programe necesare utilizatorilor; / bin utilitare nefolosite frecvent; / tmp fiiere temporare mai puin utilizate; / lib fiiere de bibliotec utilizate mai rar; / dict lista de cuvinte, desprirea n silabe; / man directori de fiiere text coninnd manualul complet de utilizare. / spool -at timpul la care se prelucreaz; -lpd director imprimant; / user_1 / ... structuri de directori / ... / ... ai utilizatorilor / user_n 6.2.4. Protecia fiierelor i drepturi de acces Sistemul de operare UNIX dispune de 3 drepturi de acces la fiiere: - dreptul de citire read (r); - dreptul de scriere write (w); - dreptul de execuie execute (x); De asemenea, recunoate urmtoarele categorii de utilizatori: - proprietarul (u); - grupul de utilizatori (g); - ceilali utilizatori (o). De aici decurg cele 3x3 posibilii pentru precizarea complet a drepturilor de acces. Vizualizarea drepturilor de acces se realizeaz prin operaia de listare a coninutului directorului. Exemplu Dac se va introduce comanda: $ls -al efectul va fi afiarea la monitor a coninutului directorului curent cu toate intrrile i informaii de detaliu: total 24 reprezint numrul de blocuri de 512 bytes ocupate drwxrwxr-x 6 ase info 687 Apr 28 17:13 . directorul curent

Sisteme operaionale drwxrwxr-x 9 ase infocib 212 Ian 12 10:22 .. directorul printe drwxrwxr-x 1 ase stud1 43 Mar 11 15:50 fisier1 -r-wxr-x--- 2 ase stud3 8822 Feb 14 12:09 fiier2 (1)(2) (3) (4) (5) (6) (7) (8) (9) unde (1) tipul de fiier; (2) drepturile de acces ale proprietarului (u); (3) drepturile de acces ale membrilor grupului (g); (4) drepturile de acces ale altor utilizatori (o); (5) numrul de directori n care apar fiierele (numrul de legturi); (6) numele proprietarului i grupului; (7) numrul de caractere din fiier; (8) data ultimei modificri; (9) numele directorilor i fiierelor existente n directorul curent. 6.2.5. Modificarea drepturilor de acces La crearea unui fiier, se asociaz att un identificator de proprietar (uid) ct i un identificator de grup (gid), ambele atribuite de ctre administratorul de sistem. Cuvntul care pstreaz fiierele i drepturile de acces are urmtorul format: 15 13 12 10 9 7 6 5 4 3 0 xwr o xwr xwr sticky sgid suid tip fiier g u Fiierele executabile preiau la execuie uid-u//gid-ul celui care le lanseaz; dac biii sunt setai pe 1, se preia uid-ul/gid-ul proprietarului fiierului respectiv, iar la comanda ls apare opiunea s n loc de x la dreptul de execuie al proprietarului Setarea bitului sticky produce rmnerea n memoria intern a fiierului executabil - n zona de evacuare (swapping); este utilizat pentru fiiere de comenzi sau comenzi apelate frecvent (TSR). Schimbarea proprietarului (owner-ului) anumitor fiiere se face prin intermediul comenzii: $chown nume_nou_proprietar fis_1 fis_2 ... fis_n unde nume_nou_proprietar devine noul proprietar al fiierelor fis_1 fis_2 ... fis_n specificate. Exemplu Prin comanda: $chown radu fis1.x fis2.x radu devine noul proprietar al fiierelor fis1.x i fis2.x. Schimbarea grupului care deine anumite fiiere se realizeaz cu ajutorul comenzii: $chgrp nume_nou_grup fis_1 fis_2 ... fis_n prin care nume_nou_grup devine deintorul fiierelor fis_1 fis_2 ... fis_n. Adugarea unui nou grup la sistemul de fiiere UNIX se efectueaz prin comanda: $newgrp nume_grup_adaug n urma creia nume_grup_adaug este ataat la sistemul de fiiere existent. Schimbarea drepturilor de acces la un fiier se poate realiza numai de ctre proprietarul acestuia (eventual, de ctre 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 (ali utilizatori); a all (toi utilizatorii). permis stbilete accesul sau neautorizarea acestuia prin: + permisiune; - neautorizarea accesului; = permisiune absolut.

Capitolul 6 Sistemul de operare UNIX drept_acces sunt drepturile de citire (r), scriere(w) sau execuie (x); fis_1 fis_2 ... fis_n fiierele asupra crora se aplic modificarea. Exemple: 1) Comanda: $chmod a+rx prog permite tuturor utilizatorilor (a) s citeasc (r) i s execute (x) fiierul prog. 2) Comanda: $chmod u-w prog nu permite proprietarului fiierului prog s fac modificri n coninutul acestuia. 3) Prin comanda: $chmod o-r mail nu se permite altor utilizatori (o) s citeasc (r) fiierul mail. Observaie: modificarea drepturilor de acces se poate realiza i absolut prin nsumarea urmtoarelor 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 execuie pentru proprietar; 40 drept de citire pentru grup; 20 drept de scriere pentru grup; 10 drept de execuie pentru grup; 4 drept de citire pentru ali utilizatori; 2 drept de scriere pentru ali utilizatori; 1 drept de execuie pentru ali utilizatori; Exemplu Comanda: $chmod 755 prof modific drepturile de acces pentru permisiune la citire, scriere, execuie proprietar 700 (400+200+100), citire, execuie pentru grup 50 (40+0+10), i citire, execuie pentru ali utilizatori 5(4+0+1). Informaiile despre utilizatori i grupurile de utilizatori sunt cuprinse n fiierele /etc/passwd, /etc/shadow i /etc/group. Utilizatorii au acces la comenzile generale situate de regul n cile /bin i /usr/bin, acetia avnd posibilitatea s-i modifice propria parol cu comanda: $passwd parola care va solicita introducerea noii parole de dou ori. Orice utilizator are acces la fiierul /etc/passwd, n timp ce la fiierul ce conine parolele (/etc/shadow), nu are acces dect numai utilizatorul cu drept deplin la root (administratorul sistemului). Fiierul /etc/passwd conine cte o linie pentru fiecare utilizator, avnd urmtoarea structur: - numele de conectare (login); - X parola invizibil; - numrul de identificare al utilizatorului uid (user identification); - numrul de identificare al grupului gid (group identification); - numele proprietarului (name owner); - directorul atribuit la conectare (home directory); - numele interpreterului de comenzi (shell).

Sisteme operaionale La execuia oricrui 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 fiier va fi determinat de uid-ul i gid-ul efective astfel: - programul are aceleai drepturi de acces la un fiier ca i proprietarul fiierului dac uid-ul efectiv este identic cu uid-ul fiierului; - dac uid-ul efectiv al programului nu este identic cu uid-ul fiierului, dar gid-ul acestuia coincide cu gid-ul fiierului, programul are aceleai drepturi de acces ca i grupul asociat fiierului; - dac uid-urile i gid-urile efective ale programului i fiierului sunt diferite, programul va avea aceleai drepturi de acces la fiier ca i ceilali utilizatori. Pentru un fiier, pot fi poziionate (setate) dou drepturi speciale de acces: suid (set uid) i sgid (set gid) care, la fiierele executabile au atribuite implicit drepturile pe care le are utilizatorul atunci cnd le lanseaz: - dac suid a fost setat, atunci programul care acceseaz un fiier va avea uid-ul efectiv cu cel al proprietarului, dar numai pe durata execuiei programului. Exemplu Prin comanda: $chmod u+s fis se stabilesc drepturile proprietarului asupra fiierului fis, cnd acesta este accesat; efectul comenzii este: -rws-x proprietar grup fis deci, orice membru al grupului poate accesa fiierul specificat prin fis. Informaii despre numerele i numele de identificare ale utilizatorilor i a grupurilor se pot obine cu comanda $id, iar numele utilizatorului curent prin comanda $logname. 6.2.6. Montarea volumelor n structura arborescent a sistemului de fiiere Dispozitivele periferice de intrare/ieire se pot ataa sistemului de fiiere n UNIX, sub forma unor fiiere 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 menionate cu scopul cunoaterii manierei de abordare a dispozitivelor periferice de ctre sistemul de operare UNIX, dar ele nu pot fi executate dect dac sunt date de ctre superuser (comenzi privilegiate). Un sistem de fiiere poate fi nregistrat pe diferite volume logice materializate pe variate suporturi fizice, dar pentru a opera sub sistemul UNIX, toate trebuie s se gseasc ntr-un volum unic denumit root, volum ce conine programul de ncrcare a sistemului de operare. Sistemul de fiiere poate fi utilizat doar dac este ncorporat n structura de fiiere accesibil la pornirea sistemului; operaia se poate realiza prin legarea sistemului de fiiere respectiv, la un director al sistemului de fiiere accesibile- operaia se numete montare. n momentul montrii celelalte fiiere devin transparente pentru sistem pn 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 fiierului 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 rdcin 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:

Capitolul 6 Sistemul de operare UNIX $/etc/umount /dev/tip_dispozitiv /nume_director De remarcat c att montarea ct 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 folosete comanda: $/etc/mkfs /dev/nume_fis_special dimensiune_fis care terge tot coninutul volumului, crend o structur de director pentru volumul ce se va indica prin numele asociat (nume_fis_special); dimensiunea fiierului (dimensiune_fis) se specific prin numrul de blocuri ocupate de fiier; /etc directorul n care se gsete comanda mkfs; /dev directorul n care se afl numele fiierului special. Exemple 1) Prin comanda: $/etc/mkfs /dev/dsk1 2000 se creaz un sistem de fiiere 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 fiiere UNIX de pe floppy-disk-ul din unitatea 1, n directorul /user/ al sistemului de fiiere de pe discul principal (fig.6.7.).

/ dev

/ bin

/ ctc . . .

/ user

/ bin

/ tmp

...

/ user 1

/ fd 1 ...

Fig. 6.7. 2) Comanda: $/etc/mount -r /dev/rz4c /radu monteaz un disc optic prin intermediul interfeei de disc SCSI, n directorul /radu protejat la scriere. 3) Crearea unui fiier 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 fiierului special: - fiier special de tip caracter (c); - fiier special de tip bloc (b); nr_major, nr_minor reprezint tipul dispozitivului (nr_major), respectiv numrul acestuia (nr_minor) ambele specificate n octal, numerele depinznd esenial de sistemul de operare UNIX.

Sisteme operaionale Exemplu Comanda: $/etc/mknod /dev/tty4 c 3 4 creaz fiierul asociat terminalului tty4 de tip caracter (c) n calea /dev, tipul dispozitivului fiind 3 (nr_major) iar numrul dispozitivului este 4 (nr_minor). Iniializarea unui disc se efectueaz prin comanda: $diskformat /dev/tipdisc [-size s] [-dens d] [-il i] unde s numrul de bytes/sector; d densitate de nregistrare; f factorul de ntreesere; Exemplu: Comanda: $diskformat /dev/fd0 -dens 1 -size 128 il 3 formateaz floppy-disk-ul fd0 simpl densitate, cu 128 bytes pe sector, factor de ntreesere 3. Pentru a converti un fiier pe un floppy disk se utilizeaz comanda: $tar nume_fiier /dev/fd1 135 ds 120 nume_nou_fiier 6.2.7. Implementarea sistemului de fiiere UNIX pe disc Orice volum de disc este iniializat ca un sistem de fiiere, coninnd un numr de blocuri adresabile (de la 0 la valoarea maxim dat la iniializare) 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 conine codul ncrctorului prii rezidente a sistemului de operare (n general primul sector care este rezervat pentru programul de boot-are i pentru informaii despre partiionarea discului). Superblocul conine informaii generale despre sistemul de fiiere: - dimensiunea sistemului de fiiere mpreun cu numrul de blocuri libere, tabloul ce conine blocurile libere, indexul urmtorului bloc liber din tablou; - dimensiunea zonei de inod-uri, numrul de inod-uri libere, tabloul ce conine inod-urile libere, indexul urmtorului inod liber din tablou; - cmpurile neautorizate la scriere pentru tablourile ce conin blocuri i inod-uri libere. Superblocul este copiat n memoria intern, iar nucleul actualizeaz permanent superblocul, pentru a asigura corespondena real cu sistemul de fiiere (exist un flag care este setat la fiecare modificare a superblocului). Zona de inod-uri conine cte un inod pentru fiecare fiier de pe disc (eticheta de fiier). Reprezentarea intern a unui fiier este specificat prin inod-ul asociat; acesta reprezint o intrare n lista de indeci a unui volum, care conine: - poziia pe disc a datelor din fiier (adresa); - proprietarul fiierului; - momentul ultimei accesri a fiierului sau ultima modificare a fiierului sau inod-ului. Un fiier are asociat un singur inod, dar poate avea mai multe nume, fiecare dintre acestea fiind n relaie cu acelai inod. Relaiile dintre nume i inod se numesc legturi. Fiecare inod are asociat un numr de ordine i-number care desemneaz n mod unic numele interne

Capitolul 6 Sistemul de operare UNIX ale fiierelor, iar directorii conin tocmai tabela de traducere a numelui extern al fiierului, n numrul de ordine asociat. Coninutul unui inod este modificat n momentul schimbrii proprietarului, a drepturilor de acces sau a numrului de legturi; astfel, modificarea coninutului unui fiier implicnd automat modificarea inod-ului asociat. Modificarea inod-ului ns, nu implic neaprat i o modificare a coninutului fiierului. tergerea unui inod se realizeaz cu comanda: $clri /dev/nume_fis_special i_number care terge din sistemul de fiiere asociat unui dispozitiv periferic (nume_fis_special), inodul specificat prin numr (i_number). Exemplu Prin comanda: $clri /dev/fd0 5 se va terge inod-ul 5 din sistemul de fiiere asociat floppy-disk-ului fd0. Structura zonei de inod-uri cuprinde: - numrul de identificare proprietar i grup; - tipul fiierului i atributele de acces; - lista blocurilor fizice ale fiierului compus din 13 intrri: 10 constituie adresele primelor 10 blocuri de date; 11 bloc de simpl adresare indirect; 12 bloc de dubl indirectare; 13 blocul de tripla indirectare; - numrul de legturi la fiier, indicnd numrul directorilor care au referine la acest fiier; - data ultimei accesri, a ultimei modificri i data crerii. La deschiderea fiierului, inod-ul este copiat n memoria intern de ctre nucleu, adugndu-i-se i alte informaii. Blocurile de date conin informaia util a fiierelor organizate n blocuri: - fiecare bloc are mrimea de 512 sau 1024 bytes; - alocarea se face dinamic, pe baza listei blocurilor libere din superbloc. Zona de evacuare temporar (swapping) conine imaginile proceselor utilizator, atunci cnd acestea sunt temporar eliminate din memoria intern. Prin comanda: $fsck [-sX][-D][nume_fis_special] el poate testa i repara sistemul de fiiere specificat prin nume_fis_special; maniera de testare i reparare este interactiv. Testarea const n verificarea consisten ntre valorile parametrilor memorai n tabelele Superblocului i Zona de inod-uri. Dac nu sunt depistate erori, atunci se va afia: - numrul de fiiere; - numrul de blocuri utilizate; - numrul 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 depistrii eventualelor blocuri defecte. Comenzile de afiare a informaiilor de pe disc: $du [-ar][f1 f2 ...fn] afieaz numrul de blocuri coninute n fiecare fiier f1 f2 ...fn; implicit, se afieaz directorul curent; -a afieaz i numrul de blocuri coninute n fiiere; implicit, se afieaz numai directori; -r afieaz mesaje de eroare pentru directorii care nu pot fi citii.

Sisteme operaionale Exemplu $du -a /usr/radu afieaz directorii inclusiv fiierele coninute cu numrul de blocuri ocupate din directorul /usr/radu; $df [nume_fis_special] afieaz numrul de blocuri i inod-urile libere pentru sistemul de fiiere specificat prin nume_fis_special; implicit, se afieaz pentru toate sistemele de fiiere montate. 6.3. Interpretorul de comenzi shell Dintre principalele componente ale sistemului de operare UNIX, o poziie 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 ieirea; - alte servicii utilizator; - comunicarea dorinelor utilizatorului ctre Kernel. Shell primete comenzile de la utilizator, le decodific i comunic dorinele acestuia la Kernel, deci toate comunicaiile dintre utilizator i Kernel sunt conduse prin Shell. 6.3.1. Comenzi Shell Dup conectarea utilizatorului la o sesiune de lucru, este invocat automat Shell-ul (prin apariia prompter-ului $), care informeaz utilizatorul c ateapt comenzi ce se vor introduce de la tastatur. n continuare interpreterul de comenzi Shell execut urmtoarele activiti: - decodific linia de comand (caut programul); - anun Kernell s execute programul i ateapt (sau nu) terminarea execuiei; - primete rspunsul Kernell i afieaz rspunsul i prompterul $; - reia ciclic secvena, pn la introducerea CTRL/D pe care o interpreteaz ca "sfrit 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 regsesc ca fiiere normale. Linia de comand are forma: $comand argumente unde argumente pot fi: - nume de fiiere, eventual calea n care se gsesc; - opiuni urmate imediat dup comand i precedate de - (specifice fiecrei comenzi). De exemplu: $comp -s nf1 nf2 compar f1 cu f2 i suprim imprimarea (care este implicit). Se puteau folosi i alte opiuni ca: -l indic forma lung a unui serviciu efectuat de comand; -sl serviciu lung, fr imprimare. 6.3.2. Fiiere standard. Redirectare i extensii Shell deschide implicit trei fiiere standard: - tastatura, ca fiier de intrare standard avnd atribuit descriptorul asociat 0 (stdin); - monitorul, ca fiier standard de ieire avnd asociat numrul 1 (stdout);

Capitolul 6 Sistemul de operare UNIX - fiierul de afiare a erorilor cu descriptorul asociat 2 (stderr). Pentru a redirecta intrarea/ieirea standard se pot folosi caracterele: < pentru redirectare intrare standard; > pentru redirectare ieire standard; >> pentru redirectare ieire i adugare la fiierul existent. De exemplu $ls -l > nf1 listare directori forma lung n nf1 care pierde coninutul iniial; $ls -l >> nf1 idem, dar coninutul iniial nu se pierde. Caracterele speciale (wildcards) "*" i "?" au aceeai semnificaie 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 fiierele cu numele stud ce nu conin la extensie una din literele de la a la m urmate de 2, 4, 9 (exemplu: stud.x9) Toate intrrile de la tastatur sunt intorduse ntr-o zon de buffer (arie de memorie rezervat pentru stocarea caracterelor recepionate) pn cnd sunt solicitate de Shell, deci Shell nu prelucreaz imediat intrrile; la un moment dat Shell va decodifica aceste intrri, pe parcursul creia nu va desfura alte activiti; se poate astfel imagina c Shell execut dou activiti distincte conectate printr-o conduct avnd rolul de: - preluarea caracterelor de la tastatur i memorarea lor ntr-un buffer; - citirea caracterelor din buffer i decodificarea lor. Observaie: Shell nu poate primi i decodifica mai puin de o linie de comand complet. Bufferul accept maxim 256 de caractere de la tastatur i prin acionarea tastei Enter se indic terminarea liniei de comand; n acel moment primul program are ieirea gata, iar al doilea program are intrrile n ateptare (sunt astfel satisfcute cerinele conductelor); cnd ncepe decodificarea, pn la terminarea acestuia (marcat prin $ la monitor), utilizatorul poate introduce caractere de la tastatur n continuare, ele intrnd n buffer; dac se depesc 256 de caractere, se vor ignora fr nici un avertisment. Efectuarea coreciilor pentru caracterele introduse, se poate realiza prin operaii 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 execuiei, se va afia: - viteza terminalului exprimat n bauds (bytes/s) care poate fi modificat; - caracterele de tergere erase='#', kill='@'; - verificarea imparitii, a terminatorului de linie i a ecoului caracterelor introduse. 6.3.3. Multitasking i ateptare 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 apariia prompter-ului $ fr a atepta execuia complet a task-ului lansat n execuie i posibilitatea lansrii altei comenzi; pentru a specifica execuia (fr ateptarea terminrii) unui task

Sisteme operaionale se folosete caracterul & astfel: $comanda1 & 31 $comanda2 la care Kernel arat numrul de identificare al procesului (pid-process identification), de exemplu 31; fr a atepta terminarea execuiei comand1 Shell furnizeaz prompterul $ pentru a introduce alt comand, comenzile 1 i 2 executndu-se concomitent. Dac prima comand este un task n execuie iar comanda2 este un program interactiv (de exemplu, editorul vi), comanda2 se va ncheia de ctre utilizator cnd va termina editarea, iar task-ul lansat prin comanda11 este neinteractiv (se mai numete proces background deoarece execuia sa este invizibil n timpul ct utilizatorul este ocupat cu editorul vi). Dac utilizatorul dorete oprirea task-ului background va specifica acest lucru prin comanda: $kill 31 unde 31 este numrul de identificare al procesului (pid-ul). Observaie: pot fi lansate n execuie mai multe procese background. Comanda $ps (process status) arat ce procese au fost lansate n execuie, prin ce comand i ct timp au fost executate, care sunt n execuie, pentru care utilizator, etc. 6.3.4. Conducte i linii de conducte Shell permite comunicarea ntre procese prin conducte (pipes). Conductele sunt canale de date ce conduc ieirea unui program ctre intrarea altui program, fr crearea unor fiiere intermediare; se utilizeaz n acest scop caracterul "". De exemplu $wholpr ieirea la imprimant (prin spooler-ul imprimantei -lpr) a utilizatorilor conectai, echivaleaz cu secvena: $who > fis $lpr < fis $rm fis Atunci cnd se specific o conduct (dou sau mai multe procese), Kernell starteaz execuia ambelor procese ca i cum ar fi procese background, cele 2 procese executndu-se sincronizat, ateptnd ieirile pentru intrri. De exemplu $whosortlpr reprezint o linie de conducte (pipeline) unde: who va produce la ieire toi utilizatorii conectai; sort sorteaz alfabetic; lpr scrie la imprimant prin spooler. 6.3.5. Limbajul de programare Shell O secven de comenzi Shell poate fi constituit ca program (numit procedur Shell) care poate fi memorat n fiiere asemntor programelor scrise n diverse limbaje i executate la cerere. Prin comanda: $sh [nf] este apelat o procedur Shell ce conine intrrile n fiierul specificat prin numele nf; - dac nf lipsete, implicit se consider fiierul standard de intrare (tastatura); Aceast comand implic dou copii Shell: una la pornirea sistemului, iar cealalt la solicitarea execuiei procedurii (prima procedur Shell preia intrri de la tastatur, iar a doua procedur preia intrrile din fiierul nf).

Capitolul 6 Sistemul de operare UNIX 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 execuia condiionat a unor comenzi, ce se realizeaz prin testarea indicatorilor de stare poziionai dup execuia unei comenzi n funcie de care (True, False) se execut o aciune. Structura alternativ if: if grup_condiii 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 rnd valorile specificate n procedur ca parametrii; done este terminator de bucl. Structura repetitiv while: while grup_condiii do grup_comenzi done unde done este terminator while; Structura repetitiv until: until grup_condiii do grup_comenzi done 6.3.6. Fiiere de comenzi indirecte Una dintre cele mai importante funcii ale Shell-ului o constituie executarea fiierelor de comenzi indirecte (numite i script-uri). Un fiier de comenzi indirecte este o procedur Shell constituit ca un fiier text, care conine comenzi similare ce pot fi introduse interactiv. Avantajul utilizrii unui astfel de fiier const n execuia unui set complex de comenzi prin

Sisteme operaionale simpla introducere a numelui fiierului care se comport ca orice fiier executabil, fr a avea cele trei forme (surs, obiect, executabil). Puterea limbajului de comand const n posibilitatea de a utiliza diferite programe -tratate ca instruciuni, mpreun cu mecanismele de interconectare puse la dispoziie de ctre Shell. Un program lansat n execuie primete anumite iruri de caractere ce formeaz mediul asociat; prin Shell, se pot introduce i alte iruri de caractere n mediu. Mediul curent ce aparine interpreterului de comenzi se afieaz cu comanda: $env (environment-echipament) ce conine urmtoarele valori mai semnificative: - $HOME= refer catalogul alocat utilizatorului (home directory); - $SHELL= interpreterul de comenzi utilizat; - $LOGNAME= numele utilizatorului n sistem; - $PATH= definete lista directorilor ce sunt parcuri de Shell n cutarea fiierelor executabile corespunztor comenzii introduse; - $MAIL= numele fiierului ce conine mesajele primite de utilizator prin e-mail; - $TERM= tipul terminalului; - $PS1= definete prompter1 asociat interpreterului (implicit este caracterul "$"); - $PS2= stabilete al doilea prompter de continuare a unei comenzi (implicit este caracterul ">"). ntr-o linie de comand construciile prefixate cu $, sunt nlocuite cu valorile variabilelor de mediu sau variabile Shell; interpreterul Shell conine i anumite variabile predefinite, avnd urmtoarea semnificaie: - $0 este numele Shell-ului sau fiierului de comenzi indirecte, ca procese curente n curs de execuie; - $1, $2, ... , $9 sunt parametrii transmii procedurilor Shell pe linia de comand; - $# numrul de parametri poziionali ai unei proceduri Shell; - $? codul de stare al ultimei comenzi executate; - $$ identificator de proces al Shell; - $! identificatorul ultimului proces lansat n background; Exemplu $PS1="$LOGNAME@`hostname`>" va avea ca efect afiarea prompter-ului: userlogin@hostname> $PS1="`pwd`>" va seta prompter-ul la afiarea cii curente asemntor cu MS-DOS. Observaii: - cuvintele precedate de $ sunt nlocuite cu valoarea variabilei respective (substituirea variabilelor) incluzndu-le i pe cele ncadrate de ` `(substituirea comenzilor); - rezultatul oricrei comenzi seteaz variabila de mediu $? prin: 0 - execuie normal; =0 - eroare de execuie. Este posibil a se solicita execuia unei liste de comenzi ca un proces separat prin: (list_comenzi) De exemplu: $pwd;(cd /usr/user1;pwd);pwd prin care efectul comenzii cd este anulat de ntlnirea parantezei nchise, deoarece cd a schimbat

Capitolul 6 Sistemul de operare UNIX calea numai pentru subprocesul lansat pentru executarea acelei liste de comenzi. Dac se dorete execuia listei de comenzi n cadrul unui proces curent, atunci se va specifica acest lucru prin: {list_comenzi} Exemplu: $pwd;{cd /usr/user1;pwd);pwd prin careefectul comenzii cd se pstreaz i dup terminarea listei de comenzi cuprinse ntre acolade. Prin: nume () {list_comenzi} se poate defini o funcie Shell compus dintr-o list de comenzi inclus ntre acolade; apelul funciei n acest caz se face prin nume [parametru] cnd parametrii poziionali $1, $2, ... , $9 sunt iniializai cu valorile parametrilor actuali din linia de comand. Exemple 1) Pentru afiarea coninutului unui director al crui nume este transmis ca parametru, unscript posibil ar putea fi: $dir (){ >if [ $1 ==] then >echo "Apel incorect" >return 1 >else >(cd $1;pwd) >ls -al $1 >return 0 >fi >} care se va utiliza prin: $dir /usr/user1 2) Secvena urmtoare ncearc s lanseze n execuie prog1.x; dac nu-l gsete, se va afia mesajul "Nu exista fisierul prog1.x" if [-x $HOME/prog1.x] then $HOME/prog1.x else echo "Nu exista fisierul prog1.x" fi [-x] afieaz comenzile i argumentele rezultatelor execuiei, prin substituiri efectuate naintea execuiei. 3) Secvena: case $1 in a)x=alfa;; b)x=beta;; g)x=gamma;; *)x=$1;; esac echo $x va afia ce se va afla n parametrul specificat prin execuia procedurii ($0 procedura, $1 primul parametru): alfa dac parametrul conine a; beta dac parametrul conine b;

Sisteme operaionale gamma dac parametrul conine g; coninut $1 dac parametrul nu conine a, b sau g; 4) O secven pentru anumit opiune: $echo "introduceti Da sau Nu ?:\c" read raspuns rest case raspuns in [Dd] *) echo "Ati raspuns cu Da";; [Nn] *) echo "Ati raspuns cu Nu";; *) echo "Nu ati raspuns nici Da nici Nu";; esac read a1 [a2...] citete o linie de la fiierul standard de intrare, a1 primind valoarea primului cuvnt din linia de comand, a2 pe al doilea, ultimul argument primind restul liniei (rest). 5) Copierea a 3 fiiere specificate n apelul procedurii se poate realiza pe baza secvenei: for i in 1 2 3 do cp fis$1 /tmp done 6) Afiarea parametrilor poziionali: while [ $1 != ] echo $1 shift done 7) Exemplu de comand vid ca argument al buclei while care va returna codul 0 de eroare: while: do if whogrep $1 /dev/null then echo "$1 este prezent" exit else sleep 120 fi done Se va executa bucla al crei nume este dat de primul argument al procedurii Prezentarea interpreterului de comenzi Shell a avut la baz varianta clasic: Bourne Shell n care sunt scrise majoritatea fiierelor de comenzi. CShell (csh) are o sintax mai apropiat de limbajul C oferind fa se Bourne Shell (sh) posibilitatea de a lucra cu variabile structurate, capacitatea de a memora i reutiliza ultimele comenzi introduse, precum i posibilitatea de a defini i utiliza pseudonime pentru facilitarea introducerii unor comenzi mai complexe. De exemplu comanda: %alias lista ' ls -aFx \!*' introduce pseudonimul lista n locul comenzii ls -aFx, pseudonim ce poate fi utilizat ulterior ca o comand. O alt facilitate important o constituie posibilitatea trecerii unui proces din foreground la background prin utilizarea comenzilor fg (foreground) respectiv bg (background). KornShell (ksh) derivat din sh, a preluat o serie de caracteristici ale csh; printre faciliti se pot meniona: - editarea liniilor de comand similar cu editarea textelor la vi sau emacs; - utilizeaz pseudonimelor din csh, extinznd sfera de cuprindere i la subprograme constituite din funcii Shell; - grad nalt de portabilitate;

Capitolul 6 Sistemul de operare UNIX - posibilitatea utilizrii de variabile structurate asemntor csh.

6.4. Nucleul sistemului de operare UNIX (KERNEL) Aa cum s-a menionat n acest capitol, o parte a programelor de comand i control sunt rezidente n RAM alctuind nucleul sistemului de operare (Kernel) ncrcat 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 main; - spaiul de memorie; - canalele de comunicaie ctre diverse taskuri executate de utilizator la un moment dat. 6.4.1. Structur i funcii Nucleul sistemului de operare este alctuit din urmtoarele componente: - programul supervizor central; - rutine de serviciu pentru o serie de activiti cum ar fi de exemplu, scrierea n memorie, gestiunea ceasului sistem, etc. n mod normal, utilizatorul folosete comenzile Shell care dirijeaz execuia programelor dorite sub supervizorul Kernel, acesta fiind astfel invizibil utilizatorului. Pentru utilizator, sistemul de operare UNIX apare ca fiind alctuit din: - un set de programe, fiecare corespunznd unei anumite comenzi; - Shell-ul care dirijeaz comenzile i coordoneaz execuia programelor utilizatorului. Practic ns, sistemul de operare UNIX este compus din : - un set de programe de servicii care execut funciile legate de sarcinile hardware i software; - Kernel-ul care coordoneaz execuia programelor de servicii, specificate sub forma unor comenzi adresate ctre Shell. Programele de servicii sunt apelate atunci cnd sunt necesare (zona de tranziente), n timp ce supervizorul este rezident n RAM, constituind mediul software de baz pentru orice evenimente din sistem. Principalele funcii ndeplinite de nucleul sistemului de operare: - planificarea, coordonarea i gestionarea execuiei proceselor; - furnizarea de servicii de sistem cum sunt: tratarea operaiilor de intrare/ieire i gestiunea fiierelor; - manipularea operaiilor dependente de hardware, ntreruperile i funciile de sistem; - gestiunea memoriei. Nucleul UNIX este alctuit din aproximativ 10000 de linii ce constituie codul programului care, n funcie de sistem, se transform ntr-un numr mai mare sau mai mic de cuvinte main (sau bytes); dintre acestea, 5 - 10% din totalul codului programelor (Shell, utilitare, KERNEL i celelalte) este variabil funcie de sistemul de calcul i de setul de utilitare (fig. 6.8.). Aa cum rezult din fig. 6.8, o mare parte din aceste programe este destinat gestiunii memoriei i gestiunii proceselor, aceast parte evideniind: - coninutul stivei; - coninutul registrelor sistemului; - detalii de mediu, cnd procesele sunt introduse n memorie i rspund la ntreruperile procesorului. Aceast parte conine 7 - 8000 linii codul programelor scrise n limbajul C (deci portabil pe orice sistem de calcul). Includerea acestei pri n nucleu se justific prin necesitatea unui

Sisteme operaionale rspuns foarte rapid.


Programe utilizator Limbaj de asamblare Limbajul C

Biblioteci Interfaa cu funciile de sistem (apeluri)

Sistem de gestiune a fiierelor (SGF) Sistem de gestiune a proceselor

Gestiunea tampoanelor cache

Module de control periferice Bloc Caracter Module de control hardware

Gestiunea memoriei

Programe utilizator

Fig. 6.8. Structur Kernel Alt parte a Kernel-ului conine driverele dispozitivelor periferice de intrare/ieire constituite din programe ce realizeaz: - controlul adreselor de citire/scriere, adresarea registrelor de date ale perifericelor de intrare/ieire; - manipularea ntreruperilor generate de aceste dispozitive; - efectuarea recuperrii erorilor. Conine aproximativ 1000 linii codul programelor scrise tot n limbajul C, dar acest numr este variabil n funcie de numrul perifericelor de intrare/ieire. Primitivele de sistem sunt specifice fiecrui sistem de calcul (scrise n limbaj de asamblareaproximativ 1000 linii codul programului), ele coninnd: - operaii de intrare/ieire de baz; - comutarea execuiei ntre procese; - permiterea sau inhibarea ntreruperilor hardware; - resetarea prioritilor ntreruperilor; - alte operaii. Accesarea primitivelor de sistem se realizeaz prin apeluri (directive) de sistem (system calls) din programe n C sau n limbaj de asamblare. 6.4.2. Procese i stri Un sistem de calcul poate s lucreze la un moment dat n dou moduri:

Capitolul 6 Sistemul de operare UNIX - utilizator, cnd execut un program sau proces; - sistem (Kernel), cnd execut un cod sistem. Comutarea ntre modul utilizator i KERNEL se realizeaz prin urmtoarele mecanisme: - ceasul- care ntrerupe orice alt program cu frecvena de 60 Hz, rutina de ceas permind reevaluarea prioritilor proceselor i implicit schimbarea procesului; n absena altor ntreruperi, ceasul realizeaz divizarea timpului, ceea ce permite ca sistemul s fie mprit ntre mai muli utilizatori; - apeluri de sistem prin care utilizatorul solicit diverse servicii oferite de sistemul de operare; cele care realizeaz operaii de intrare/ieire conducnd la suspendarea procesului apelator pe durata transmiterii datelor; - cereri de serviciu ale perifericelor de intrare/ieire. Procesul este conceput fundamental de organizare a sistemului de operare UNIX. n esena, un proces reprezint un program n execuie. Pentru un program activ, pot exista mai multe procese active- numite instane: - din punct de vedere al procesului, operaiile nucleului sunt prioritare; - din punct de vedere al nucleului, procesele sunt structuri de date catalogate. Informaiile necesare procesului sunt memorate n: a) tabela proceselor constituit n memorie, ce conine o intrare pentru fiecare proces detaliind starea acestuia: - localizarea procesului; - adresa de memorie i adresa de evacuare; - mrimea procesului; - numrul de identificare; - identificatorul utilizat; b) tabela utilizator, care este ataat fiecrui proces activ la rutinele nucleului lui (fig.6.9). Crearea unui proces implic astfel iniializarea unei intrri n tabela procesului, care iniializeaz o tabel a utilizatorului crend totodat textul real i datele pentru proces.

Proces activ

Zona de date a procesului Spaiul de adres al Kernel-ului

Zona de date i instruciuni a utilizatorului Spaiul de adres al utilizatorului

Sisteme operaionale Fig. 6.9. Iniializarea tabelei utilizator Schimbarea strii unui proces (se execut, ateapt, este evacuat, este ncrcat, primete un semnal) este o activitate ce se focalizeaz pe tabela procesului (fig. 6.10.):
RUN mod utilizator apel sistem ntrerupere Execuie ntreinere RUN mod utilizator

peemptiv planificare proces

READY preemptiv

EXIT

WAIT

READY

RAM suficient swap in

swap out Memorie intern RAM Memorie extern ca suport de evacuare (swapping) WAIT suspendat

CREAT

fork

READY suspendat

RAM insuficient

Fig. 6.10. Tranziia strilor unui proces - terminarea unui proces implic eliberarea intrrii sale n tabela proceselor, putnd fi folosit pentru alte procese; - cnd procesul este activ, au loc alte evenimente, de exemplu ateptarea terminrii unei operaii de intrare/ieire; - pe durata suspendrii 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) conine n acel moment: - numele de identificare al utilizatorului i al grupului din care face parte, pentru stabilirea drepturilor de acces; - pointerii din tabela de fiiere existente n sistem, pentru toate fiierele deschise; - un pointer ctre inod-ul directorului curent n tabela de inod-uri; - o list a rspunsurilor pentru diverse semnale. Informaia curent despre un proces se schimb prin execuia directivei chdir cnd este schimbat valoarea pointerului ctre inod-ul directorului curent. 6.4.3. Coordonarea i gestiunea proceselor ntr-un sistem de operare multiutilizator, se pot executa mai multe programe simultan. Existnd o singur CPU, n realitate un singur program se execut efectiv la un moment dat, iar celelalte se vor executa atunci cnd CPU le va acorda cuante de timp. n timpul execuiei unui program, celelalte programe sunt rezidente n RAM, cu condiia ca nici unui s nu solicite toat memoria. De aici decurg 2 sarcini ale nucleului: - planificarea proceselor - mprirea de cuante de timp ntre procese; - gestiunea memoriei - atribuirea de zone de memorie liber la procese i eventuala evacuare

Capitolul 6 Sistemul de operare UNIX sau ncrcare a unui proces n/din disc. Planificarea proceselor Iniierea unui proces poate fi efectuat numai de ctre un alt proces activ. Cnd este conectat primul utilizator, Kernel-ul asigur o copie a Shell-ului ce se ruleaz doar pentru el, ivindu-se existena unei alte structuri ierarhice de procese create printr-un mecanism numit bifurcaie (fork) prin care Kernel nlocuiete un proces existent, prin dou procese: - procesul iniial (printe); - procesul iniiat de procesul iniial (fiu), care mparte (partajeaz) toate fiierele cu procesul printe. Dup bifurcaie, ambele procese se execut independent; excepie: cnd se solicit explicit ca procesul printe s atepte terminarea procesului fiu prin directiva WAIT; n continuare, procesul fiu poate genera la rul lui, o nou bifurcaie (fig.6.11.).
fork 0 shell fork 0 shell

fork 1 proces 1 fork 2

proces 1

proces 2

proces 3

Fig. 6.11. Mecanismul fork De remarcat ca proces3 are acces la toate fiierele deschise de procesele anterioare, n timp ce invers nu se permite accesul. Prin urmare, fiierele sunt accesibile de pe nivelurile situate la periferia ierarhiei. Cnd Shell iniiaz un proces, bifurcaia este aranjat astfel nct Shell s atepte terminarea procesului (procesul este executat n foreground). Dac nu ateapt, nseamn c Shell a dat natere altor procese mai puin prioritare (procese executate n background) adugnd dup comanda corespunztoare semnul &. Alocarea memoriei Fiind un sistem de operare multitasking, UNIX ine evidena taskurilor concurente i menine controlul diverselor programe care sunt rezidente n RAM la un moment dat, furniznd i informaii privind suficiena spaiului de memorie: - n mod normal, fiecare program este ncrca n diverse zone de memorie RAM; - n modul de operare cu divizarea timpului (time-sharing), poate opera fr evacuarea coninutului memoriei pe disc; fiecare program se execut n cuanta de timp alocat rmnnd n memorie numai programele a cror execuie nu s-a ncheiat (practic, numai registrele sistemului sunt divizate ntre programe, astfel c evacuarea programelor implic de fapt, numai evacuarea coninutului registrelor); - pe durata execuiei proceselor, UNIX aloc poriuni distincte de RAM pentru: * segmentul de cod (instruciunile programului) protejat la scriere; * segmentul de date ce conine toate datele definite de utilizator: valori, variabile, etc.; * segmentul de stiv care conine toate informaiile de sistem necesare meninerii intacte a unui proces, atunci cnd este evacuat din RAM pe disc sau cnd este ncrcat n RAM de pe disc. Aceast divizare este realizat din dou motive: - evacuarea segmentului de cod implic reducerea cantitii de informaii necesar a fi evacuate;

Sisteme operaionale fiind de tip read-only, acesta este identic cu imaginea sa din disc, deci nu trebuie rescris cnd se evacueaz; - Shell este ncrcat pentru fiecare utilizator, deci exist attea copii Shell, ci utilizatori sunt conectai; dac mai muli utilizatori solicit un program (segment de cod), nu este necesar copierea acestuia deoarece el poate fi folosit simultan; este suficient s se creeze i cnd este necesar, s se evacueze un segment de date i un segment de stiv pentru fiecare utilizator. Divizarea timpului i resurselor n sisteme de operare multitasking, procesele individuale nu sunt executate pn la terminare, avnd alocate cuante de timp de ctre procesor ntr-o planificare de tip Round- Robin; cuantele de timp nu sunt egale, lungimea depinznd de prioritatea taskului, de accesibilitatea datelor de intrare solicitate i a perifericelor de ieire. Alocarea se face avnd n vedere maximizarea utilizrii resurselor hardware, cu respectarea prioritii taskurilor critice. Prioritile sunt periodic rennoite astfel: - taskurile cu timp de execuie mai mare, vor avea prioritate mai sczut; - taskurile de tip ntrebare-rspuns vor avea rspuns instantaneu; - taskurile ce const n schimbarea de caractere au cea mai sczut prioritate. Dup expirarea timpului alocat, taskul este evacuat ntr-un fiier de evacuare pe disc unde va rmnea pn i se d din nou controlul; n acel moment, imaginea salvat anterior se rencarc n RAM; ea va cuprinde: - coninutul prii de memorie inscriptibil; - coninutul registrelor; - numele directorului curent; - lista fiierelor deschise de procesul considerat. n acest sens, sunt utile prezentarea apelurilor de sistem: i=fork() care permite crearea unui nou proces fiu, avnd active procesele printe i fiu. Practic, se introduce un nou proces n tabela de procese a sistemului UNIX, dar nu se lanseaz n execuie nici un program. Se creaz astfel o bifurcaie n care procesul fiu este realizat ca o copie a procesului printe, nefiind necesar evacuarea programului din memorie ci doar copierea zonelor de date. j=execl(nume,arg1,arg2,...,argn,o) solicit execuia unui alt program; nume,arg1,arg2,...,argn sunt pointeri ctre iruri de caractere care specific numele programului i numele argumentelor sale; o - pointer ctre o zon de pointeri, fiecare din ei punctnd cte un ir din mediu. Prin acest apel, nucleul va determina ce program original s fie nlocuit cu alt program. Secvena fork-execl creaz o copie a procesului printe, apoi nlocuiete procesul fiu cu programul care dorete s-l execute (procesul fiu nu este alterat de execl). k=wait(status) determin procesul printe s atepte terminarea execuiei procesului fiu; status este pointer la o valoare ntreag, iar k - valoarea returnat ca numr de identificare al procesului fiu terminat. O aplicaie frecvent a lui execl se ntlnete la nlnuirea programelor; de exemplu, o compilare n mai muli pai implic ncrcarea programului i datelor pentru execuie la primul pas; n continuare, se procedeaz asemntor i la al doilea pas; o dat ce primul pas a fost executat complet, nu exist nici un motiv de a se ntoarce la el, deci a se suprascrie memoria ocupat la prima trecere cu programul i zona de date. nlnuirea ne este totdeauna practic pentru secvene n care pri din program solicitate sunt dependente de date; astfel, procesul printe creaz un proces fiu (prin fork) cu cerere de ateptare (wait); procesul fiu va exista ca proces evacuabil i va avea acces la acelai spaiu de memorie ca i procesul printe; prin execl, procesul fiu poate executa urmtorul program, putnd

Capitolul 6 Sistemul de operare UNIX el nsui s fie rescris; deci, cnd procesul fiu modificat i suprascris va fi ncheiat, controlul va reveni procesului printe. Deoarece numrul de procese concurente nu este limitat, aceast schem permite execuia unui mare numr de programe cu condiia s fie posibil a se divide n programe i date astfel nct fiecare execuie s ncap n RAM. 6.4.4. Sincronizarea proceselor Sincronizarea proceselor poate fi sub controlul sistemului de operare prin intermediul conductelor de comunicaie (pipe) sau al utilizatorului, prin intermediul evenimentelor care reprezint modul de determinare al momentului n care un proces devine gata pentru execuie (READY). La un moment dat un proces se afl n execuie; blocarea procesului se poate realiza prin funcia sleep, moment n care nucleul trece toate procesele care ndeplinesc condiii stabilite, n starea gata de execuie; dintre acestea, numai un singur proces se va lansa n execuie, celelalte fiind trecute din nou n starea de blocare. Mecanismele de sincronizare prin intermediul evenimentelor privesc sincronizarea prin intermediul semnalelor sau al semafoarelor, respectiv al directivelor de sistem. Sincronizarea prin intermediul semnalelor Aa cum s-a menionat anterior, la ndeplinirea condiiilor prestabilite pentru lansarea n execuie, nucleul trece procesele n starea gata de execuie prin intermediul funciei wakeup. O alt modalitate de sesizare a unor evenimente aprute n sistem o constituie plasarea unor bii de atenie (lock-bit) n tabela de procese, nucleul efectund verificarea activrii bitului corespunztor care se asimileaz cu emiterea unui semnal la trecerea din modul sistem n modul utilizator nainte, respectiv dup blocarea fiecrui proces. La apariia unui semnal se pot ivi urmtoarele aciuni ce se execut n continuare: - terminarea procesului, cnd se afieaz de regul, i imaginea procesului n memorie n fiierul core; - aciuni specifice care sunt desemnate prin funcia: signal(nr_semnal,nr_rutin_tratare_semnal) De remarcat c dup tratarea semnalului, se revine la valorile standard ale aciunilor ce se vor executa ulterior. Un caz particular l constituie utilizarea funciei de sistem wait, care permite blocarea unui proces pn la terminarea unuia dintre fiii acestuia sau pn la recepionarea unui semnal: p=wait(&stare) unde p reprezint valoarea returnat a funciei (identificatorul de proces al fiului): -1 dac s-a recepionat un semnal, o eroare sau s-a terminat deja execuia fiilor procesului; -numrul de identificare al fiului a crui execuie s-a terminat; stare adresa unde se specific modul de terminare al execuiei iniiate de fiu. Pentru sincronizarea procesului cu un anumit fiu se poate folosi: while(wait(&stare)!=pid) care reia ciclic testarea terminrii execuiei aciunii fiului cu identificatorul pid, ceea ce evident implic blocarea procesului apelant (tatl). Sincronizarea prin semafoare Particularitatea sincronizrii prin intermediul semafoarelor const n aceea c se pot executa operaii pe o mulime de semafoare print-un singur apel de funcie. Structurile de date asociate semafoarelor sunt constituite din: - identificatorul mulimii de semafoare; - descrierea mulimii de semafoare care include: * utilizatorii care au acces la mulimea de semafoare; * numrul de semafoare al mulimii;

Sisteme operaionale * momentul ultimei accesri i al ultimei actualizri al mulimii semafoarelor; - descrierea semaforului care cuprinde: * valoarea semaforului; * identificatorul ultimului proces care a accesat semaforul; * numrul proceselor care ateapt ca valoarea semaforului s devin mai mare dect valoarea sa curent; * numrul proceselor care ateapt ca valoarea semaforului s devin zero. Algoritmul de execuie al unei operaii pe semafoare se desfoar astfel: a) dac semaforul operaiei este mai mare ca zero, atunci acesta se va aduna la valoarea semaforului; b) dac semaforul operaiei este zero atunci: - dac valoarea semaforului este zero, funcia se termin imediat; - dac valoarea semaforului este zero i indicatorii de condiie (flags) arat NOWAIT, funcia se termin imediat; n caz contrar: * se incrementeaz numrul de procese care ateapt ca valoarea semaforului s fie zero; * se suspend procesul curent pn cnd valoarea semaforului devine zero (prin decrementarea numrului de procese ce ateapt ca valoarea semaforului s fie zero) sau se primete un semnal prin care se efectueaz aceeai decrementare i se reia procesul. c) dac semaforul operaiei este mai mic dect zero i: - dac valoarea semaforului este mai mare sau egal cu modulul semaforului operaiei, atunci din valoarea semaforului se va scdea valoarea absolut a semaforului; - dac valoarea semaforului este mai mic dect modulul semaforului operaiei i indicatorii de condiie specific NOWAIT, funcia se va termina imediat; n caz contrar: * se incrementeaz numrul proceselor care ateapt ca valoarea semaforului s devin mai mare ca valoarea sa curent, suspendndu-se procesul curent pn cnd valoarea semaforului devine mai mare sau egal cu valoarea absolut a semaforului operaiei (cnd numrul de procese ce ateapt ca valoarea s devin mai mare ca valoarea curent se decrementeaz, iar din valoarea semaforului se va scdea valoarea absolut a semaforului operaiei sau se primete un semnal (cnd numrul de procese care ateapt ca valoarea semaforului s devin mai mare dect valoarea curent se decrementeaz, iar procesul suspendat se reia). Sincronizarea prin directive de sistem Sincronizarea se poate realiza i printr-o serie de funcii disponibile utilizatorului cum sunt: kill(identificator_proces,numr_semnal); care realizeaz trimiterea unui semnal pentru un proces; pause(); realizeaz blocarea procesului curent pn la primirea unui semnal; allarm (numr_secunde); trimite un anumit semnal (ntrerupere de ceas) dup intervalul de timp specificat n numr de secunde. 6.4.5. Comunicaia ntre procese La sistemele de operare UNIX este necesar realizarea unor modaliti practice de comunicaie ntre procese; mecanismele actuale permit alternativele prezentate n continuare. Comunicaia prin fiiere Comunicaia prin intermediul fiierelor ofer avantajul simplitii de realizare i o modalitate direct prin care se poate efectua comunicarea. Dezavantajul const n aceea c este sarcina programatorului s controleze accesul concurent, prin testarea ciclic a momentului eliberrii zonei critice. Exemplu while ((f=creat("fiier",0111))<0) sleep(2); < zona critic >

Capitolul 6 Sistemul de operare UNIX unlink("fiier"); prin care primul proces care reuete s creeze fiierul, va trece la execuia instruciunilor din regiunea critic; pn ce nu va executa funcia unlink, orice alt apel al funciei de creare a unui fiier (creat), va bloca procesul prin apelul funciei sleep. Comunicaia prin fiiere de tip pipe Fiierele de tip pipe sunt fiiere obinuite la care ns operaiile de citire/scriere se realizeaz ntr-o ordine prestabilit FIFO (First Input First Output); aceste fiiere sunt tranzitorii, datele citite ntr-o manier stricta a ordinii n care au fost scrise respectnd regula de sincronizare productor/consumator (o dat citit dintr-un fiier nu mai poate fi reluat, iar memorarea se face ca la orice fiier utiliznd ns numai blocuri adresate direct). La UNIX exist dou tipuri de fiiere pipe, fiecare genernd anumite particulariti ale modului n care se realizeaz comunicaia: 1) fiiere fr nume care se creaz cu directiva pipe(p) unde p reprezint descriptorul de fiier astfel: p[0] pentru citire p[1] pentru scriere. De remarcat c n blocurile alocate fiierelor (de regul numai primele 10 blocuri de disc) alocarea se realizeaz conform algoritmului Round-Robin. Scrierea mrete dimensiunea fiierului iar citirea o micoreaz; dac un proces ncearc s scrie un articol ce depete capacitatea fiierului, nucleul execut transferul pn la umplerea acestuia, apoi blocheaz procesul; cnd se citete din acest fiier se poate scrie din nou, dar s-ar putea s existe mai multe procese care ateptau scrierea n fiier ducnd la apariia competiiei. Comunicaia prin fiier pipe fr nume se poate realiza numai ntre un proces i fiii si, deoarece fiierul pipe nu se identific dect prin descriptorul su i intrrile n tabela cu fiiere deschise n zona de procese ale utilizatorului, aceasta fiind motenit de ctre fiii si; astfel, zonele de date ale proceselor nu pot fi partajate n mod normal. 2) Fiierele pipe cu nume ofer cteva faciliti comparativ cu fiierele pipe fr nume: - se creaz ntr-un director ca orice fiier obinuit prin directiva mknod cu tipul fiierului 010000; - la deschiderea sa prin directiva open, se poate specifica blocarea procesului ce ncearc s deschid pentru citire un fiier pipe nedeschis anterior pentru scriere; - se va terge explicit prin directiva unlink; - datorit unui nume de identificare este permis accesarea lui de ctre orice procese independente. Comunicarea prin zone de memorie comune Zonele de memorie comune permit proceselor s utilizeze n comun, o zon de memorie prin transferul unei zone din spaiul virtual al proceselor; accesul este controlat integral de programator. O zon de memorie comun este definit prin: - identificator; - segment de memorie; - o structur de date ce include: * numrul de identificare al utilizatorului care a creat zona, al utilizatorului curent i al grupului; * dimensiunea segmentului; * identificatorul procesului care a accesat zona de memorie; * numrul de procese care partajeaz aceast zon; * alte informaii. Comunicarea prin cozi de mesaje Principiul de comunicaie prin intermediul cozilor de mesaje const n comunicarea prin intermediul unei cozi circulare de mesaje gestionat de nucleul sistemului de operare. Transmiterea se realizeaz cu sincronizare, deci procesele ce solicit primiri de mesaje se

Sisteme operaionale vor bloca pn ce recepioneaz mesajul solicitat, iar cele ce doresc s emit, se vor bloca dac nu exist nici un proces care s recepioneze iar coada de mesaje este plin. Mesajele ce se transmit sunt caracterizate printr-un tip (reprezentat printr-un numr la alegere), iar recepia se poate face prin specificarea tipului. 6.4.6. Gestiunea fiierelor speciale Toate operaiile de intrare/ieire sunt privite ca operaii cu fiiere, Shell nerecunoscnd existena unitilor periferice, deci Kernel ascunde unitile fizice reale sub forma unor fiiere aparente. Fiecare unitate fizic este nzestrat cu un program special (driver) care translateaz aciunile solicitate de unitile virtuale astfel nct utilizatorul poate comunica cu orice unitate ataat sistemului fr nici o deosebire, dac aceasta dispune de driverul corespunztor. Deoarece aceste fiiere sunt deosebite de fiierele utilizator, ele sunt referite ca fiiere speciale de tip caracter sau bloc, fiind recunoscute dou tipuri de uniti periferice (disc i terminal) a cror inod-uri conin: - numrul major- indic tipul dispozitivului; - numrul minor- indic numrul unitii. Fiierele disc sunt organizate fizic n blocuri de 512 bytes, fiecare fiier avnd alocat un numr ntreg de blocuri. Blocurile nu trebuie s fie neaprat contigue pe disc, spre deosebite de alte sisteme ce impun acest lucru. Atribuirile standard pentru fiiere implicit sunt: 0 fiier standard de intrare - tastatur; 1 fiier standard de ieire - ecranul terminalului; 2 ecranul de intrare al terminalului, ce servete gestionrii mesajelor de eroare i a informaiilor de diagnostic. Identificarea fiierelor se realizeaz prin: - intrrile din directori care identific fiierele printr-un numr de index asociat fiecrui fiier; numrul de index pentru orice volum fizic, este punctator ntr-o alt tabel rezident pe volum (index-list); - intrrile n lista de indeci ale fiecrui volum, conin un numr de intrri numite inod-uri, motiv pentru care lista de indeci se mai numete tabel de inod-uri; - un inod conine o serie de informaii cu privire la fiecare fiier: * numrul de identificare al user care a creat fiierul; * starea de protecie a fiierului (ReadOnly,Open,etc); * 13 cuvinte ce arat blocurile unitii ocupate de fiier; * dimensiunea fiierului; * data la care a avut loc ultima modificare; * de cte ori a fost referit n directori; * biii de identificare a directorilor, fiierelor speciale i a fiierelor mari.
I - list Director Nume Numr fiier index Tabela fiierelor inod } 64 bytes

64 bytes

Fig. 6.12. Identificarea unui fiier pe disc Corespondena nume fiier-index este disponibil prin comanda ls-i i se numete legtur (link), aceasta servind drept mijloc de identificare i gestiune a fiierului; alte comenzi ce afecteaz legturile: mv - mut legtura;

Capitolul 6 Sistemul de operare UNIX ln - creaz o legtur; rm - terge o legtur; Cnd se lucreaz cu un fiier n program, n RAM exist o alt structur ce aparine nucleului (File Table) unde se copiaz un inod din i-LIST, dar zona alocat n memorie va avea 64 B ai inod-ului plus o zon ce conine informaii necesare n timpul lucrului (pointeri de citire/scriere, contor pentru procesele ce folosesc fiierul, etc.). Ca i n MS-DOS, fiierele se identific n program printr-un FD (File Descriptor). Fiecare proces are o zon de informaii n care se pstreaz toate FD - urile pentru fiierele deschise n timpul lucrului i o zon de cod a procesului neaparinnd nucleului ci n UOF (User's Open File). Accesul la sistemul de fiiere se face la trei nivele: 1) prin utilitare - nivelul 1; 2) prin funcii de bibliotec <stdio.h> - nivelul 2 care apeleaz 3); 3) prin apeluri de sistem - nivelul 3: open, close, read, write prin care se gestioneaz fiierele la cel mai sczut nivel. Pentru reducerea numrului operaiilor de intrare/ieire la periferice ce lucreaz la nivel de bloc, nucleul organizeaz n memoria intern o zon de tampone cache (structuri de date software) diferite de memoria cache. Tampoanele cache sunt organizate n dou liste dublu nlnuite (unele putnd face parte din ambele); lista tampoanelor n uz este organizat conform unei funcii de dispersie (hashing) ce ine seama de numrul logic al dispozitivului periferic i numrul blocului al crui coninut se ncarc n zona de date ataat tamponului. Funciile sunt apelate de nivelul inferior al sistemului de gestiune al fiierelor (SGF).

Sisteme operaionale

EXERCIII 1. Care sunt principalele aspecte ce justific oportunitatea sistemului de operare UNIX ? 2. S se efectueze o comparaie ntre MS-DOS i UNIX la nivelul caracteristicilor generale. 3. S se identifice principalele componente ale sistemelor de operare MS-DOS i UNIX prin analogie. 4. Ce tipuri de fiiere recunoate UNIX spre deosebire de MS-DOS ? 5. Care sunt componentele nucleului la UNIX ? Se regsesc acestea i la MS-DOS ? Motivai rspunsul. 6. Identificai strile unui proces la UNIX i a modului prin care un proces trece dintr-o stare n alta. 7. Cum se execut planificarea proceselor la UNIX ? 8. Specificai mecanismele de sincronizare a proceselor la UNIX; n ce const fiecare dintre acestea ? 9. Prin ce modaliti practice se asigur comunicaia dintre procese la UNIX ? 10. n ce const gestiunea fiierelor speciale la UNIX ?

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