You are on page 1of 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 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.

6.1. CARACTERISTICI ŞI COMPONENTE MAJORE 6.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. 6.1.).

Sisteme operaţionale
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 influenţe descendenţi direcţi

OSF /1 1992

System V.4

–1988

Fig. 6.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

Capitolul 6 – Sistemul de operare UNIX (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ă. 6.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.6.2.).
Software de aplicaţii Aplicaţie Aplicaţie … utilizator utilizator Proc. tab SGBD Proc. texte CAD/CAM GAMES

Software de aplicaţii Compilatoare Linkeditoare Sistem de operare NUCLEU (KERNEL) Interpreter comenzi Utilitare

Nivel fizic

Hardware Dispozitive fizice

Microprograme - microcod

Limbaj maşină

Fig. 6.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. 6.3.).
Software de aplicaţie Utilizator Interpretor de comenzi Utilitare Nucleu Nucleu

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

* Open Look al cărei producător a fost firmele AT&T şi SUN.Sisteme operaţionale Interpretorul de comenzi Shell Programe aplicative Utilitare Utilizator Dispozitive periferice de intrare/ieşire Programe gestiune operaţii de intrare/ieşire Fig. a intrărilor / ieşirilor şi a timpului. UNIX-ul a încorporat ca principale interfeţe grafice: * X/Windows al firmei MIT. bsh a fost prima variantă a interpreterelor de comenzi. * C Shell (csh) elaborat de firma Sun Microsystem. aplicative şi de gestiune a operaţiilor de intrare/ieşire. * nivelul intermediar. care poate fi accesat de către utilizator prin intermediul utilitarelor.4.interpreterul de comenzi. interpreterul are o sintaxă a comenzilor similară cu cea a limbajului C. * nivelul inferior. . Interfeţele disponibile utilizatorului sunt organizate pe trei niveluri: * nivelul exterior nucleului. Prin urmare. 6. * DEC Windows a firmei DEC. 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. * Korn Shell (ksh) ce se constituie ca o îmbinare a variantelor anterioare. Sistemul de fişiere cuprinde programe utilitare. reprezintă mecanismul prin care sistemul de operare realizează interfaţa între utilizator şi sistemul de calcul.5. 6. accesat prin funcţii din biblioteca limbajului C. există o ierarhizare a straturilor ce se interpun între utilizator şi nucleul sistemului de operare redată în fig. a memoriei. 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. Shell . folosită şi de SCO în versiunile Open DeskTop (ODT). 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.

6.suport pentru conectare la reţea: * protocolul TCP/IP. . 6.3 Sun OS SCO Linux DEC OSF/1 AIX HP-UX Solaris Irix Fig. C. 6. . .3 şi Sun OS 4. Straturile interpuse între utilizator şi nucleul sistemului de operare UNIX 6. .3.1.Xenix V a lui Microsoft.5.linia Berkeley BSD 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. BSD OSF/1 System V. .4 System V. .interfeţele grafice cuprind principalele funcţiile din interfeţele X/Windows şi Open Look. * gestiunea fişierelor distribuite (NFS). * interfaţă pentru comunicarea între procese.Shell-urile: Bourne. 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.linia Xenix . Korn.0. 6.Capitolul 6 – Sistemul de operare UNIX Kernel Drivere periferice Comenzi şi utilitare Shell Ferestre şi interfeţe grafice Utilizator Fig.

. .poate rula simultan şi aplicaţii DOS care au acces la fişierele din reţeaua Sun Os. Îmbunătăţirile noii versiuni au condus la următoarele constatări: . . sistemul de operare are ca principale noutăţi.nucleul are circa 200 funcţii sistem.Shell Bourne şi C.ONC Distributed Computing Platform -colecţie de protocoale de intercomunicare şi servicii distribuite.Open Server Release 3.interfaţă binară de aplicaţii (ABI). inclusiv propriul server Web şi browser.Sun Os 5. .poate accesa partiţii DOS multiple mai mari de 32 Mb.interfaţa grafică OpenLook. .Sisteme operaţionale . SUN OS Sistemul de operare Unix SUN OS este destinat pentru staţiile de lucru SUN. . este bazat pe Unix System V Release 3.2.creşterea cu 350 % a performanţelor pentru Web.UX Hewlett Packard Unix este versiunea Unix System V care încorporează o serie de caracteristici ale OSF/1: . protocol TCP/IP şi NFS.creşterea cu cca 35 % a performanţelor pentru baze de date. a fost proiectat având la bază UNIX V Release 3 şi BSD 4.3. un set de bază pentru servicii de reţea. . .este emulată interfaţa grafică Windows. Începând cu versiunea Solaris 2. HP .0 bazat pe Unix System V Release 4.4. Cuprinde: .HP .dispune de un instrument grafic de poştă electronică. . biblioteci cu rutine pentru programe de aplicaţie (rutine matematice şi aplicaţii reţea).sistemul de vizualizare OpenWindows V 3. DEC .UX 10 este un Unix System V.suport pentru operare fără disc pe reţea (Diskless Operation).ODT .set de instrumente pentru activitatea de desktop. inclusiv pentru SUN 386.UX 9 poate fi asimilat cu Unix System V.3. cuprinde următoarele componente semnificative: .0. .interfaţă grafică utilizator SunView. cu interfaţă grafică X-DeskTop.Open DeskTop. . dispunând suplimentar de câteva extensii.sistemul de fişiere al reţelei (NFS).Deskset V3. . . SCO Santa Cruz Corporation dispune de două variante: .OSF/1 DEC .UX HP . elemente mai semnificative care-l caracterizează: . .2 şi 4. SOLARIS Sistemul de operare UNIX varianta Solaris al firmei SUN.cel mai rapid mediu Java.6.HP . .suportă MS-DOS.OSF/1 Digital Equipment Corporation este versiunea OSF/1 a firmei DEC implementată pe DEC ALPHA STATION 600. . Sistemul de operare UNIX varianta SCO Open DeskTop 2. .suport pentru fişiere mari. .

utilizat. Şirul este divizat în linii de text terminate cu caracterul "new line" (CR). ce lucrează direct cu dispozitivele periferice de intrare/ieşire.1.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). care a oferit software gratuit. .sistemul de operare de reţea locală Netware. sau pe disc prin aşa zisele fişiere pipe (named pipe). 6.1) şi compatibile. format. Este o soluţie acceptabilăpentru conectarea la Internet şi poate fi utilizat ca X terminal în siteurile Unix. -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: . Linux include esenţialul variantei BSD. (două puncte) identifică numele directorului părinte ân care fişierul cu un anumit index . fiind destinat utilizării individuale de către profesionişti Unix.fişiere speciale Fişiere speciale se constituie ca o interfaţă între programele utilizator şi rutinele nucleului sistemului de operare.2. activarea unui astfel de fişier coincizând cu activarea driverului dispozitivului periferic asociat. 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. rezultată dintr-o colaborare UNIX şi Novell. utilizatorul va trata perifericele de intrare/ieşire ca fişiere. Sistemul de fişiere UNIX SYSTEM V Fişierele reprezintă din punct de vedere logic. Tipuri de fişiere Sistemul de operare UNIX System V lucrează cu următoarele tipuri de fişiere: . * fişiere speciale de tip pipe sunt fişiere ce constituie canale de comunicaţie între 2 procese. av având la bază Unix System V.2.. .4.2. Componente esenţiale: . comunicaţia între două procese se poate realiza în memorie prin fişiere pipe obişnuite. numit Home directory (2 bytes). LINUX Linux este sistemul de operare Unix pentru procesoarele Intel. 6.1. Restricţiile de lungime. Astfel. unitatea elementară de memorare pe suportul magnetic. 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.versiunea AIX 3. UNIX WARE Unix Ware este o variantă având la bază versiunea UNIX System V Release 4.interfeţe grafice utilizator disponibile sunt: Openlook şi OSF/Motif.1. . este disponibil pe calculatoare IBM PS/2 (modelul Power PC.nucleul din Unix System V Release 4.Capitolul 6 – Sistemul de operare UNIX IRIX IRIX include majoritatea caracteristicilor de la BSD.x şi AIX 4. respectiv pe mainframe având implementate microprocesoare RISC-6000 versiunea AIX 4.3. * fişiere speciale de tip bloc sunt fişierele care transferă un bloc printr-o operaţie de intrare/ieşire. La rândul lor. (un singur punct) identifică numele directorului propriu.

Prin comanda $cd se revine în directorul utilizatorului atribuit la începutul sesiunii de lucru de către administratorul de sistem (Home directory). pornind din directorul rădăcină /root. dimensiune. la UNIX nu apare la prompter calea curentă. pornind de la directorul curent.spre baza arborelui. data ultimei modificări. fiecare intrare va fi precedată de unul din următoarele caractere având semnificaţia: d subdirector.absolut. -a solicită specificarea tuturor intrărilor în director. administratorul de sistem creează câte un director propriu ce poate conţine subdirectori sau fişiere obişnuite. Aceste fişiere nu se pot citi/scrie direct de utilizator.c fişiere speciale de tip bloc (b) sau caracter (c). proprietar. 6. . Spre deosebire de MS-DOS. Identificarea în cadrul structurii arborescente se realizează prin numele fişierului precedat de calea în care se află. opţiunile vor fi precedate de caracterul "-". implicit este listat conţinutul din directorul curent. . operaţiile efectuându-se prin directive de sistem. Restricţia de parcurgere este ca un director să nu fie legat la nivelul superior decât printr-o singură legătură.2. -i numărul de inod. . protecţie.Sisteme operaţionale (inod) apare ca subdirector (14 bytes).2. opţiuni prin intermediul opţiunilor se pot solicita informaţii suplimentare cu privire la conţinutul directorului respectiv. nume.fişier obişnuit. ceea ce presupune specificarea completă a căii. . . prin specificarea subdirectorului dorit. 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 Operaţia este validată numai dacă directorul este vid şi utilizatorul are acest drept la calea respectivă. Schimbarea directorului curent se realizează prin intermediul comenzii: $cd cale unde cale poate fi specificată: . 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). directorul curent. Pentru fiecare utilizator.. -t afişarea conţinutului sortat după timpul ultimei modificări. 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. dintre opţiunile mai semnificative: -l oferă informaţii de detaliu ce privesc: tipul fişierului. specificarea căii se poate realiza în două moduri: .relativ. determinarea căii curente se face prin comanda: $pwd (print work directory) care va afişa calea completă. b. directorul părinte. .spre extremităţile arborelui.

discuri.dreptul de citire read (r).. Protecţia fişierelor şi drepturi de acces Sistemul de operare UNIX dispune de 3 drepturi de acces la fişiere: . . imprimantă.4.dreptul de execuţie execute (x)..grupul de utilizatori (g).Capitolul 6 – Sistemul de operare UNIX 6. comenzi de iniţializare. directorul curent . / bin utilitare în formă executabilă: compilatoare. / 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. / spool -at timpul la care se prelucrează. / user_1 / .dreptul de scriere write (w). Vizualizarea drepturilor de acces se realizează prin operaţia de listare a conţinutului directorului. / etc programe pentru administrarea sistemului: fişiere cu parole. . -lpd director imprimantă. . etc. ¦ ai utilizatorilor / user_n 6. / tmp fişiere temporare mai puţin utilizate.2. ¦ / . / lib fişiere de bibliotecă utilizate mai rar...2. / man directori de fişiere text conţinând manualul complet de utilizare.. 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 .. instrumente pentru dezvoltarea programelor. terminale.proprietarul (u).3. / bin utilitare nefolosite frecvent.. / tmp spaţiu temporar de manevră folosit de programele de sistem. ¦ structuri de directori / . / lib biblioteci pentru limbaje de programare şi utilitare.ceilalţi utilizatori (o). / u director în care se creează Home directory pentru fiecare utilizator. despărţirea în silabe. recunoaşte următoarele categorii de utilizatori: . /root / unix nucleul sistemului de operare. / dict lista de cuvinte. De asemenea.std. / usr alte programe necesare utilizatorilor. asambloare. direcţionând sistemul către /aixps2/unix. 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. . De aici decurg cele 3x3 posibiliţăţi pentru precizarea completă a drepturilor de acces. / local partiţia activă (de aici se face bootarea).

.. se preia uid-ul/gid-ul proprietarului fişierului respectiv. (7) numărul de caractere din fişier. = permisiune absolută. fis_n unde nume_nou_proprietar devine noul proprietar al fişierelor fis_1 fis_2 ..x radu devine noul proprietar al fişierelor fis1. Cuvântul care păstrează fişierele şi drepturile de acces are următorul format: 15 13 12 10 9 7 6 5 4 3 0 xwr o xwr xwr sticky sgid suid tip fişier g u Fişierele executabile preiau la execuţie uid-u//gid-ul celui care le lansează. de către administratorul sistemului-superuser) cu comanda: $chmod {cine} {permis}{drept_acces} fis_1 fis_2 . (8) data ultimei modificări.neautorizarea accesului. 6..Sisteme operaţionale drwxrwxr-x 9 ase infocib 212 Ian 12 10:22 .x şi fis2.. . fis_n specificate. (6) numele proprietarului şi grupului. o others (alţi utilizatori). (2) drepturile de acces ale proprietarului (u). este utilizat pentru fişiere de comenzi sau comenzi apelate frecvent (TSR)..în zona de evacuare (swapping). se asociază atât un identificator de proprietar (uid) cât şi un identificator de grup (gid). Schimbarea drepturilor de acces la un fişier se poate realiza numai de către proprietarul acestuia (eventual.5. 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 .. ambele atribuite de către administratorul de sistem. fis_n.2.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.. Modificarea drepturilor de acces La crearea unui fişier.. (9) numele directorilor şi fişierelor existente în directorul curent. Schimbarea grupului care deţine anumite fişiere se realizează cu ajutorul comenzii: $chgrp nume_nou_grup fis_1 fis_2 . (3) drepturile de acces ale membrilor grupului (g). fis_n unde cine poate fi: u user login (proprietarul). (4) drepturile de acces ale altor utilizatori (o). a all (toţi utilizatorii). Schimbarea proprietarului (owner-ului) anumitor fişiere se face prin intermediul comenzii: $chown nume_nou_proprietar fis_1 fis_2 .. g group (grupul). Exemplu Prin comanda: $chown radu fis1. (5) numărul de directori în care apar fişierele (numărul de legături). directorul părinte drwxrwxr-x 1 ase stud1 43 Mar 11 15:50 fisier1 -r-wxr-x--. permis stăbileşte accesul sau neautorizarea acestuia prin: + permisiune.x fis2.. 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. dacă biţii sunt setaţi pe 1. fis_n prin care nume_nou_grup devine deţinătorul fişierelor fis_1 fis_2 . .

execuţie pentru alţi utilizatori 5(4+0+1). având următoarea structură: . 2 drept de scriere pentru alţi utilizatori. aceştia având posibilitatea să-şi modifice propria parolă cu comanda: $passwd parola care va solicita introducerea noii parole de două ori.numele interpreterului de comenzi (shell). Utilizatorii au acces la comenzile generale situate de regulă în căile /bin şi /usr/bin. Orice utilizator are acces la fişierul /etc/passwd. scriere. fis_n fişierele asupra cărora se aplică modificarea.numele de conectare (login). 40 drept de citire pentru grup. .X parola invizibilă. /etc/shadow şi /etc/group. fis_1 fis_2 . 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. execuţie pentru grup 50 (40+0+10). . . Exemplu Comanda: $chmod 755 prof modifică drepturile de acces pentru permisiune la citire. Informaţiile despre utilizatori şi grupurile de utilizatori sunt cuprinse în fişierele /etc/passwd.. nu are acces decât numai utilizatorul cu drept deplin la root (administratorul sistemului). 100 drept de execuţie pentru proprietar. 2) Comanda: $chmod u-w prog nu permite proprietarului fişierului prog să facă modificări în conţinutul acestuia.directorul atribuit la conectare (home directory). . .numărul de identificare al grupului gid (group identification).. 10 drept de execuţie pentru grup. .numărul de identificare al utilizatorului uid (user identification). în timp ce la fişierul ce conţine parolele (/etc/shadow). 20 drept de scriere pentru grup.numele proprietarului (name owner). Fişierul /etc/passwd conţine câte o linie pentru fiecare utilizator. scriere(w) sau execuţie (x). 1 drept de execuţie pentru alţi utilizatori.Capitolul 6 – Sistemul de operare UNIX drept_acces sunt drepturile de citire (r). citire. execuţie proprietar 700 (400+200+100). 200 drept de scriere pentru proprietar. şi citire. . 3) Prin comanda: $chmod o-r mail nu se permite altor utilizatori (o) să citească (r) fişierul mail. Exemple: 1) Comanda: $chmod a+rx prog permite tuturor utilizatorilor (a) să citească (r) şi să execute (x) fişierul prog. 4 drept de citire pentru alţi utilizatori.

operaţia se numeşte montare. . Accesul programului la un fişier va fi determinat de uid-ul şi gid-ul efective astfel: .dacă suid a fost setat. montarea semnifică în acest caz accesul la dispozitivul periferic. În momentul montării celelalte fişiere devin transparente pentru sistem până la realizarea comenzii inverse (demontare). nume_director este numele directorului ce va fi substituit de directorul rădăcină al volumului. Exemplu Prin comanda: $chmod u+s fis se stabilesc drepturile proprietarului asupra fişierului fis. volum ce conţine programul de încărcare a sistemului de operare. simpla montare fizică nefiind suficientă. 2.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. Sistemul de fişiere poate fi utilizat doar dacă este încorporat în structura de fişiere accesibilă la pornirea sistemului.2. Comenzile specifice vor fi menţionate cu scopul cunoaşterii manierei de abordare a dispozitivelor periferice de către sistemul de operare UNIX. Pentru un fişier. efectul comenzii este: -rws-x proprietar grup fis deci. dar gid-ul acestuia coincide cu gid-ul fişierului. pot fi poziţionate (setate) două drepturi speciale de acces: suid (set uid) şi sgid (set gid) care. subdirector. la fişierele executabile au atribuite implicit drepturile pe care le are utilizatorul atunci când le lansează: . toate trebuie să se găsească într-un volum unic denumit root. Un sistem de fişiere poate fi înregistrat pe diferite volume logice materializate pe variate suporturi fizice. -r protejat la scriere. dar pentru a opera sub sistemul UNIX. 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. dar numai pe durata execuţiei programului.uid-ul real din /etc/passwd. acesta trebuie să fie creat în prealabil ca director vid). programul are aceleaşi drepturi de acces ca şi grupul asociat fişierului. /etc este directorul în care se află comanda mount. atunci programul care accesează un fişier va avea uid-ul efectiv cu cel al proprietarului. 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. sub forma unor fişiere speciale ce trebuie constituite ca o structură arborescentă de root. dar ele nu pot fi executate decât dacă sunt date de către superuser (comenzi privilegiate). 6.gid-ul real din /etc/passwd.Sisteme operaţionale La execuţia oricărui program. când acesta este accesat.gid-ul efectiv al programului. la un director al sistemului de fişiere accesibile. 3. 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. acestuia i se atribuie patru identificatori: 1.uid-ul efectiv al programului.6. programul va avea aceleaşi drepturi de acces la fişier ca şi ceilalţi utilizatori. 4. orice membru al grupului poate accesa fişierul specificat prin fis. Demontarea unui volum se realizează cu comanda: . operaţia se poate realiza prin legarea sistemului de fişiere respectiv. director.dacă uid-urile şi gid-urile efective ale programului şi fişierului sunt diferite.

creând o structură de director pentru volumul ce se va indica prin numele asociat (nume_fis_special).fişier special de tip caracter (c). respectiv numărul acestuia (nr_minor) ambele specificate în octal. 6. şi cu 2000 sectoare. 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.fişier special de tip bloc (b). . 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. în directorul /radu protejat la scriere.7. . 2) Comanda: $/etc/mount -r /dev/rz4c /radu montează un disc optic prin intermediul interfeţei de disc SCSI. / user 1 / fd 1 .. dimensiunea fişierului (dimensiune_fis) se specifică prin numărul de blocuri ocupate de fişier. / dev / bin / ctc . Fig..Capitolul 6 – Sistemul de operare UNIX $/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. nr_major.. .6. iar prin: $/etc/mount /dev/fd1 /user se montează sistemul de fişiere UNIX de pe floppy-disk-ul din unitatea 1. cu un singur director.7.). 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: . / user / bin / tmp . numerele depinzând esenţial de sistemul de operare UNIX. /etc directorul în care se găseşte comanda mkfs. . nr_minor reprezintă tipul dispozitivului (nr_major).. /dev directorul în care se află numele fişierului special. în directorul /user/ al sistemului de fişiere de pe discul principal (fig.

câmpurile neautorizate la scriere pentru tablourile ce conţin blocuri şi inod-uri libere. tipul dispozitivului fiind 3 (nr_major) iar numărul dispozitivului este 4 (nr_minor).proprietarul fişierului. . .poziţia pe disc a datelor din fişier (adresa). Iniţializarea unui disc se efectuează prin comanda: $diskformat /dev/tipdisc [-size s] [-dens d] [-il i] unde s numărul de bytes/sector. d densitate de înregistrare. Un fişier are asociat un singur inod.2. Fiecare inod are asociat un număr de ordine i-number care desemnează în mod unic numele interne . iar nucleul actualizează permanent superblocul.7.dimensiunea sistemului de fişiere împreună cu numărul de blocuri libere.Sisteme operaţionale Exemplu Comanda: $/etc/mknod /dev/tty4 c 3 4 crează fişierul asociat terminalului tty4 de tip caracter (c) în calea /dev. pentru a asigura corespondenţa reală cu sistemul de fişiere (există un flag care este setat la fiecare modificare a superblocului). acesta reprezintă o intrare în lista de indecşi a unui volum. fiecare dintre acestea fiind în relaţie cu acelaşi inod. Relaţiile dintre nume şi inod se numesc legături. numărul de inod-uri libere. . . care conţine: . factor de întreţesere 3. . Superblocul conţine informaţii generale despre sistemul de fişiere: . tabloul ce conţine blocurile libere. Implementarea sistemului de fişiere UNIX pe disc Orice volum de disc este iniţializat ca un sistem de fişiere. Zona de inod-uri conţine câte un inod pentru fiecare fişier de pe disc (eticheta de fişier).dimensiunea zonei de inod-uri.momentul ultimei accesări a fişierului sau ultima modificare a fişierului sau inod-ului. . indexul următorului bloc liber din tablou. Reprezentarea internă a unui fişier este specificată prin inod-ul asociat. Superblocul este copiat în memoria internă. Bloc n: Zona de evacuare temporară (swapping). dar poate avea mai multe nume. 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). 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 . f factorul de întreţesere. Pentru a converti un fişier pe un floppy disk se utilizează comanda: $tar nume_fişier /dev/fd1 135 ds 120 nume_nou_fişier 6. tabloul ce conţine inod-urile libere. cu 128 bytes pe sector. indexul următorului inod liber din tablou. Exemplu: Comanda: $diskformat /dev/fd0 -dens 1 -size 128 il 3 formatează floppy-disk-ul fd0 simplă densitate.

Capitolul 6 – Sistemul de operare UNIX ale fişierelor..alocarea se face dinamic. în numărul de ordine asociat. -a afişează şi numărul de blocuri conţinute în fişiere. Blocurile de date conţin informaţia utilă a fişierelor organizate în blocuri: . ..numărul de identificare proprietar şi grup. inodul specificat prin număr (i_number). Comenzile de afişare a informaţiilor de pe disc: $du [-ar][f1 f2 . a drepturilor de acces sau a numărului de legături. se afişează numai directori. implicit. maniera de testare şi reparare este interactivă. implicit. Modificarea inod-ului însă.numărul de fişiere. . astfel.data ultimei accesări.numărul de blocuri utilizate. Prin comanda: $fsck [-sX][-D][nume_fis_special] el poate testa şi repara sistemul de fişiere specificat prin nume_fis_special. -r afişează mesaje de eroare pentru directorii care nu pot fi citiţi. 12 bloc de dublă indirectare. . 11 bloc de simplă adresare indirectă. nu implică neapărat şi o modificare a conţinutului fişierului.fiecare bloc are mărimea de 512 sau 1024 bytes.fn. Ş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).numărul de legături la fişier. a ultimei modificări şi data creării.. atunci se va afişa: .lista blocurilor fizice ale fişierului compusă din 13 intrări: 10 constituie adresele primelor 10 blocuri de date. iar directorii conţin tocmai tabela de traducere a numelui extern al fişierului.fn] afişează numărul de blocuri conţinute în fiecare fişier f1 f2 . se afişează directorul curent. . atunci când acestea sunt temporar eliminate din memoria internă. -D realizează verificarea directorilor în vederea depistării eventualelor blocuri defecte. Testarea constă în verificarea consistenţă între valorile parametrilor memoraţi în tabelele Superblocului şi Zona de inod-uri. Dacă nu sunt depistate erori. pe baza listei blocurilor libere din superbloc. 13 blocul de tripla indirectare. Exemplu Prin comanda: $clri /dev/fd0 5 se va şterge inod-ul 5 din sistemul de fişiere asociat floppy-disk-ului fd0. . .tipul fişierului şi atributele de acces. indicând numărul directorilor care au referinţe la acest fişier. Conţinutul unui inod este modificat în momentul schimbării proprietarului. adăugându-i-se şi alte informaţii. -s ignoră lista de blocuri libere existentă şi reconstituie o nouă listă. Zona de evacuare temporară (swapping) conţine imaginile proceselor utilizator. inod-ul este copiat în memoria internă de către nucleu. La deschiderea fişierului. .. . Structura zonei de inod-uri cuprinde: . modificarea conţinutului unui fişier implicând automat modificarea inod-ului asociat.numărul de blocuri libere. prin rescrierea Superblocului sistemului.

/usr/bin unde acestea se regăsesc ca fişiere normale. . sunt programe executabile pe care Shell le caută în ordinea: directorul curent. /bin.opţiuni urmate imediat după comandă şi precedate de . 6. 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: . -sl serviciu lung.monitorul. .care programe să le execute. deci toate comunicaţiile dintre utilizator şi Kernel sunt conduse prin Shell. Linia de comandă are forma: $comandă argumente unde argumente pot fi: .reia ciclic secvenţa. le decodifică şi comunică dorinţele acestuia la Kernel. Interpretorul de comenzi shell Dintre principalele componente ale sistemului de operare UNIX. .nume de fişiere. $df [nume_fis_special] afişează numărul de blocuri şi inod-urile libere pentru sistemul de fişiere specificat prin nume_fis_special.3. .3. care informează utilizatorul că aşteaptă comenzi ce se vor introduce de la tastatură. Comenzi Shell După conectarea utilizatorului la o sesiune de lucru.ce să facă cu ieşirea. o poziţie privilegiată o au componentele Kernel şi Shell. Comenzile practic. . ca fişier standard de ieşire având asociat numărul 1 (stdout). Shell primeşte comenzile de la utilizator. 6. . fără imprimare.alte servicii utilizator.comunicarea dorinţelor utilizatorului către Kernel. ca fişier de intrare standard având atribuit descriptorul asociat 0 (stdin).decodifică linia de comandă (caută programul). . până la introducerea CTRL/D pe care o interpretează ca "sfârşit transmisie de la tastatură". se afişează pentru toate sistemele de fişiere montate.anunţă Kernell să deconecteze utilizatorul. eventual calea în care se găsesc. Fişiere standard. De exemplu: $comp -s nf1 nf2 compară f1 cu f2 şi suprimă imprimarea (care este implicită).anunţă Kernell să execute programul şi aşteaptă (sau nu) terminarea execuţiei. Redirectare şi extensii Shell deschide implicit trei fişiere standard: . În continuare interpreterul de comenzi Shell execută următoarele activităţi: .(specifice fiecărei comenzi). 6. .Sisteme operaţionale Exemplu $du -a /usr/radu afişează directorii inclusiv fişierele conţinute cu numărul de blocuri ocupate din directorul /usr/radu.tastatura. . Se puteau folosi şi alte opţiuni ca: -l indică forma lungă a unui serviciu efectuat de comandă. .1.primeşte răspunsul Kernell şi afişează răspunsul şi prompterul $. implicit.cine să le execute.3. .2. este invocat automat Shell-ul (prin apariţia prompter-ului $).

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

pentru care utilizator. 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).4. De exemplu $who¦sort¦lpr reprezintă o linie de conducte (pipeline) unde: who va produce la ieşire toţi utilizatorii conectaţi. Conducte şi linii de conducte Shell permite comunicarea între procese prin conducte (pipes). 6. sort sortează alfabetic. Observaţie: pot fi lansate în execuţie mai multe procese background. comenzile 1 şi 2 executându-se concomitent. aşteptând ieşirile pentru intrări. Această comandă implică două copii Shell: una la pornirea sistemului. se utilizează în acest scop caracterul "¦".3. iar cealaltă la solicitarea execuţiei procedurii (prima procedură Shell preia intrări de la tastatură. lpr scrie la imprimantă prin spooler. 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).Sisteme operaţionale se foloseşte caracterul & astfel: $comanda1 & 31 $comanda2 la care Kernel arată numărul de identificare al procesului (pid-process identification). 6.5. prin ce comandă şi cât timp au fost executate. Kernell startează execuţia ambelor procese ca şi cum ar fi procese background. fără a aştepta terminarea execuţiei comandă1 Shell furnizează prompterul $ pentru a introduce altă comandă. comanda2 se va încheia de către utilizator când va termina editarea. Comanda $ps (process status) arată ce procese au fost lansate în execuţie. fără crearea unor fişiere intermediare. etc. Dacă prima comandă este un task în execuţie iar comanda2 este un program interactiv (de exemplu. editorul vi).3. cele 2 procese executându-se sincronizat. de exemplu 31. . De exemplu $who¦lpr ieşirea la imprimantă (prin spooler-ul imprimantei -lpr) a utilizatorilor conectaţi. implicit se consideră fişierul standard de intrare (tastatura). 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. Conductele sunt canale de date ce conduc ieşirea unui program către intrarea altui program. care sunt în execuţie. 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. . iar a doua procedură preia intrările din fişierul nf). echivalează cu secvenţa: $who > fis $lpr < fis $rm fis Atunci când se specifică o conductă (două sau mai multe procese).

.. Structura alternativă case: case variabilă in varianta 1)grup_comenzi_1... Structura repetitivă while: while grup_condiţii do grup_comenzi done unde done este terminator while. . varianta 2)grup_comenzi_2. 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. Un fişier de comenzi indirecte este o procedură Shell constituită ca un fişier text.6. a caracterului "$". valoaren] do grup_comenzi done unde variabilă ia valori din lista specificată prin valoare1 valoare2 . dacă valoare1 valoare2 . esac Structura repetitivă for: for variabilă [in valoare1 valoare2 .. Utilizarea Shell-ului ca limbaj de programare permite execuţia condiţionată a unor comenzi. Avantajul utilizării unui astfel de fişier constă în execuţia unui set complex de comenzi prin . . valoaren lipsesc. Structura repetitivă until: until grup_condiţii do grup_comenzi done 6. . done este terminator de buclă..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.... variabilă va lua pe rând valorile specificate în procedură ca parametrii. valoaren. 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). ce se realizează prin testarea indicatorilor de stare poziţionaţi după execuţia unei comenzi în funcţie de care (True. varianta n)grup_comenzi_n. De exemplu: $ruta=/usr/user1 $cd $ruta unde $ruta este o variabilă ce substituie calea /usr/user1.3. False) se execută o acţiune. care conţine comenzi similare ce pot fi introduse interactiv.

$HOME= referă catalogul alocat utilizatorului (home directory). . Într-o linie de comandă construcţiile prefixate cu $. se pot introduce şi alte şiruri de caractere în mediu. . .$0 este numele Shell-ului sau fişierului de comenzi indirecte.$1. .$# numărul de parametri poziţionali ai unei proceduri Shell.$! identificatorul ultimului proces lansat în background.$LOGNAME= numele utilizatorului în sistem.$$ identificator de proces al Shell. Puterea limbajului de comandă constă în posibilitatea de a utiliza diferite programe -tratate ca instrucţiuni. Mediul curent ce aparţine interpreterului de comenzi se afişează cu comanda: $env (environment-echipament) ce conţine următoarele valori mai semnificative: . având următoarea semnificaţie: .rezultatul oricărei comenzi setează variabila de mediu $? prin: 0 .execuţie normală. ca procese curente în curs de execuţie. Un program lansat în execuţie primeşte anumite şiruri de caractere ce formează mediul asociat.pwd).$MAIL= numele fişierului ce conţine mesajele primite de utilizator prin e-mail. Observaţii: . $2. . .eroare de execuţie.$? codul de stare al ultimei comenzi executate.$SHELL= interpreterul de comenzi utilizat. $9 sunt parametrii transmişi procedurilor Shell pe linia de comandă. . deoarece cd a schimbat . împreună cu mecanismele de interconectare puse la dispoziţie de către Shell.cuvintele precedate de $ sunt înlocuite cu valoarea variabilei respective (substituirea variabilelor) incluzându-le şi pe cele încadrate de ` `(substituirea comenzilor).$TERM= tipul terminalului. .$PATH= defineşte lista directorilor ce sunt parcurşi de Shell în căutarea fişierelor executabile corespunzător comenzii introduse.. .$PS1= defineşte prompter1 asociat interpreterului (implicit este caracterul "$"). interpreterul Shell conţine şi anumite variabile predefinite.. Este posibil a se solicita execuţia unei liste de comenzi ca un proces separat prin: (listă_comenzi) De exemplu: $pwd. executabil).pwd prin care efectul comenzii cd este anulat de întâlnirea parantezei închise.$PS2= stabileşte al doilea prompter de continuare a unei comenzi (implicit este caracterul ">"). . prin Shell. . obiect. . =0 . Exemplu $PS1="$LOGNAME@`hostname`>" va avea ca efect afişarea prompter-ului: userlogin@hostname> $PS1="`pwd`>" va seta prompter-ul la afişarea căii curente asemănător cu MS-DOS. .(cd /usr/user1.Sisteme operaţionale simpla introducere a numelui fişierului care se comportă ca orice fişier executabil. fără a avea cele trei forme (sursă. . sunt înlocuite cu valorile variabilelor de mediu sau variabile Shell. .

. Dacă se doreşte execuţia listei de comenzi în cadrul unui proces curent. g)x=gamma.pwd prin careefectul comenzii cd se păstrează şi după terminarea listei de comenzi cuprinse între acolade. Prin: nume () {listă_comenzi} se poate defini o funcţie Shell compusă dintr-o listă de comenzi inclusă între acolade. unscript posibil ar putea fi: $dir (){ >if [ $1 ==] then >echo "Apel incorect" >return 1 >else >(cd $1. . atunci se va specifica acest lucru prin: {listă_comenzi} Exemplu: $pwd. b)x=beta. $2.pwd) >ls -al $1 >return 0 >fi >} care se va utiliza prin: $dir /usr/user1 2) Secvenţa următoare încearcă să lanseze în execuţie prog1.{cd /usr/user1. apelul funcţiei în acest caz se face prin nume [parametru] când parametrii poziţionali $1.. se va afişa mesajul "Nu exista fisierul prog1. beta dacă parametrul conţine b.x" if [-x $HOME/prog1. $9 sunt iniţializaţi cu valorile parametrilor actuali din linia de comandă.pwd)..x else echo "Nu exista fisierul prog1. prin substituiri efectuate înaintea execuţiei.x.x] then $HOME/prog1. . esac echo $x va afişa ce se va afla în parametrul specificat prin execuţia procedurii ($0 procedura. dacă nu-l găseşte.Capitolul 6 – Sistemul de operare UNIX calea numai pentru subprocesul lansat pentru executarea acelei liste de comenzi.. *)x=$1.. 3) Secvenţa: case $1 in a)x=alfa.. . Exemple 1) Pentru afişarea conţinutului unui director al cărui nume este transmis ca parametru. $1 primul parametru): alfa dacă parametrul conţine a.x" fi [-x] afişează comenzile şi argumentele rezultatelor execuţiei.

a preluat o serie de caracteristici ale csh.] citeşte o linie de la fişierul standard de intrare. .grad înalt de portabilitate. 5) Copierea a 3 fişiere specificate în apelul procedurii se poate realiza pe baza secvenţei: for i in 1 2 3 do cp fis$1 /tmp done 6) Afişarea parametrilor poziţionali: 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 whoăgrep $1 /dev/null then echo "$1 este prezent" exit else sleep 120 fi done Se va executa bucla al cărei 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 fişierelor 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.. . KornShell (ksh) derivat din sh. [Nn] *) echo "Ati raspuns cu Nu". esac read a1 [a2.Sisteme operaţionale gamma dacă parametrul conţine g. precum şi posibilitatea de a defini şi utiliza pseudonime pentru facilitarea introducerii unor comenzi mai complexe. a2 pe al doilea. capacitatea de a memora şi reutiliza ultimele comenzi introduse... De exemplu comanda: %alias lista ' ls -aFx \!*' introduce pseudonimul lista în locul comenzii ls -aFx. conţinut $1 dacă parametrul nu conţine a..utilizează pseudonimelor din csh. 4) O secvenţă pentru anumită opţiune: $echo "introduceti Da sau Nu ?:\c" read raspuns rest case raspuns in [Dd] *) echo "Ati raspuns cu Da". pseudonim ce poate fi utilizat ulterior ca o comandă.. ultimul argument primind restul liniei (rest). *) echo "Nu ati raspuns nici Da nici Nu".editarea liniilor de comandă similar cu editarea textelor la vi sau emacs. O altă facilitate importantă o constituie posibilitatea trecerii unui proces din foreground la background prin utilizarea comenzilor fg (foreground) respectiv bg (background). extinzând sfera de cuprindere şi la subprograme constituite din funcţii Shell. b sau g. printre facilităţi se pot menţiona: . a1 primind valoarea primului cuvânt din linia de comandă. .

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

Programe utilizator Limbaj de asamblare Limbajul C Biblioteci Interfaţa cu funcţiile de sistem (apeluri) Sistem de gestiune a fişierelor (SGF) Sistem de gestiune a proceselor Gestiunea tampoanelor cache Module de control periferice Bloc Caracter Module de control hardware Gestiunea memoriei Programe utilizator Fig. adresarea registrelor de date ale perifericelor de intrare/ieşire. Procese şi stări Un sistem de calcul poate să lucreze la un moment dat în două moduri: . .comutarea execuţiei între procese. .alte operaţii. .controlul adreselor de citire/scriere.manipularea întreruperilor generate de aceste dispozitive.efectuarea recuperării erorilor.operaţii de intrare/ieşire de bază.8. . Accesarea primitivelor de sistem se realizează prin apeluri (directive) de sistem (system calls) din programe în C sau în limbaj de asamblare. Primitivele de sistem sunt specifice fiecărui sistem de calcul (scrise în limbaj de asamblareaproximativ 1000 linii codul programului).resetarea priorităţilor întreruperilor.2. Conţine aproximativ 1000 linii codul programelor scrise tot în limbajul C.Sisteme operaţionale răspuns foarte rapid. .permiterea sau inhibarea întreruperilor hardware.4. 6. dar acest număr este variabil în funcţie de numărul perifericelor de intrare/ieşire. . Structură Kernel Altă parte a Kernel-ului conţine driverele dispozitivelor periferice de intrare/ieşire constituite din programe ce realizează: . ele conţinând: . 6.

b) tabela utilizator. rutina de ceas permiţând reevaluarea priorităţilor proceselor şi implicit schimbarea procesului. Crearea unui proces implică astfel iniţializarea unei intrări în tabela procesului. În esenţa.cereri de serviciu ale perifericelor de intrare/ieşire. ceea ce permite ca sistemul să fie împărţit între mai mulţi utilizatori. procesele sunt structuri de date catalogate.ceasul. când execută un program sau proces. . Comutarea între modul utilizator şi KERNEL se realizează prin următoarele mecanisme: .identificatorul utilizat. .6. un proces reprezintă un program în execuţie.din punct de vedere al nucleului. cele care realizează operaţii de intrare/ieşire conducând la suspendarea procesului apelator pe durata transmiterii datelor. ceasul realizează divizarea timpului. Procesul este conceput fundamental de organizare a sistemului de operare UNIX.numite instanţe: . .mărimea procesului. pot exista mai multe procese active. în absenţa altor întreruperi. când execută un cod sistem. operaţiile nucleului sunt prioritare. Pentru un program activ. . Informaţiile necesare procesului sunt memorate în: a) tabela proceselor constituită în memorie.localizarea procesului.numărul de identificare.Capitolul 6 – Sistemul de operare UNIX .sistem (Kernel).9).care întrerupe orice alt program cu frecvenţa de 60 Hz. ce conţine o intrare pentru fiecare proces detaliind starea acestuia: . . .din punct de vedere al procesului. . care iniţializează o tabelă a utilizatorului creând totodată textul real şi datele pentru proces.utilizator.adresa de memorie şi adresa de evacuare. care este ataşată fiecărui proces activ la rutinele nucleului lui (fig. . Proces activ … Zona de date a procesului Spaţiul de adresă al Kernel-ului … Zona de date şi instrucţiuni a utilizatorului Spaţiul de adresă al utilizatorului .apeluri de sistem prin care utilizatorul solicită diverse servicii oferite de sistemul de operare.

când procesul este activ.împărţirea de cuante de timp între procese. 6. .10. tabela utilizator (structură a utlizatorului) conţine în acel moment: . au loc alte evenimente.terminarea unui proces implică eliberarea intrării sale în tabela proceselor.atribuirea de zone de memorie liberă la procese şi eventuala evacuare . . este evacuată şi tabela utilizator în cadrul imaginii procesului.10. aşteaptă. în realitate un singur program se execută efectiv la un moment dat. 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.dacă procesul este evacuat pe disc.4. se pot executa mai multe programe simultan. primeşte un semnal) este o activitate ce se focalizează pe tabela procesului (fig.gestiunea memoriei . Iniţializarea tabelei utilizator Schimbarea stării unui proces (se execută. De aici decurg 2 sarcini ale nucleului: .o listă a răspunsurilor pentru diverse semnale. pentru stabilirea drepturilor de acces. Existând o singură CPU. Coordonarea şi gestiunea proceselor Într-un sistem de operare multiutilizator.planificarea proceselor . este evacuat. celelalte programe sunt rezidente în RAM. . iar celelalte se vor executa atunci când CPU le va acorda cuante de timp. 6. 6.pointerii din tabela de fişiere existente în sistem. tabela utilizatorilor nu este accesată sau modificată.Sisteme operaţionale Fig. putând fi folosită pentru alte procese. În timpul execuţiei unui program. .3.): RUN – mod utilizator apel sistem întrerupere Execuţie întreţinere 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. . este încărcat. Tranziţia stărilor unui proces . cu condiţia ca nici unui să nu solicite toată memoria. pentru toate fişierele deschise.9. de exemplu aşteptarea terminării unei operaţii de intrare/ieţire.un pointer către inod-ul directorului curent în tabela de inod-uri. 6.numele de identificare al utilizatorului şi al grupului din care face parte. .pe durata suspendării unui proces. .

După bifurcaţie. Când Shell iniţiază un proces.procesul iniţiat de procesul iniţial (fiu). Prin urmare. Planificarea proceselor Iniţierea unui proces poate fi efectuată numai de către un alt proces activ.11. Această divizare este realizată din două motive: . UNIX alocă porţiuni distincte de RAM pentru: * segmentul de cod (instrucţiunile programului) protejat la scriere. Kernel-ul asigură o copie a Shell-ului ce se rulează doar pentru el. excepţie: când se solicită explicit ca procesul părinte să aştepte terminarea procesului fiu prin directiva WAIT. * segmentul de date ce conţine toate datele definite de utilizator: valori. o nouă bifurcaţie (fig.în modul de operare cu divizarea timpului (time-sharing). variabile. Alocarea memoriei Fiind un sistem de operare multitasking. în continuare. bifurcaţia este aranjată astfel încât Shell să aştepte terminarea procesului (procesul este executat în foreground).evacuarea segmentului de cod implică reducerea cantităţii de informaţii necesară a fi evacuate. .Capitolul 6 – Sistemul de operare UNIX sau încărcare a unui proces în/din disc. . care împarte (partajează) toate fişierele cu procesul părinte. Dacă nu aşteaptă. Mecanismul fork De remarcat ca proces3 are acces la toate fişierele deschise de procesele anterioare.procesul iniţial (părinte). fork 0 shell fork 0 shell fork 1 proces 1 fork 2 proces 1 proces 2 proces 3 Fig. UNIX ţine evidenţa taskurilor concurente şi menţine controlul diverselor programe care sunt rezidente în RAM la un moment dat. .în mod normal. etc.11. numai evacuarea conţinutului registrelor). atunci când este evacuat din RAM pe disc sau când este încărcat în RAM de pe disc. Când este conectat primul utilizator.6. numai registrele sistemului sunt divizate între programe.). astfel că evacuarea programelor implică de fapt. fiecare program se execută în cuanta de timp alocată rămânând în memorie numai programele a căror execuţie nu s-a încheiat (practic. ambele procese se execută independent. ivindu-se existenţa unei alte structuri ierarhice de procese create printr-un mecanism numit bifurcaţie (fork) prin care Kernel înlocuieşte un proces existent. furnizând şi informaţii privind suficienţa spaţiului de memorie: . 6. poate opera fără evacuarea conţinutului memoriei pe disc. .pe durata execuţiei proceselor. procesul fiu poate genera la râul lui.. înseamnă că Shell a dat naştere altor procese mai puţin prioritare (procese executate în background) adăugând după comanda corespunzătoare semnul &. fiecare program este încărca în diverse zone de memorie RAM. * segmentul de stivă care conţine toate informaţiile de sistem necesare menţinerii intacte a unui proces. fişierele sunt accesibile de pe nivelurile situate la periferia ierarhiei. în timp ce invers nu se permite accesul. prin două procese: .

arg2. .valoarea returnată ca număr de identificare al procesului fiu terminat. putând . . Practic. Alocarea se face având în vedere maximizarea utilizării resurselor hardware. nefiind necesară evacuarea programului din memorie ci doar copierea zonelor de date.taskurile de tip întrebare-răspuns vor avea răspuns instantaneu. ea va cuprinde: .. nu este necesară copierea acestuia deoarece el poate fi folosit simultan. j=execl(nume. Secvenţa fork-execl crează o copie a procesului părinte.argn. în continuare. procesele individuale nu sunt executate până la terminare. se introduce un nou proces în tabela de procese a sistemului UNIX. Se crează astfel o bifurcaţie în care procesul fiu este realizat ca o copie a procesului părinte. prin execl. de exemplu. k=wait(status) determină procesul părinte să aştepte terminarea execuţiei procesului fiu. Prin acest apel.. dar nu se lansează în execuţie nici un program. status este pointer la o valoare întreagă. în acel moment. apoi înlocuieşte procesul fiu cu programul care doreşte să-l execute (procesul fiu nu este alterat de execl). este suficient să se creeze şi când este necesar.lista fişierelor deschise de procesul considerat.o) solicită execuţia unui alt program. având active procesele părinte şi fiu. . Divizarea timpului şi resurselor În sisteme de operare multitasking. dacă mai mulţi utilizatori solicită un program (segment de cod). procesul fiu va exista ca proces evacuabil şi va avea acces la acelaşi spaţiu de memorie ca şi procesul părinte.. În acest sens. Înlănţuirea ne este totdeauna practică pentru secvenţe în care părţi din program solicitate sunt dependente de date.numele directorului curent.. de accesibilitatea datelor de intrare solicitate şi a perifericelor de ieşire.. se procedează asemănător şi la al doilea pas.argn sunt pointeri către şiruri de caractere care specifică numele programului şi numele argumentelor sale. procesul părinte crează un proces fiu (prin fork) cu cerere de aşteptare (wait).conţinutul registrelor. vor avea prioritate mai scăzută. procesul fiu poate executa următorul program. nume. nu există nici un motiv de a se întoarce la el. o compilare în mai mulţi paşi implică încărcarea programului şi datelor pentru execuţie la primul pas..Shell este încărcat pentru fiecare utilizator. cu respectarea priorităţii taskurilor critice. Priorităţile sunt periodic reînnoite astfel: .taskurile ce constă în schimbarea de caractere au cea mai scăzută prioritate. sunt utile prezentarea apelurilor de sistem: i=fork() care permite crearea unui nou proces fiu. astfel. să se evacueze un segment de date şi un segment de stivă pentru fiecare utilizator. având alocate cuante de timp de către procesor într-o planificare de tip Round..pointer către o zonă de pointeri.conţinutul părţii de memorie inscriptibilă. taskul este evacuat într-un fişier de evacuare pe disc unde va rămânea până i se dă din nou controlul. iar k . O aplicaţie frecventă a lui execl se întâlneşte la înlănţuirea programelor.arg1. . câţi utilizatori sunt conectaţi.arg2. o dată ce primul pas a fost executat complet. deci a se suprascrie memoria ocupată la prima trecere cu programul şi zona de date. fiecare din ei punctând câte un şir din mediu. . o .arg1.Robin.taskurile cu timp de execuţie mai mare.Sisteme operaţionale fiind de tip read-only. deci există atâtea copii Shell. După expirarea timpului alocat. cuantele de timp nu sunt egale. nucleul va determina ce program original să fie înlocuit cu alt program. imaginea salvată anterior se reîncarcă în RAM. lungimea depinzând de prioritatea taskului.. deci nu trebuie rescris când se evacuează. acesta este identic cu imaginea sa din disc. .

se revine la valorile standard ale acţiunilor ce se vor executa ulterior. dintre acestea. La apariţia unui semnal se pot ivi următoarele acţiuni ce se execută în continuare: .terminarea procesului. stare adresa unde se specifică modul de terminare al execuţiei iniţiate de fiu. respectiv după blocarea fiecărui proces. Pentru sincronizarea procesului cu un anumit fiu se poate folosi: while(wait(&stare)!=pid) care reia ciclic testarea terminării execuţiei acţiunii fiului cu identificatorul pid. O altă modalitate de sesizare a unor evenimente apărute în sistem o constituie plasarea unor biţi de atenţie (lock-bit) în tabela de procese. Deoarece numărul de procese concurente nu este limitat.4. Structurile de date asociate semafoarelor sunt constituite din: . această schemă permite execuţia unui mare număr de programe cu condiţia să fie posibil a se divide în programe şi date astfel încât fiecare execuţie să încapă în RAM. nucleul efectuând verificarea activării bitului corespunzător care se asimilează cu emiterea unui semnal la trecerea din modul sistem în modul utilizator înainte. şi imaginea procesului în memorie în fişierul core.descrierea mulţimii de semafoare care include: * utilizatorii care au acces la mulţimea de semafoare. Un caz particular îl constituie utilizarea funcţiei de sistem wait.Capitolul 6 – Sistemul de operare UNIX el însuşi să fie rescris. celelalte fiind trecute din nou în starea de blocare.4. blocarea procesului se poate realiza prin funcţia sleep. nucleul trece procesele în starea gata de execuţie prin intermediul funcţiei wakeup. Sincronizarea prin semafoare Particularitatea sincronizării prin intermediul semafoarelor constă în aceea că se pot executa operaţii pe o mulţime de semafoare print-un singur apel de funcţie. prin intermediul evenimentelor care reprezintă modul de determinare al momentului în care un proces devine gata pentru execuţie (READY). când procesul fiu modificat şi suprascris va fi încheiat. la îndeplinirea condiţiilor prestabilite pentru lansarea în execuţie. . .identificatorul mulţimii de semafoare. moment în care nucleul trece toate procesele care îndeplinesc condiţii stabilite. 6. ceea ce evident implică blocarea procesului apelant (tatăl).nr_rutină_tratare_semnal) De remarcat că după tratarea semnalului. respectiv al directivelor de sistem. controlul va reveni procesului părinte. . Sincronizarea proceselor Sincronizarea proceselor poate fi sub controlul sistemului de operare prin intermediul conductelor de comunicaţie (pipe) sau al utilizatorului. când se afişează de regulă. în starea gata de execuţie.acţiuni specifice care sunt desemnate prin funcţia: signal(nr_semnal. -numărul de identificare al fiului a cărui execuţie s-a terminat. numai un singur proces se va lansa în execuţie. La un moment dat un proces se află în execuţie. Sincronizarea prin intermediul semnalelor Aşa cum s-a menţionat anterior. deci. * numărul de semafoare al mulţimii. care permite blocarea unui proces până la terminarea unuia dintre fiii acestuia sau până la recepţionarea unui semnal: p=wait(&stare) unde p reprezintă valoarea returnată a funcţiei (identificatorul de proces al fiului): -1 dacă s-a recepţionat un semnal. o eroare sau s-a terminat deja execuţia fiilor procesului. Mecanismele de sincronizare prin intermediul evenimentelor privesc sincronizarea prin intermediul semnalelor sau al semafoarelor.

allarm (număr_secunde). pause(). în caz contrar: * se incrementează numărul proceselor care aşteaptă ca valoarea semaforului să devină mai mare ca valoarea sa curentă. Dezavantajul constă în aceea că este sarcina programatorului să controleze accesul concurent. 6. b) dacă semaforul operaţiei este zero atunci: . funcţia se termină imediat. * numărul proceselor care aşteaptă ca valoarea semaforului să devină zero. < zona critică > . funcţia se va termina imediat. realizează blocarea procesului curent până la primirea unui semnal. mecanismele actuale permit alternativele prezentate în continuare. Exemplu while ((f=creat("fişier". prin testarea ciclică a momentului eliberării zonei critice. în caz contrar: * se incrementează numărul de procese care aşteaptă ca valoarea semaforului să fie zero.Sisteme operaţionale * momentul ultimei accesări şi al ultimei actualizări al mulţimii semafoarelor. suspendându-se procesul curent până când valoarea semaforului devine mai mare sau egală cu valoarea absolută a semaforului operaţiei (când numărul de procese ce aşteaptă ca valoarea să devină mai mare ca valoarea curentă se decrementează. Algoritmul de execuţie al unei operaţii pe semafoare se desfăşoară astfel: a) dacă semaforul operaţiei este mai mare ca zero. atunci din valoarea semaforului se va scădea valoarea absolută a semaforului. trimite un anumit semnal (întrerupere de ceas) după intervalul de timp specificat în număr de secunde.dacă valoarea semaforului este mai mare sau egală cu modulul semaforului operaţiei. Comunicaţia prin fişiere Comunicaţia prin intermediul fişierelor oferă avantajul simplităţii de realizare şi o modalitate directă prin care se poate efectua comunicarea.5.4.dacă valoarea semaforului este zero.0111))<0) sleep(2). funcţia se termină imediat. * identificatorul ultimului proces care a accesat semaforul.dacă valoarea semaforului este mai mică decât modulul semaforului operaţiei şi indicatorii de condiţie specifică NOWAIT. .număr_semnal).dacă valoarea semaforului este zero şi indicatorii de condiţie (flags) arată NOWAIT. Comunicaţia între procese La sistemele de operare UNIX este necesară realizarea unor modalităţi practice de comunicaţie între procese. iar din valoarea semaforului se va scădea valoarea absolută a semaforului operaţiei sau se primeşte un semnal (când numărul de procese care aşteaptă ca valoarea semaforului să devină mai mare decât valoarea curentă se decrementează. c) dacă semaforul operaţiei este mai mic decât zero şi: . * numărul proceselor care aşteaptă ca valoarea semaforului să devină mai mare decât valoarea sa curentă. . * se suspendă procesul curent până când valoarea semaforului devine zero (prin decrementarea numărului de procese ce aşteaptă ca valoarea semaforului să fie zero) sau se primeşte un semnal prin care se efectuează aceeaşi decrementare şi se reia procesul.descrierea semaforului care cuprinde: * valoarea semaforului. Sincronizarea prin directive de sistem Sincronizarea se poate realiza şi printr-o serie de funcţii disponibile utilizatorului cum sunt: kill(identificator_proces. iar procesul suspendat se reia). atunci acesta se va aduna la valoarea semaforului. . care realizează trimiterea unui semnal pentru un proces.

o structură de date ce include: * numărul de identificare al utilizatorului care a creat zona. o zonă de memorie prin transferul unei zone din spaţiul virtual al proceselor. iar memorarea se face ca la orice fişier utilizând însă numai blocuri adresate direct).segment de memorie. orice alt apel al funcţiei de creare a unui fişier (creat). Comunicaţia prin fişier pipe fără nume se poate realiza numai între un proces şi fiii săi. va trece la execuţia instrucţiunilor din regiunea critică. . când se citeşte din acest fişier se poate scrie din nou. * identificatorul procesului care a accesat zona de memorie. . Scrierea măreşte dimensiunea fişierului iar citirea o micşorează.la deschiderea sa prin directiva open. * numărul de procese care partajează această zonă. al utilizatorului curent şi al grupului. apoi blochează procesul. aceasta fiind moştenită de către fiii săi. O zonă de memorie comună este definită prin: .datorită unui nume de identificare este permisă accesarea lui de către orice procese independente.Capitolul 6 – Sistemul de operare UNIX unlink("fişier"). astfel. dar s-ar putea să existe mai multe procese care aşteptau scrierea în fişier ducând la apariţia competiţiei. .identificator. Comunicarea prin cozi de mesaje Principiul de comunicaţie prin intermediul cozilor de mesaje constă în comunicarea prin intermediul unei cozi circulare de mesaje gestionată de nucleul sistemului de operare. * alte informaţii. De remarcat că în blocurile alocate fişierelor (de regulă numai primele 10 blocuri de disc) alocarea se realizează conform algoritmului Round-Robin. * dimensiunea segmentului. deoarece fişierul pipe nu se identifică decât prin descriptorul său şi intrările în tabela cu fişiere deschise în zona de procese ale utilizatorului. La UNIX există două tipuri de fişiere pipe. aceste fişiere sunt tranzitorii. Comunicaţia prin fişiere de tip pipe Fişierele de tip pipe sunt fişiere obişnuite la care însă operaţiile de citire/scriere se realizează într-o ordine prestabilită FIFO (First Input First Output). va bloca procesul prin apelul funcţiei sleep. Transmiterea se realizează cu sincronizare. nucleul execută transferul până la umplerea acestuia. se poate specifica blocarea procesului ce încearcă să deschidă pentru citire un fişier pipe nedeschis anterior pentru scriere. accesul este controlat integral de programator. dacă un proces încearcă să scrie un articol ce depăşeşte capacitatea fişierului. fiecare generând anumite particularităţi ale modului în care se realizează comunicaţia: 1) fişiere fără nume care se crează cu directiva pipe(p) unde p reprezintă descriptorul de fişier astfel: p[0] pentru citire p[1] pentru scriere. 2) Fişierele pipe cu nume oferă câteva facilităţi comparativ cu fişierele pipe fără nume: . . . Comunicarea prin zone de memorie comune Zonele de memorie comune permit proceselor să utilizeze în comun. datele citite într-o manieră stricta a ordinii în care au fost scrise respectând regula de sincronizare producător/consumator (o dată citită dintr-un fişier nu mai poate fi reluată.se va şterge explicit prin directiva unlink. prin care primul proces care reuşeşte să creeze fişierul. până ce nu va executa funcţia unlink.se crează într-un director ca orice fişier obişnuit prin directiva mknod cu tipul fişierului 010000. zonele de date ale proceselor nu pot fi partajate în mod normal. deci procesele ce solicită primiri de mesaje se .

mută legătura. Mesajele ce se transmit sunt caracterizate printr-un tip (reprezentat printr-un număr la alegere). fişierelor speciale şi a fişierelor mari. aceasta servind drept mijloc de identificare şi gestiune a fişierului. Identificarea fişierelor se realizează prin: . fiecare fişier având alocat un număr întreg de blocuri. dacă aceasta dispune de driverul corespunzător. Atribuirile standard pentru fişiere implicit sunt: 0 fişier standard de intrare . * biţii de identificare a directorilor. ele sunt referite ca fişiere speciale de tip caracter sau bloc.intrările în lista de indecşi ale fiecărui volum. fiind recunoscute două tipuri de unităţi periferice (disc şi terminal) a căror inod-uri conţin: .numărul major. . Gestiunea fişierelor speciale Toate operaţiile de intrare/ieşire sunt privite ca operaţii cu fişiere.indică numărul unităţii. Blocurile nu trebuie să fie neapărat contigue pe disc. . 6. 1 fişier standard de ieşire . * data la care a avut loc ultima modificare.4. ce serveşte gestionării mesajelor de eroare şi a informaţiilor de diagnostic. 2 ecranul de intrare al terminalului.6.un inod conţine o serie de informaţii cu privire la fiecare fişier: * numărul de identificare al user care a creat fişierul.12. Deoarece aceste fişiere sunt deosebite de fişierele utilizator. se vor bloca dacă nu există nici un proces care să recepţioneze iar coada de mesaje este plină. Fiecare unitate fizică este înzestrată cu un program special (driver) care translatează acţiunile solicitate de unităţile virtuale astfel încât utilizatorul poate comunica cu orice unitate ataşată sistemului fără nici o deosebire. Shell nerecunoscând existenţa unităţilor periferice. Fişierele disc sunt organizate fizic în blocuri de 512 bytes. Identificarea unui fişier pe disc Corespondenţa nume fişier-index este disponibilă prin comanda ls-i şi se numeşte legătură (link). I . * 13 cuvinte ce arată blocurile unităţii ocupate de fişier. * de câte ori a fost referit în directori.ecranul terminalului.numărul minor. motiv pentru care lista de indecşi se mai numeşte tabelă de inod-uri.intrările din directori care identifică fişierele printr-un număr de index asociat fiecărui fişier.Sisteme operaţionale vor bloca până ce recepţionează mesajul solicitat.list Director Nume Număr fişier index Tabela fişierelor inod } 64 bytes 64 bytes Fig. 6. iar cele ce doresc să emită. . deci Kernel ascunde unităţile fizice reale sub forma unor fişiere aparente. spre deosebite de alte sisteme ce impun acest lucru. . * starea de protecţie a fişierului (ReadOnly. iar recepţia se poate face prin specificarea tipului. este punctator într-o altă tabelă rezidentă pe volum (index-listă). numărul de index pentru orice volum fizic. alte comenzi ce afectează legăturile: mv . * dimensiunea fişierului.tastatură. conţin un număr de intrări numite inod-uri.indică tipul dispozitivului.etc).Open.

nucleul organizează în memoria internă o zonă de tampone cache (structuri de date software) diferite de memoria cache. etc.crează o legătură. rm . Pentru reducerea numărului operaţiilor de intrare/ieşire la periferice ce lucrează la nivel de bloc. dar zona alocată în memorie va avea 64 B ai inod-ului plus o zonă ce conţine informaţii necesare în timpul lucrului (pointeri de citire/scriere. Ca şi în MS-DOS.nivelul 3: open. Tampoanele cache sunt organizate în două liste dublu înlănţuite (unele putând face parte din ambele). Când se lucrează cu un fişier în program. 3) prin apeluri de sistem .nivelul 1. contor pentru procesele ce folosesc fişierul. 2) prin funcţii de bibliotecă <stdio.şterge o legătură.Capitolul 6 – Sistemul de operare UNIX ln .nivelul 2 care apelează 3). close. Fiecare proces are o zonă de informaţii în care se păstrează toate FD . . lista tampoanelor în uz este organizată conform unei funcţii de dispersie (hashing) ce ţine seama de numărul logic al dispozitivului periferic şi numărul blocului al cărui conţinut se încarcă în zona de date ataşată tamponului. în RAM există o altă structură ce aparţine nucleului (File Table) unde se copiază un inod din i-LIST.h> . write prin care se gestionează fişierele la cel mai scăzut nivel. fişierele se identifică în program printr-un FD (File Descriptor). Accesul la sistemul de fişiere se face la trei nivele: 1) prin utilitare . read.urile pentru fişierele deschise în timpul lucrului şi o zonă de cod a procesului neaparţinând nucleului ci în UOF (User's Open File). Funcţiile sunt apelate de nivelul inferior al sistemului de gestiune al fişierelor (SGF).).

Care sunt componentele nucleului la UNIX ? Se regăsesc acestea şi la MS-DOS ? Motivaţi răspunsul. Să se identifice principalele componente ale sistemelor de operare MS-DOS şi UNIX prin analogie. Identificaţi stările unui proces la UNIX şi a modului prin care un proces trece dintr-o stare în alta.Sisteme operaţionale EXERCIŢII 1. în ce constă fiecare dintre acestea ? 9. Ce tipuri de fişiere recunoaşte UNIX spre deosebire de MS-DOS ? 5. Care sunt principalele aspecte ce justifică oportunitatea sistemului de operare UNIX ? 2. Să se efectueze o comparaţie între MS-DOS şi UNIX la nivelul caracteristicilor generale. Prin ce modalităţi practice se asigură comunicaţia dintre procese la UNIX ? 10. 4. 7. Specificaţi mecanismele de sincronizare a proceselor la UNIX. În ce constă gestiunea fişierelor speciale la UNIX ? . 3. 6. Cum se execută planificarea proceselor la UNIX ? 8.