cap 6 - sisteme de operare, radu marsanu

34
SISTEMUL DE OPERARE UNIX 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.). 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.

Upload: luciana-andreea

Post on 29-Dec-2014

58 views

Category:

Documents


10 download

DESCRIPTION

UNIX

TRANSCRIPT

Page 1: Cap 6 - Sisteme de Operare, Radu Marsanu

SISTEMUL DE OPERARE UNIX

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 singurutilizator (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 implementarecomercială IS/1 (Interactive System One), urmată la scurt timp de versiunea XENIX a firmeiMicrosoft. În 1980, UNIX s-a impus ca principală soluţie de standardizare in domeniul sistemelorde operare, reprezentând o modalitate de realizare a sistemelor deschise pentru toate categoriile desisteme de calcul.

După 1981, firma AT&T elaborează versiunile UNIX System III şi V, iar firma BerkeleySoftware Distribuitors (BSD) realizează standardele BSD 1,2,3 urmate de BSD 4.2, 4.3 şi din 1993BSD 4.4

Companiile SUN şi AT&T au dezvoltat versiunea System V.4 în 1988, iar IBM, DEC şiHewlett Packard au format Open Software Foundation (OSF) independent de AT&T (fig. 6.1.).

UNIX este un sistem de operare time -sharing universal. Principalasa caracteristică este portabilitatea - disponibilitatea sa pentru majoritateasistemelor 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.

Page 2: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale

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ă cusistemul de calcul, indiferent din ce categorie de sisteme de calcul face parte;- oferirea de servicii pentru dezvoltarea interactivă de programe scrise în majoritatea limbajelor deprograme 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 dehardware;- 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 sistemulde fişiere;- existenţa unui sistem de întreruperi logice pentru sincronizarea proceselor reentrante şi asincronemultiple;- managementul spaţiului afectat execuţiei proceselor şi controlul timpului de acces la procesele înaş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 utilizatoruluicu 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

1984 –

1985 –

AT&T + SUN

–1979

–1982

–1984

–1986

–1988

AT & T Bell Laboratories

Versiunea 6 –1975

BSD 4.2

BSD 4.3

BSD 4.4 OSF /1

Xenix

System III

System V.2

System V.3

System V.4

1993 1992

Versiunea 6BSD

influenţedescendenţi direcţi

Page 3: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX(Oracle, Gupta), reţele de calculatoare, inteligenţă artificială, simulare, gestiune, statistică, instruireasistată de calculator, etc.;- permite execuţia aplicaţiilor în MS-DOS, în paralel cu execuţia de procese sub UNIX (submeniupentru MS-DOS);- întreţinere şi dezvoltare facilă.

6.1.2. Arhitectura sistemelor de calcul ce lucrează cu UNIXArhitectura unui sistem de calcul din punct de vedere al funcţionalităţii, se prezintă sub

formă stratificată pe trei niveluri (fig.6.2.).

Fig. 6.2. Arhitectura sistemelor ce lucrează sub Unix

Cel mai inferior nivel este nivelul fizic -nivelul la care operează hardware-ul, acestaincluzâ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ă deaplicaţii.

Este de remarcat faptul că orice nivel comunică numai cu nivelul imediat inferior sausuperior, furnizând servicii pentru nivelul imediat superior.

Scopul principal al sistemului de operare fiind acela de a controla resursele hardware alesistemului, se poate aprecia că sistemul de operare acţionează ca o interfaţă între utilizatorreprezentat prin programele de aplicaţie pe care acesta le lansează în execuţie şi componentahardware (fig. 6.3.).

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

Nivelfizic

Software de aplicaţiiAplicaţieutilizator

… Aplicaţieutilizator

Proc. tab

SGBD

Proc. texte

CAD/CAM GAMES

Software de aplicaţii

Dispozitivefizice

CompilatoareLinkeditoare

Interpretercomenzi Utilitare

Sistem de operare

NUCLEU (KERNEL)

HardwareMicroprograme

- microcodLimbajmaşină

Utilizator

Software de aplicaţie

Interpretor de comenzi

Utilitare

Nucleu Nucleu

Page 4: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale

Fig. 6.4. Componentele majore ale sistemului de operare UNIX

Nucleul (Kernel) este componenta care asigură servicii de sistem pentru programele deaplicaţii asigurând gestiunii proceselor, a memoriei, a intrărilor / ieşirilor şi a timpului; Shell - interpreterul de comenzi, reprezintă mecanismul prin care sistemul de operarerealizează interfaţa între utilizator şi sistemul de calcul; interpreterele de comenzi existente pesistemele de operare Unix sunt:* Bourne Shell (bsh) şi Bourne Again Shell (bash) al cărui producător este firma AT&T; bsh a fostprima variantă a interpreterelor de comenzi;* C Shell (csh) elaborat de firma Sun Microsystem; interpreterul are o sintaxă a comenzilor similarăcu cea a limbajului C;* Korn Shell (ksh) ce se constituie ca o îmbinare a variantelor anterioare.

Sistemul de fişiere cuprinde programe utilitare, aplicative şi de gestiune a operaţiilor deintrare/ieşire.

Interfeţele disponibile utilizatorului sunt organizate pe trei niveluri:* nivelul exterior nucleului, care poate fi accesat de către utilizator prin intermediul utilitarelor;* nivelul intermediar, accesat prin funcţii din biblioteca limbajului C;* nivelul inferior, a cărui accesare se realizează prin funcţiile de sistem (System Calls).

Asemănător MS-DOS-ului care în cursul dezvoltării sale a fost dotat cu interfeţele graficeWindows, UNIX-ul a încorporat ca principale interfeţe grafice: * X/Windows al firmei MIT, folosită şi de SCO în versiunile Open DeskTop (ODT);* Open Look al cărei producător a fost firmele AT&T şi SUN;* DEC Windows a firmei DEC.

Prin urmare, există o ierarhizare a straturilor ce se interpun între utilizator şi nucleulsistemului de operare redată în fig. 6.5.

Interpretorul decomenzi

Shell

Programe gestiune operaţiide intrare/ieşire

Utilitare Pr

ogra

me

aplic

ativ

e

Dispozitiveperiferice deintrare/ieşire

Utilizator

Page 5: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX

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

6.1.4. Tipuri de sisteme de operare UNIXPrincipalele 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. 6.6.

Fig. 6.6. Principalele variante de sisteme de operare UNIX

UNIX SYSTEM V RELEASE 4UNIX SYSTEM V RELEASE 4 cuprinde:

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

Utilizator

Ferestre şi interfeţe grafice

Comenzi şi utilitare

Drivere periferice

Kernel

Shell

BSD

Sun OS

System V.3

SCO

Linux

DECOSF/1 AIX HP-UX Solaris Irix

System V.4OSF/1

Page 6: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale - interfaţă binară de aplicaţii (ABI).

SCO Santa Cruz Corporation dispune de două variante:- ODT - Open DeskTop;- Open Server Release 3.

Sistemul de operare UNIX varianta SCO Open DeskTop 2.0, este bazat pe Unix System V Release3.2. cu interfaţă grafică X-DeskTop; elemente mai semnificative care-l caracterizează: - dispune de un instrument grafic de poştă electronică, protocol TCP/IP şi NFS; - suportă MS-DOS; - este emulată interfaţa grafică Windows; - poate accesa partiţii DOS multiple mai mari de 32 Mb.

SUN OSSistemul de operare Unix SUN OS este destinat pentru staţiile de lucru SUN, inclusiv pentru

SUN 386; a fost proiectat având la bază UNIX V Release 3 şi BSD 4.2 şi 4.3.Cuprinde:

- sistemul de fişiere al reţelei (NFS);- interfaţă grafică utilizator SunView;- suport pentru operare fără disc pe reţea (Diskless Operation);- nucleul are circa 200 funcţii sistem, biblioteci cu rutine pentru programe de aplicaţie (rutinematematice şi aplicaţii reţea);- Shell Bourne şi C;- poate rula simultan şi aplicaţii DOS care au acces la fişierele din reţeaua Sun Os.

SOLARISSistemul de operare UNIX varianta Solaris al firmei SUN, cuprinde următoarele

componente semnificative:- Sun Os 5.0 bazat pe Unix System V Release 4;- ONC Distributed Computing Platform -colecţie de protocoale de intercomunicare şi serviciidistribuite;- sistemul de vizualizare OpenWindows V 3;- interfaţa grafică OpenLook;- Deskset V3- set de instrumente pentru activitatea de desktop.

Începând cu versiunea Solaris 2.6, sistemul de operare are ca principale noutăţi, un set debază pentru servicii de reţea, inclusiv propriul server Web şi browser. Îmbunătăţirile noii versiuniau condus la următoarele constatări:

- cel mai rapid mediu Java;- suport pentru fişiere mari;- creşterea cu cca 35 % a performanţelor pentru baze de date;- creşterea cu 350 % a performanţelor pentru Web.

HP - UXHP - UX Hewlett Packard Unix este versiunea Unix System V care încorporează o serie de

caracteristici ale OSF/1:- HP - UX 9 poate fi asimilat cu Unix System V.3, dispunând suplimentar de câteva

extensii;- HP - UX 10 este un Unix System V.4.

DEC - OSF/1DEC - OSF/1 Digital Equipment Corporation este versiunea OSF/1 a firmei DEC

implementată pe DEC ALPHA STATION 600.

Page 7: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXIRIX

IRIX include majoritatea caracteristicilor de la BSD, av având la bază Unix System V.4.

AIXSistemul de operare UNIX varianta AIX a fost proiectat de corporaţia IBM, fiind bazat pe

versiunea UNIX System V BSD şi OSF/1; este disponibil pe calculatoare IBM PS/2 (modelulPower PC- versiunea AIX 3.x şi AIX 4.1.1) şi compatibile, respectiv pe mainframe avândimplementate microprocesoare RISC-6000 versiunea AIX 4.1.3.

UNIX WAREUnix Ware este o variantă având la bază versiunea UNIX System V Release 4, rezultată

dintr-o colaborare UNIX şi Novell.Componente esenţiale:

- nucleul din Unix System V Release 4.2;- sistemul de operare de reţea locală Netware;- interfeţe grafice utilizator disponibile sunt: Openlook şi OSF/Motif.

LINUXLinux este sistemul de operare Unix pentru procesoarele Intel, care a oferit software gratuit.

Linux include esenţialul variantei BSD, fiind destinat utilizării individuale de către profesioniştiUnix. Este o soluţie acceptabilăpentru conectarea la Internet şi poate fi utilizat ca X terminal însiteurile Unix.

6.2. Sistemul de fişiere UNIX SYSTEM V

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

6.2.1. Tipuri de fişiereSistemul de operare UNIX System V lucrează cu următoarele tipuri de fişiere:

- fişiere obişnuiteAceste fişiere sunt constituite dintr-un şir de bytes (memoraţi de obicei pe disc) terminat cu

un marker de sfârşit de fişier (EOF). Şirul este divizat în linii de text terminate cu caracterul "newline" (CR). Restricţiile de lungime, format, utilizat;

- fişiere specialeFişiere speciale se constituie ca o interfaţă între programele utilizator şi rutinele nucleului sistemuluide operare, ce lucrează direct cu dispozitivele periferice de intrare/ieşire. Astfel, utilizatorul va trataperifericele de intrare/ieşire ca fişiere, activarea unui astfel de fişier coincizând cu activareadriverului dispozitivului periferic asociat. La rândul lor, fişiere speciale sunt de 3 categorii:

* fişiere speciale de tip caracter sunt fişierele care transferă un byte printr-o operaţie deintrare/ieşire;

* fişiere speciale de tip bloc sunt fişierele care transferă un bloc printr-o operaţie deintrare/ieşire;

* fişiere speciale de tip pipe sunt fişiere ce constituie canale de comunicaţie între 2 procese;comunicaţia între două procese se poate realiza în memorie prin fişiere pipe obişnuite, sau pe discprin aşa zisele fişiere pipe (named pipe).

-cataloage de fişiere (directori)Directorii sunt cataloage de fişiere ce conţin numele fişierelor componente şi adresa fizică pe unitatesimbolizată prin:

. (un singur punct) identifică numele directorului propriu, numit Home directory (2 bytes);

.. (două puncte) identifică numele directorului părinte ân care fişierul cu un anumit index

Page 8: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale(inod) apare ca subdirector (14 bytes). Aceste fişiere nu se pot citi/scrie direct de utilizator, operaţiile efectuându-se prin directive desistem.

6.2.2. Structura arborescentă a sistemului de fişiereSistemul de fişiere UNIX System V este organizat într-o structură arborescentă sub formă

de directori şi subdirectori conectaţi la directorul rădăcină (/root). Restricţia de parcurgere este caun director să nu fie legat la nivelul superior decât printr-o singură legătură.

Pentru fiecare utilizator, administratorul de sistem creează câte un director propriu ce poateconţine subdirectori sau fişiere obişnuite. Identificarea în cadrul structurii arborescente se realizeazăprin numele fişierului precedat de calea în care se află; specificarea căii se poate realiza în douămoduri:

- absolut, pornind din directorul rădăcină /root;- relativ, pornind de la directorul curent.

Schimbarea directorului curent se realizează prin intermediul comenzii:$cd cale

unde cale poate fi specificată:- spre extremităţile arborelui, prin specificarea subdirectorului dorit;- spre baza arborelui, ceea ce presupune specificarea completă a căii;

Spre deosebire de MS-DOS, la UNIX nu apare la prompter calea curentă; determinarea căii curentese face prin comanda:

$pwd(print work directory) care va afişa calea completă;

Prin comanda$cd

se revine în directorul utilizatorului atribuit la începutul sesiunii de lucru de către administratorulde sistem (Home directory).

Crearea unui director (este permisă numai în directorul propriu atribuit de administratorulsistemului) se va specifica prin comanda:

$mkdir nume_directorÔtergerea unui director se efectuează prin comanda:

$rmdir nume_directorOperaţia este validată numai dacă directorul este vid şi utilizatorul are acest drept la calea

respectivă.Listarea conţinutului unui director se realizează prin comanda:

$ls [-opţiuni] [nume_director]unde nume_director este numele directorului al cărui conţinut se va afişa pe monitor; implicit estelistat conţinutul din directorul curent;

opţiuni prin intermediul opţiunilor se pot solicita informaţii suplimentare cu privire laconţinutul directorului respectiv; opţiunile vor fi precedate de caracterul "-"; dintre opţiunile maisemnificative:

-l oferă informaţii de detaliu ce privesc: tipul fişierului, protecţie, proprietar, dimensiune,data ultimei modificări, nume;

-a solicită specificarea tuturor intrărilor în director; fiecare intrare va fi precedată de unuldin următoarele caractere având semnificaţia:

d subdirector;- fişier obişnuit;b,c fişiere speciale de tip bloc (b) sau caracter (c);. directorul curent;.. directorul părinte;

-i numărul de inod;-t afişarea conţinutului sortat după timpul ultimei modificări;

Page 9: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX

6.2.3. Structura standard a sistemului de fişiereO structură standard a unui sistem de fişiere UNIX conţine următorii directori având în

componenţă:

/ dev fişiere speciale pentru dispozitivele periferice: consola sistem,terminale, discuri, imprimantă, etc.;

/ bin utilitare în formă executabilă: compilatoare, asambloare, instrumentepentru dezvoltarea programelor;

/ lib biblioteci pentru limbaje de programare şi utilitare;/ etc programe pentru administrarea sistemului: fişiere cu parole, comenzi

de iniţializare;/ tmp spaţiu temporar de manevră folosit de programele de sistem;

/root / unix nucleul sistemului de operare, direcţionând sistemul către /aixps2/unix.std;

/ u director în care se creează Home directory pentru fiecare utilizator;/ local partiţia activă (de aici se face bootarea);/ lost+found director unde se ataşează fişierele şi directorii găsiţi ca

nefăcând parte din nici un sistem de fişiere;/ usr alte programe necesare utilizatorilor;

/ bin utilitare nefolosite frecvent;/ tmp fişiere temporare mai puţin utilizate;/ lib fişiere de bibliotecă utilizate mai rar;/ dict lista de cuvinte, despărţirea în silabe;/ man directori de fişiere text conţinând manualul complet de

utilizare./ spool -at timpul la care se prelucrează;

-lpd director imprimantă;/ user_1/ ... ¦ structuri de directori/ ... ¦/ ... ¦ ai utilizatorilor/ user_n

6.2.4. Protecţia fişierelor şi drepturi de accesSistemul de operare UNIX dispune de 3 drepturi de acces la fişiere:

- dreptul de citire read (r);- dreptul de scriere write (w);- dreptul de execuţie execute (x);

De asemenea, recunoaşte următoarele categorii de utilizatori:- proprietarul (u);- grupul de utilizatori (g);- ceilalţi utilizatori (o).

De aici decurg cele 3x3 posibiliţăţi pentru precizarea completă a drepturilor de acces.Vizualizarea drepturilor de acces se realizează prin operaţia de listare a conţinutului directorului. ExempluDacă se va introduce comanda:

$ls -alefectul va fi afişarea la monitor a conţinutului directorului curent cu toate intrările şi informaţii dedetaliu: total 24 reprezintă numărul de blocuri de 512 bytes ocupate drwxrwxr-x 6 ase info 687 Apr 28 17:13 . directorul curent

Page 10: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale drwxrwxr-x 9 ase infocib 212 Ian 12 10:22 .. directorul părinte drwxrwxr-x 1 ase stud1 43 Mar 11 15:50 fisier1 -r-wxr-x--- 2 ase stud3 8822 Feb 14 12:09 fişier2 (1)(2) (3) (4) (5) (6) (7) (8) (9)unde (1) tipul de fişier;

(2) drepturile de acces ale proprietarului (u);(3) drepturile de acces ale membrilor grupului (g);(4) drepturile de acces ale altor utilizatori (o);(5) numărul de directori în care apar fişierele (numărul de legături);(6) numele proprietarului şi grupului;(7) numărul de caractere din fişier;(8) data ultimei modificări;(9) numele directorilor şi fişierelor existente în directorul curent.

6.2.5. Modificarea drepturilor de accesLa crearea unui fişier, se asociază atât un identificator de proprietar (uid) cât şi un

identificator de grup (gid), ambele atribuite de către administratorul de sistem.Cuvântul care păstrează fişierele şi drepturile de acces are următorul format:

15 13 12 10 9 7 6 5 4 3 0

xwr xwr xwr sticky sgid suid tip fişier o g u

Fişierele executabile preiau la execuţie uid-u//gid-ul celui care le lansează; dacă biţii suntsetaţi pe 1, se preia uid-ul/gid-ul proprietarului fişierului respectiv, iar la comanda ls apare opţiuneas în loc de x la dreptul de execuţie al proprietarului

Setarea bitului sticky produce rămânerea în memoria internă a fişierului executabil - în zonade evacuare (swapping); este utilizat pentru fişiere de comenzi sau comenzi apelate frecvent (TSR).

Schimbarea proprietarului (owner-ului) anumitor fişiere se face prin intermediul comenzii:$chown nume_nou_proprietar fis_1 fis_2 ... fis_n

unde nume_nou_proprietar devine noul proprietar al fişierelor fis_1 fis_2 ... fis_n specificate.Exemplu

Prin comanda:$chown radu fis1.x fis2.x

radu devine noul proprietar al fişierelor fis1.x şi fis2.x.Schimbarea grupului care deţine anumite fişiere se realizează cu ajutorul comenzii:

$chgrp nume_nou_grup fis_1 fis_2 ... fis_nprin care nume_nou_grup devine deţinătorul fişierelor fis_1 fis_2 ... fis_n.

Adăugarea unui nou grup la sistemul de fişiere UNIX se efectuează prin comanda:$newgrp nume_grup_adaug

în urma căreia nume_grup_adaug este ataşat la sistemul de fişiere existent.Schimbarea drepturilor de acces la un fişier se poate realiza numai de către proprietarul

acestuia (eventual, de către administratorul sistemului-superuser) cu comanda:$chmod {cine} {permis}{drept_acces} fis_1 fis_2 ... fis_n

unde cine poate fi:u user login (proprietarul);g group (grupul);o others (alţi utilizatori);a all (toţi utilizatorii).

permis stăbileşte accesul sau neautorizarea acestuia prin:+ permisiune;- neautorizarea accesului;= permisiune absolută.

Page 11: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX

drept_acces sunt drepturile de citire (r), scriere(w) sau execuţie (x); fis_1 fis_2 ... fis_n fişierele asupra cărora se aplică modificarea.Exemple:

1) Comanda:$chmod a+rx prog

permite tuturor utilizatorilor (a) să citească (r) şi să execute (x) fişierul prog.2) Comanda:$chmod u-w prog

nu permite proprietarului fişierului prog să facă modificări în conţinutul acestuia.3) Prin comanda:$chmod o-r mail

nu se permite altor utilizatori (o) să citească (r) fişierul mail.Observaţie: modificarea drepturilor de acces se poate realiza şi absolut prin însumarea

următoarelor valori: 4000 setare uid 2000 setare gid 1000 setare bit sticky

400 drept de citire pentru proprietar;200 drept de scriere pentru proprietar;100 drept de execuţie pentru proprietar; 40 drept de citire pentru grup; 20 drept de scriere pentru grup; 10 drept de execuţie pentru grup; 4 drept de citire pentru alţi utilizatori; 2 drept de scriere pentru alţi utilizatori; 1 drept de execuţie pentru alţi utilizatori;

ExempluComanda:$chmod 755 prof

modifică drepturile de acces pentru permisiune la citire, scriere, execuţie proprietar 700(400+200+100), citire, execuţie pentru grup 50 (40+0+10), şi citire, execuţie pentru alţi utilizatori5(4+0+1).

Informaţiile despre utilizatori şi grupurile de utilizatori sunt cuprinse în fişierele/etc/passwd, /etc/shadow şi /etc/group.

Utilizatorii au acces la comenzile generale situate de regulă în căile /bin şi /usr/bin, aceştiaavând posibilitatea să-şi modifice propria parolă cu comanda:

$passwd parolacare va solicita introducerea noii parole de două ori.

Orice utilizator are acces la fişierul /etc/passwd, în timp ce la fişierul ce conţine parolele(/etc/shadow), nu are acces decât numai utilizatorul cu drept deplin la root (administratorulsistemului).

Fişierul /etc/passwd conţine câte o linie pentru fiecare utilizator, având următoareastructură:- numele de conectare (login);- X parola invizibilă;- numărul de identificare al utilizatorului uid (user identification);- numărul de identificare al grupului gid (group identification);- numele proprietarului (name owner);- directorul atribuit la conectare (home directory);- numele interpreterului de comenzi (shell).

Page 12: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale

La execuţia oricărui program, acestuia i se atribuie patru identificatori:1.uid-ul real din /etc/passwd;2.gid-ul real din /etc/passwd;3.uid-ul efectiv al programului;4.gid-ul efectiv al programului.

Accesul programului la un fişier va fi determinat de uid-ul şi gid-ul efective astfel:- programul are aceleaşi drepturi de acces la un fişier ca şi proprietarul fişierului dacă uid-ul efectiveste identic cu uid-ul fişierului;- dacă uid-ul efectiv al programului nu este identic cu uid-ul fişierului, dar gid-ul acestuia coincidecu gid-ul fişierului, programul are aceleaşi drepturi de acces ca şi grupul asociat fişierului;- dacă uid-urile şi gid-urile efective ale programului şi fişierului sunt diferite, programul va aveaaceleaşi drepturi de acces la fişier ca şi ceilalţi utilizatori.

Pentru un fişier, pot fi poziţionate (setate) două drepturi speciale de acces:suid (set uid) şi sgid (set gid) care, la fişierele executabile au atribuite implicit drepturile pe carele are utilizatorul atunci când le lansează:- dacă suid a fost setat, atunci programul care accesează un fişier va avea uid-ul efectiv cu cel alproprietarului, dar numai pe durata execuţiei programului.Exemplu

Prin comanda:$chmod u+s fis

se stabilesc drepturile proprietarului asupra fişierului fis, când acesta este accesat; efectul comenziieste:

-rws-x proprietar grup fisdeci, orice membru al grupului poate accesa fişierul specificat prin fis.

Informaţii despre numerele şi numele de identificare ale utilizatorilor şi a grupurilor se potobţine cu comanda $id, iar numele utilizatorului curent prin comanda $logname.

6.2.6. Montarea volumelor în structura arborescentă a sistemului de fişiereDispozitivele periferice de intrare/ieşire se pot ataşa sistemului de fişiere în UNIX, sub

forma unor fişiere speciale ce trebuie constituite ca o structură arborescentă de root, director,subdirector, simpla montare fizică nefiind suficientă; montarea semnifică în acest caz accesul ladispozitivul periferic.

Comenzile specifice vor fi menţionate cu scopul cunoaşterii manierei de abordare adispozitivelor periferice de către sistemul de operare UNIX, dar ele nu pot fi executate decât dacăsunt date de către superuser (comenzi privilegiate).

Un sistem de fişiere poate fi înregistrat pe diferite volume logice materializate pe variatesuporturi fizice, dar pentru a opera sub sistemul UNIX, toate trebuie să se găsească într-un volumunic denumit root, volum ce conţine programul de încărcare a sistemului de operare. Sistemul defişiere poate fi utilizat doar dacă este încorporat în structura de fişiere accesibilă la pornireasistemului; operaţia se poate realiza prin legarea sistemului de fişiere respectiv, la un director alsistemului de fişiere accesibile- operaţia se numeşte montare. În momentul montării celelalte fişieredevin transparente pentru sistem până la realizarea comenzii inverse (demontare).

Montarea unui volum se realizează cu comanda:$/etc/mount [-r] /dev/tip_dispozitiv /nume_director

unde tip_dispozitiv reprezintă numele fişierului special asociat dispozitivului fizic care se aflăîn directorul /dev; -r protejat la scriere; nume_director este numele directorului ce va fi substituit de directorul rădăcină al volumului;acesta trebuie să fie creat în prealabil ca director vid); /etc este directorul în care se află comanda mount.

Demontarea unui volum se realizează cu comanda:

Page 13: Cap 6 - Sisteme de Operare, Radu Marsanu

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 directivede sistem ce pot fi apelate din programele utilizatorilor.

Pentru crearea unei structuri arborescente de director pentru volum se foloseşte comanda:$/etc/mkfs /dev/nume_fis_special dimensiune_fis

care şterge tot conţinutul volumului, creând o structură de director pentru volumul ce se va indicaprin numele asociat (nume_fis_special); dimensiunea fişierului (dimensiune_fis) se specifică prinnumărul de blocuri ocupate de fişier;

/etc directorul în care se găseşte comanda mkfs;/dev directorul în care se află numele fişierului special.

Exemple1) Prin comanda:

$/etc/mkfs /dev/dsk1 2000se crează un sistem de fişiere UNIX pe floppy-disk-ul montat în unitatea 1, cu un singur director,şi cu 2000 sectoare, iar prin:

$/etc/mount /dev/fd1 /userse montează sistemul de fişiere UNIX de pe floppy-disk-ul din unitatea 1, în directorul /user/ alsistemului de fişiere de pe discul principal (fig.6.7.).

Fig. 6.7.

2) Comanda:$/etc/mount -r /dev/rz4c /radu

montează un disc optic prin intermediul interfeţei de disc SCSI, în directorul /radu protejat lascriere.

3) Crearea unui fişier special asociat unui dispozitiv periferic se face prin comanda:$/etc/mknod /dev/nume_fis_special {c/b} nr_maj nr_min

unde c/b tipul fişierului special:- fişier special de tip caracter (c);- fişier special de tip bloc (b);

nr_major, nr_minor reprezintă tipul dispozitivului (nr_major), respectiv numărul acestuia(nr_minor) ambele specificate în octal, numerele depinzând esenţial de sistemul de operare UNIX.

/ dev / bin / ctc / user. . .

/ bin / tmp. . .

/ user 1

/ fd 1. . .

Page 14: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale

ExempluComanda:

$/etc/mknod /dev/tty4 c 3 4crează fişierul asociat terminalului tty4 de tip caracter (c) în calea /dev,tipul dispozitivului fiind 3 (nr_major) iar numărul dispozitivului este 4 (nr_minor).

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; f factorul de întreţesere;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 întreţesere 3.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.2.7. Implementarea sistemului de fişiere UNIX pe discOrice volum de disc este iniţializat ca un sistem de fişiere, conţinând un număr de blocuri

adresabile (de la 0 la valoarea maximă dată la iniţializare) organizate astfel:Bloc 0: BootBloc 1: SuperblocBloc 2: Zona de inod-uriBloc 3:.. Blocuri de date..Bloc n: Zona de evacuare temporară (swapping).

Blocul Boot conţine codul încărcătorului părţii rezidente a sistemului de operare (în generalprimul sector care este rezervat pentru programul de boot-are şi pentru informaţii desprepartiţionarea discului).

Superblocul conţine informaţii generale despre sistemul de fişiere:- dimensiunea sistemului de fişiere împreună cu numărul de blocuri libere, tabloul ce conţineblocurile libere, indexul următorului bloc liber din tablou;- dimensiunea zonei de inod-uri, numărul de inod-uri libere, tabloul ce conţine inod-urile libere,indexul următorului inod liber din tablou;- câmpurile neautorizate la scriere pentru tablourile ce conţin blocuri şi inod-uri libere.

Superblocul este copiat în memoria internă, iar nucleul actualizează permanent superblocul,pentru a asigura corespondenţa reală cu sistemul de fişiere (există un flag care este setat la fiecaremodificare a superblocului).

Zona de inod-uri conţine câte un inod pentru fiecare fişier de pe disc (eticheta de fişier).Reprezentarea internă a unui fişier este specificată prin inod-ul asociat; acesta reprezintă o intrareîn lista de indecşi a unui volum, care conţine:

- poziţia pe disc a datelor din fişier (adresa);- proprietarul fişierului;- momentul ultimei accesări a fişierului sau ultima modificare a fişierului sau inod-ului.

Un fişier are asociat un singur inod, dar poate avea mai multe nume, fiecare dintre acestea fiind înrelaţie cu acelaşi inod. Relaţiile dintre nume şi inod se numesc legături.Fiecare inod are asociat un număr de ordine i-number care desemnează în mod unic numele interne

Page 15: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXale fişierelor, iar directorii conţin tocmai tabela de traducere a numelui extern al fişierului, înnumărul de ordine asociat.

Conţinutul unui inod este modificat în momentul schimbării proprietarului, a drepturilor deacces sau a numărului de legături; astfel, modificarea conţinutului unui fişier implicând automatmodificarea inod-ului asociat. Modificarea inod-ului însă, nu implică neapărat şi o modificare aconţinutului fişierului.

Ştergerea unui inod se realizează cu comanda:$clri /dev/nume_fis_special i_number

care şterge din sistemul de fişiere asociat unui dispozitiv periferic (nume_fis_special), inodulspecificat prin număr (i_number).

ExempluPrin comanda:

$clri /dev/fd0 5se va şterge inod-ul 5 din sistemul de fişiere asociat floppy-disk-ului fd0.

Structura zonei de inod-uri cuprinde:- numărul de identificare proprietar şi grup;- tipul fişierului şi atributele de acces;- lista blocurilor fizice ale fişierului compusă din 13 intrări:

10 constituie adresele primelor 10 blocuri de date;11 bloc de simplă adresare indirectă;12 bloc de dublă indirectare;13 blocul de tripla indirectare;

- numărul de legături la fişier, indicând numărul directorilor care au referinţe la acest fişier;- data ultimei accesări, a ultimei modificări şi data creării.

La deschiderea fişierului, inod-ul este copiat în memoria internă de către nucleu,adăugându-i-se şi alte informaţii.

Blocurile de date conţin informaţia utilă a fişierelor organizate în blocuri:- fiecare bloc are mărimea de 512 sau 1024 bytes;- alocarea se face dinamic, pe baza listei blocurilor libere din superbloc.

Zona de evacuare temporară (swapping) conţine imaginile proceselor utilizator, atuncicând acestea sunt temporar eliminate din memoria internă.

Prin comanda:$fsck [-sX][-D][nume_fis_special]

el poate testa şi repara sistemul de fişiere specificat prin nume_fis_special; maniera de testare şireparare este interactivă. Testarea constă în verificarea consistenţă între valorile parametrilormemoraţi în tabelele Superblocului şi Zona de inod-uri. Dacă nu sunt depistate erori, atunci se vaafişa:- numărul de fişiere;- numărul de blocuri utilizate;- numărul de blocuri libere.

-s ignoră lista de blocuri libere existentă şi reconstituie o nouă listă, prin rescriereaSuperblocului sistemului;

-D realizează verificarea directorilor în vederea depistării eventualelor blocuri defecte.Comenzile de afişare a informaţiilor de pe disc:

$du [-ar][f1 f2 ...fn]afişează numărul de blocuri conţinute în fiecare fişier f1 f2 ...fn; implicit, seafişează directorul curent;

-a afişează şi numărul de blocuri conţinute în fişiere; implicit, seafişează numai directori;

-r afişează mesaje de eroare pentru directorii care nu pot fi citiţi.

Page 16: Cap 6 - Sisteme de Operare, Radu Marsanu

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;

$df [nume_fis_special]afişează numărul de blocuri şi inod-urile libere pentru sistemul de fişiere specificat prinnume_fis_special; implicit, se afişează pentru toate sistemele de fişiere montate.

6.3. Interpretorul de comenzi shell

Dintre principalele componente ale sistemului de operare UNIX, o poziţie privilegiată o aucomponentele Kernel şi Shell; Kernel este sistemul supervizor care încarcă toate procesele şi leexecută în manieră proprie la un moment dat iar Shell este singura cale prin care utilizatorul poatecomunica cu Kernel-ul cu privire la:

- care programe să le execute;- cine să le execute;- ce să facă cu ieşirea;- alte servicii utilizator;- comunicarea dorinţelor utilizatorului către Kernel.Shell primeşte comenzile de la utilizator, le decodifică şi comunică dorinţele acestuia la

Kernel, deci toate comunicaţiile dintre utilizator şi Kernel sunt conduse prin Shell.

6.3.1. Comenzi Shell După conectarea utilizatorului la o sesiune de lucru, este invocat automat Shell-ul (prin apariţiaprompter-ului $), care informează utilizatorul că aşteaptă comenzi ce se vor introduce de latastatură. În continuare interpreterul de comenzi Shell execută următoarele activităţi:

- decodifică linia de comandă (caută programul);- anunţă Kernell să execute programul şi aşteaptă (sau nu) terminarea execuţiei;- primeşte răspunsul Kernell şi afişează răspunsul şi prompterul $;- reia ciclic secvenţa, până la introducerea CTRL/D pe care ointerpretează ca "sfârşit transmisie de la tastatură";- anunţă Kernell să deconecteze utilizatorul.Comenzile practic, sunt programe executabile pe care Shell le caută în ordinea: directorul

curent, /bin, /usr/bin unde acestea se regăsesc ca fişiere normale.Linia de comandă are forma:

$comandă argumenteunde argumente pot fi:

- nume de fişiere, eventual calea în care se găsesc;- opţiuni urmate imediat după comandă şi precedate de - (specifice fiecărei comenzi).De exemplu:

$comp -s nf1 nf2compară f1 cu f2 şi suprimă imprimarea (care este implicită).

Se puteau folosi şi alte opţiuni ca:-l indică forma lungă a unui serviciu efectuat de comandă;-sl serviciu lung, fără imprimare.

6.3.2. Fişiere standard. Redirectare şi extensiiShell deschide implicit trei fişiere standard:

- tastatura, ca fişier de intrare standard având atribuit descriptorul asociat 0 (stdin);- monitorul, ca fişier standard de ieşire având asociat numărul 1 (stdout);

Page 17: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX- fişierul de afişare a erorilor cu descriptorul asociat 2 (stderr).

Pentru a redirecta intrarea/ieşirea standard se pot folosi caracterele:< pentru redirectare intrare standard;> pentru redirectare ieşire standard;>> pentru redirectare ieşire şi adăugare la fişierul existent.

De exemplu$ls -l > nf1

listare directori forma lungă în nf1 care pierde conţinutul iniţial;$ls -l >> nf1

idem, dar conţinutul iniţial nu se pierde.Caracterele speciale (wildcards) "*" şi "?" au aceeaşi semnificaţie ca la MS-DOS, operatorul

de negare fiind "!".[..] specifică o listă de caractere ordonate sau identificate individual (separate prin virgulă).De exemplu

$rm stud. [!a-m][2,4,9]şterge fişierele cu numele stud ce nu conţin la extensie una din literele de la a la m urmate de 2, 4,9 (exemplu: stud.x9)

Toate intrările de la tastatură sunt intorduse într-o zonă de buffer (arie de memorie rezervatăpentru stocarea caracterelor recepţionate) până când sunt solicitate de Shell, deci Shell nuprelucrează imediat intrările; la un moment dat Shell va decodifica aceste intrări, pe parcursul căreianu va desfăşura alte activităţi; se poate astfel imagina că Shell execută două activităţi distincteconectate printr-o conductă având rolul de:

- preluarea caracterelor de la tastatură şi memorarea lor ântr-un buffer;- citirea caracterelor din buffer şi decodificarea lor.

Observaţie: Shell nu poate primi şi decodifica mai puţin de o linie de comandă completă. Bufferulacceptă maxim 256 de caractere de la tastatură şi prin acţionarea tastei Enter se indică terminarealiniei de comandă; în acel moment primul program are ieşirea gata, iar al doilea program areintrările în aşteptare (sunt astfel satisfăcute cerinţele conductelor); când începe decodificarea, pânăla terminarea acestuia (marcată prin $ la monitor), utilizatorul poate introduce caractere de latastatură în continuare, ele intrând în buffer; dacă se depăşesc 256 de caractere, se vor ignora fărănici un avertisment.

Efectuarea corecţiilor pentru caracterele introduse, se poate realiza prin operaţii de:- ştergere a unui caracter (prin "#" sau backspace introduse imediat după caracterele ce se

vor şterge);- ştergerea unei linii (prin "@" sau CTRL/X după linia introdusă).

Prin comanda:$stty erase % kill &

se pot înlocui caracterele de ştergere "#" cu "%" şi "@" cu "&".Dacă se va introduce comanda:

$sttyîn urma execuţiei, se va afişa:- viteza terminalului exprimată în bauds (bytes/s) care poate fi modificată;- caracterele de ştergere erase='#', kill='@';- verificarea imparităţii, a terminatorului de linie şi a ecoului caracterelor introduse.

6.3.3. Multitasking şi aşteptareComanda

$whoarată care utilizator este conectat, pe ce terminal şi la ce moment.

UNIX permite multitasking (mai multe task-uri ce se execută concomitent) ceea ce implicăapariţia prompter-ului $ fără a aştepta execuţia completă a task-ului lansat în execuţie şiposibilitatea lansării altei comenzi; pentru a specifica execuţia (fără aşteptarea terminării) unui task

Page 18: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalese foloseşte caracterul & astfel:

$comanda1 &31

$comanda2la care Kernel arată numărul de identificare al procesului (pid-process identification), de exemplu31; fără a aştepta terminarea execuţiei comandă1 Shell furnizează prompterul $ pentru a introducealtă comandă, comenzile 1 şi 2 executându-se concomitent.

Dacă prima comandă este un task în execuţie iar comanda2 este un program interactiv (deexemplu, editorul vi), comanda2 se va încheia de către utilizator când va termina editarea, iartask-ul lansat prin comanda11 este neinteractiv (se mai numeşte proces background deoareceexecuţia sa este invizibilă în timpul cât utilizatorul este ocupat cu editorul vi).

Dacă utilizatorul doreşte oprirea task-ului background va specifica acest lucru princomanda:

$kill 31unde 31 este numărul de identificare al procesului (pid-ul).Observaţie: pot fi lansate în execuţie mai multe procese background.

Comanda$ps (process status)

arată ce procese au fost lansate în execuţie, prin ce comandă şi cât timp au fost executate, care suntîn execuţie, pentru care utilizator, etc.

6.3.4. Conducte şi linii de conducteShell permite comunicarea între procese prin conducte (pipes). Conductele sunt canale de

date ce conduc ieşirea unui program către intrarea altui program, fără crearea unor fişiereintermediare; se utilizează în acest scop caracterul "¦".

De exemplu$who¦lpr

ieşirea la imprimantă (prin spooler-ul imprimantei -lpr) a utilizatorilor conectaţi, echivalează cusecvenţa:

$who > fis$lpr < fis$rm fisAtunci când se specifică o conductă (două sau mai multe procese), Kernell startează

execuţia ambelor procese ca şi cum ar fi procese background, cele 2 procese executându-sesincronizat, aşteptând ieşirile pentru intrări.

De exemplu$who¦sort¦lpr

reprezintă o linie de conducte (pipeline) unde:who va produce la ieşire toţi utilizatorii conectaţi;sort sortează alfabetic;lpr scrie la imprimantă prin spooler.

6.3.5. Limbajul de programare ShellO secvenţă de comenzi Shell poate fi constituită ca program (numit procedură Shell) care

poate fi memorat în fişiere asemănător programelor scrise în diverse limbaje şi executate la cerere.Prin comanda:

$sh [nf]este apelată o procedură Shell ce conţine intrările în fişierul specificat prin numele nf; - dacă nf lipseşte, implicit se consideră fişierul standard de intrare (tastatura);Această comandă implică două copii Shell: una la pornirea sistemului, iar cealaltă la solicitareaexecuţiei procedurii (prima procedură Shell preia intrări de la tastatură, iar a doua procedură preiaintrările din fişierul nf).

Page 19: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXO variabilă Shell se poate declara prin:

$variabila=valoareiar referirea variabilei se face prin includerea înaintea numelui ei, a caracterului "$".De exemplu: $ruta=/usr/user1

$cd $rutaunde $ruta este o variabilă ce substituie calea /usr/user1.

Utilizarea Shell-ului ca limbaj de programare permite execuţia condiţionată a unor comenzi,ce se realizează prin testarea indicatorilor de stare poziţionaţi după execuţia unei comenzi în funcţiede care (True, False) se execută o acţiune.

Structura alternativă if:if grup_condiţii

then grup_comenzi_1[elif grup_comenzi_2]else grup_comenzi_3

fiude 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;;

esacStructura repetitivă for:

for variabilă [in valoare1 valoare2 ... valoaren]do

grup_comenzidone

unde variabilă ia valori din lista specificată prin valoare1 valoare2 ... valoaren; dacă valoare1valoare2 ... valoaren lipsesc, variabilă va lua pe rând valorile specificate în procedură caparametrii; done este terminator de buclă.

Structura repetitivă while:while grup_condiţii

dogrup_comenzi

doneunde done este terminator while;

Structura repetitivă until:until grup_condiţii

dogrup_comenzi

done

6.3.6. Fişiere de comenzi indirecteUna dintre cele mai importante funcţii ale Shell-ului o constituie executarea fişierelor de

comenzi indirecte (numite şi script-uri).Un fişier de comenzi indirecte este o procedură Shell constituită ca un fişier text, care

conţine comenzi similare ce pot fi introduse interactiv.Avantajul utilizării unui astfel de fişier constă în execuţia unui set complex de comenzi prin

Page 20: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalesimpla introducere a numelui fişierului care se comportă ca orice fişier executabil, fără a avea celetrei forme (sursă, obiect, executabil).

Puterea limbajului de comandă constă în posibilitatea de a utiliza diferite programe -tratateca instrucţiuni, împreună cu mecanismele de interconectare puse la dispoziţie de către Shell.

Un program lansat în execuţie primeşte anumite şiruri de caractere ce formează mediulasociat; prin Shell, se pot introduce şi alte şiruri de caractere în mediu.

Mediul curent ce aparţine interpreterului de comenzi se afişează cu comanda:$env(environment-echipament)ce conţine următoarele valori mai semnificative:

- $HOME= referă catalogul alocat utilizatorului (home directory);- $SHELL= interpreterul de comenzi utilizat;- $LOGNAME= numele utilizatorului în sistem;- $PATH= defineşte lista directorilor ce sunt parcurşi de Shell în

căutarea fişierelor executabile corespunzător comenziiintroduse;

- $MAIL= numele fişierului ce conţine mesajele primite de utilizatorprin e-mail;

- $TERM= tipul terminalului;- $PS1= defineşte prompter1 asociat interpreterului (implicit este

caracterul "$");- $PS2= stabileşte al doilea prompter de continuare a unei comenzi

(implicit este caracterul ">").Într-o linie de comandă construcţiile prefixate cu $, sunt înlocuite cu valorile variabilelor

de mediu sau variabile Shell; interpreterul Shell conţine şi anumite variabile predefinite, avândurmătoarea semnificaţie:

- $0 este numele Shell-ului sau fişierului de comenzi indirecte, ca procesecurente în curs de execuţie;

- $1, $2, ... , $9 sunt parametrii transmişi procedurilor Shell pe linia decomandă;

- $# numărul de parametri poziţionali ai unei proceduri Shell;- $? codul de stare al ultimei comenzi executate;- $$ identificator de proces al Shell;- $! identificatorul ultimului proces lansat în background;

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.

Observaţii:- cuvintele precedate de $ sunt înlocuite cu valoarea variabilei respective (substituirea variabilelor)incluzându-le şi pe cele încadrate de ` `(substituirea comenzilor);- rezultatul oricărei comenzi setează variabila de mediu $? prin:

0 - execuţie normală;=0 - eroare de execuţie.Este posibil a se solicita execuţia unei liste de comenzi ca un proces separat prin:

(listă_comenzi)De exemplu:

$pwd;(cd /usr/user1;pwd);pwdprin care efectul comenzii cd este anulat de întâlnirea parantezei închise, deoarece cd a schimbat

Page 21: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXcalea numai pentru subprocesul lansat pentru executarea acelei liste de comenzi.Dacă se doreşte execuţia listei de comenzi în cadrul unui proces curent, atunci se va specifica acestlucru prin:

{listă_comenzi}Exemplu:

$pwd;{cd /usr/user1;pwd);pwdprin careefectul comenzii cd se păstrează şi după terminarea listei de comenzi cuprinse întreacolade.

Prin:nume () {listă_comenzi}

se poate defini o funcţie Shell compusă dintr-o listă de comenzi inclusă între acolade; apelul funcţieiîn acest caz se face prin

nume [parametru]când parametrii poziţionali $1, $2, ... , $9 sunt iniţializaţi cu valorile parametrilor actuali din liniade comandă.

Exemple1) Pentru afişarea conţinutului unui director al cărui 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/user12) Secvenţa următoare încearcă să lanseze în execuţie prog1.x; dacă nu-l găseşte, se va afişa

mesajul "Nu exista fisierul prog1.x"if [-x $HOME/prog1.x]

then$HOME/prog1.x

elseecho "Nu exista fisierul prog1.x"

fi[-x] afişează comenzile şi argumentele rezultatelor execuţiei, prin substituiri efectuate înainteaexecuţiei.

3) Secvenţa:case $1 in

a)x=alfa;;b)x=beta;;g)x=gamma;;*)x=$1;;

esacecho $x

va afişa ce se va afla în parametrul specificat prin execuţia procedurii ($0 procedura, $1 primulparametru):

alfa dacă parametrul conţine a;beta dacă parametrul conţine b;

Page 22: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalegamma dacă parametrul conţine g;conţinut $1 dacă parametrul nu conţine a, b sau g;4) O secvenţă pentru anumită opţiune:$echo "introduceti Da sau Nu ?:\c"read raspuns restcase 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...] citeşte o linie de la fişierul standard de intrare, a1 primind valoarea primului cuvântdin linia de comandă, a2 pe al doilea, ultimul argument primind restul liniei (rest).

5) Copierea a 3 fişiere specificate în apelul procedurii se poate realiza pe baza secvenţei:for i in 1 2 3

docp fis$1 /tmp

done6) Afişarea parametrilor poziţionali:while [ $1 != ]

echo $1shift

done7) Exemplu de comandă vidă ca argument al buclei while care va returna codul 0 de eroare:while:

doif whoăgrep $1 /dev/null

thenecho "$1 este prezent"exit

elsesleep 120

fidoneSe 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 caresunt 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, capacitatea de a memora şi reutiliza ultimelecomenzi introduse, precum şi posibilitatea de a defini şi utiliza pseudonime pentru facilitareaintroducerii 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 ocomandă.

O altă facilitate importantă o constituie posibilitatea trecerii unui proces din foreground labackground prin utilizarea comenzilor fg (foreground) respectiv bg (background).

KornShell (ksh) derivat din sh, a preluat o serie de caracteristici ale csh; printre facilităţise pot menţiona: - editarea liniilor de comandă similar cu editarea textelor la vi sau emacs; - utilizează pseudonimelor din csh, extinzând sfera de cuprindere şi la subprograme constituite dinfuncţii Shell; - grad înalt de portabilitate;

Page 23: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX - posibilitatea utilizării de variabile structurate asemănător csh.

6.4. Nucleul sistemului de operare UNIX (KERNEL)

Aşa cum s-a menţionat în acest capitol, o parte a programelor de comandă şi control suntrezidente în RAM alcătuind nucleul sistemului de operare (Kernel) încărcat odată cu pornireasistemului de calcul.

Nucleul sistemului se operare UNIX este acea parte a programelor de comandă şi controlcare activează şi controlează:

- alocarea timpului maşină;- spaţiul de memorie;- canalele de comunicaţie către diverse taskuri executate de utilizator la un moment dat.

6.4.1. Structură şi funcţiiNucleul sistemului de operare este alcătuit din următoarele componente:

- programul supervizor central;- rutine de serviciu pentru o serie de activităţi cum ar fi de exemplu, scrierea în memorie, gestiuneaceasului sistem, etc.

În mod normal, utilizatorul foloseşte comenzile Shell care dirijează execuţia programelordorite sub supervizorul Kernel, acesta fiind astfel invizibil utilizatorului. Pentru utilizator, sistemulde operare UNIX apare ca fiind alcătuit din:

- un set de programe, fiecare corespunzând unei anumite comenzi;- Shell-ul care dirijează comenzile şi coordonează execuţia programelor utilizatorului.Practic însă, sistemul de operare UNIX este compus din :

- un set de programe de servicii care execută funcţiile legate de sarcinile hardware şi software;- Kernel-ul care coordonează execuţia programelor de servicii, specificate sub forma unor comenziadresate către Shell.

Programele de servicii sunt apelate atunci când sunt necesare (zona de tranziente), în timpce supervizorul este rezident în RAM, constituind mediul software de bază pentru orice evenimentedin sistem.

Principalele funcţii îndeplinite de nucleul sistemului de operare:- planificarea, coordonarea şi gestionarea execuţiei proceselor;- furnizarea de servicii de sistem cum sunt: tratarea operaţiilor de intrare/ieşire şi gestiuneafişierelor;- manipularea operaţiilor dependente de hardware, întreruperile şi funcţiile de sistem;- gestiunea memoriei.

Nucleul UNIX este alcătuit din aproximativ 10000 de linii ce constituie codul programuluicare, în funcţie de sistem, se transformă într-un număr mai mare sau mai mic de cuvinte maşină (saubytes); dintre acestea, 5 - 10% din totalul codului programelor (Shell, utilitare, KERNEL şicelelalte) este variabil funcţie de sistemul de calcul şi de setul de utilitare (fig. 6.8.).

Aşa cum rezultă din fig. 6.8, o mare parte din aceste programe este destinată gestiuniimemoriei şi gestiunii proceselor, această parte evidenţiind:

- conţinutul stivei;- conţinutul registrelor sistemului;- detalii de mediu, când procesele sunt introduse în memorie şi răspund la întreruperile

procesorului.Această parte conţine 7 - 8000 linii codul programelor scrise în limbajul C (deci portabilă

pe orice sistem de calcul). Includerea acestei părţi în nucleu se justifică prin necesitatea unui

Page 24: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalerăspuns foarte rapid.

Fig. 6.8. Structură Kernel

Altă parte a Kernel-ului conţine driverele dispozitivelor periferice de intrare/ieşireconstituite din programe ce realizează:

- controlul adreselor de citire/scriere, adresarea registrelor de date ale perifericelor deintrare/ieşire;

- manipularea întreruperilor generate de aceste dispozitive;- efectuarea recuperării erorilor.Conţine aproximativ 1000 linii codul programelor scrise tot în limbajul C, dar acest număr

este variabil în funcţie de numărul perifericelor de intrare/ieşire. Primitivele de sistem sunt specifice fiecărui sistem de calcul (scrise în limbaj de asamblare-aproximativ 1000 linii codul programului), ele conţinând:

- operaţii de intrare/ieşire de bază;- comutarea execuţiei între procese;- permiterea sau inhibarea întreruperilor hardware;- resetarea priorităţilor întreruperilor;- alte operaţii.Accesarea primitivelor de sistem se realizează prin apeluri (directive) de sistem (system

calls) din programe în C sau în limbaj de asamblare.

6.4.2. Procese şi stăriUn sistem de calcul poate să lucreze la un moment dat în două moduri:

Programe utilizator

Limbaj de asamblare Limbajul C

Biblioteci

Interfaţa cu funcţiilede sistem (apeluri)

Sistem de gestiunea fişierelor (SGF)

Gestiunea tampoanelorcache

Module de controlperiferice

Bloc Caracter

Module de controlhardware

Sistem degestiune aproceselor

Gestiuneamemoriei

Programe utilizator

Page 25: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX- utilizator, când execută un program sau proces;- sistem (Kernel), când execută un cod sistem.

Comutarea între modul utilizator şi KERNEL se realizează prin următoarele mecanisme:- ceasul- care întrerupe orice alt program cu frecvenţa de 60 Hz, rutina de ceas permiţând

reevaluarea priorităţilor proceselor şi implicit schimbarea procesului; în absenţa altor întreruperi,ceasul realizează divizarea timpului, ceea ce permite ca sistemul să fie împărţit între mai mulţiutilizatori;

- apeluri de sistem prin care utilizatorul solicită diverse servicii oferite de sistemul deoperare; cele care realizează operaţii de intrare/ieşire conducând la suspendarea procesului apelatorpe durata transmiterii datelor;

- cereri de serviciu ale perifericelor de intrare/ieşire.Procesul este conceput fundamental de organizare a sistemului de operare UNIX. În esenţa,

un proces reprezintă un program în execuţie. Pentru un program activ, pot exista mai multe proceseactive- numite instanţe:- din punct de vedere al procesului, operaţiile nucleului sunt prioritare;- din punct de vedere al nucleului, procesele sunt structuri de date catalogate.

Informaţiile necesare procesului sunt memorate în:a) tabela proceselor constituită în memorie, ce conţine o intrare pentru fiecare proces detaliind stareaacestuia:

- localizarea procesului;- adresa de memorie şi adresa de evacuare;- mărimea procesului;- numărul de identificare;- identificatorul utilizat;

b) tabela utilizator, care este ataşată fiecărui proces activ la rutinele nucleului lui (fig.6.9).Crearea unui proces implică astfel iniţializarea unei intrări în tabela procesului, care

iniţializează o tabelă a utilizatorului creând totodată textul real şi datele pentru proces.

Proces activ

……

Zona de date aprocesului

Zona de date şiinstrucţiuni autilizatorului

Spaţiul de adresă alKernel-ului

Spaţiul de adresă alutilizatorului

Page 26: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionaleFig. 6.9. Iniţializarea tabelei utilizator

Schimbarea stării unui proces (se execută, aşteaptă, este evacuat, este încărcat, primeşte unsemnal) este o activitate ce se focalizează pe tabela procesului (fig. 6.10.):

Fig. 6.10. Tranziţia stărilor unui proces

- terminarea unui proces implică eliberarea intrării sale în tabela proceselor, putând fi folosită pentrualte procese;- când procesul este activ, au loc alte evenimente, de exemplu aşteptarea terminării unei operaţii deintrare/ieţire;- pe durata suspendării unui proces, tabela utilizatorilor nu este accesată sau modificată;- dacă procesul este evacuat pe disc, este evacuată şi tabela utilizator în cadrul imaginii procesului;tabela utilizator (structură a utlizatorului) conţine în acel moment:

- numele de identificare al utilizatorului şi al grupului din care face parte, pentru stabilireadrepturilor de acces;

- pointerii din tabela de fişiere existente în sistem, pentru toate fişierele deschise;- un pointer către inod-ul directorului curent în tabela de inod-uri;- o listă a răspunsurilor pentru diverse semnale.

Informaţia curentă despre un proces se schimbă prin execuţia directivei chdir când este schimbatăvaloarea pointerului către inod-ul directorului curent.

6.4.3. Coordonarea şi gestiunea proceselorÎntr-un sistem de operare multiutilizator, se pot executa mai multe programe simultan.

Existând o singură CPU, în realitate un singur program se execută efectiv la un moment dat, iarcelelalte se vor executa atunci când CPU le va acorda cuante de timp. În timpul execuţiei unuiprogram, celelalte programe sunt rezidente în RAM, cu condiţia ca nici unui să nu solicite toatămemoria. De aici decurg 2 sarcini ale nucleului:

- planificarea proceselor - împărţirea de cuante de timp între procese;- gestiunea memoriei - atribuirea de zone de memorie liberă la procese şi eventuala evacuare

RUN – mod utilizator

RUN – mod utilizatorREADY

preemptiv

EXIT WAIT READY

CREAT

WAITsuspendată

READYsuspendată

RAMinsuficient

Memorie internăRAM

Memorie externăca suport de

evacuare(swapping)

Execuţieîntreţinere

fork

RAMsuficient

apel sistemîntrerupere

peemptiv

planificareproces

swapin

swapout

Page 27: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXsau încărcare a unui proces în/din disc.

Planificarea proceselorIniţierea unui proces poate fi efectuată numai de către un alt proces activ. Când este conectat

primul utilizator, Kernel-ul asigură o copie a Shell-ului ce se rulează doar pentru el, ivindu-seexistenţa unei alte structuri ierarhice de procese create printr-un mecanism numit bifurcaţie (fork)prin care Kernel înlocuieşte un proces existent, prin două procese:

- procesul iniţial (părinte);- procesul iniţiat de procesul iniţial (fiu), care împarte (partajează) toate fişierele cu procesul

părinte.După bifurcaţie, ambele procese se execută independent; excepţie: când se solicită explicit

ca procesul părinte să aştepte terminarea procesului fiu prin directiva WAIT; în continuare, procesulfiu poate genera la râul lui, o nouă bifurcaţie (fig.6.11.).

Fig. 6.11. Mecanismul fork

De remarcat ca proces3 are acces la toate fişierele deschise de procesele anterioare, în timpce invers nu se permite accesul. Prin urmare, fişierele sunt accesibile de pe nivelurile situate laperiferia ierarhiei.

Când Shell iniţiază un proces, bifurcaţia este aranjată astfel încât Shell să aştepte terminareaprocesului (procesul este executat în foreground). Dacă nu aşteaptă, înseamnă că Shell a dat naşterealtor procese mai puţin prioritare (procese executate în background) adăugând după comandacorespunzătoare semnul &.

Alocarea memorieiFiind un sistem de operare multitasking, UNIX ţine evidenţa taskurilor concurente şi

menţine controlul diverselor programe care sunt rezidente în RAM la un moment dat, furnizând şiinformaţii privind suficienţa spaţiului de memorie:

- în mod normal, fiecare program este încărca în diverse zone de memorie RAM;- în modul de operare cu divizarea timpului (time-sharing), poate opera fără evacuarea

conţinutului memoriei pe disc; fiecare program se execută în cuanta de timp alocată rămânând înmemorie numai programele a căror execuţie nu s-a încheiat (practic, numai registrele sistemuluisunt divizate între programe, astfel că evacuarea programelor implică de fapt, numai evacuareaconţinutului registrelor);

- pe durata execuţiei proceselor, UNIX alocă porţiuni distincte de RAM pentru:* segmentul de cod (instrucţiunile programului) protejat la scriere;* segmentul de date ce conţine toate datele definite de utilizator: valori, variabile, etc.;* segmentul de stivă care conţine toate informaţiile de sistem necesare menţinerii intacte a unuiproces, atunci când este evacuat din RAM pe disc sau când este încărcat în RAM de pe disc.

Această divizare este realizată din două motive:- evacuarea segmentului de cod implică reducerea cantităţii de informaţii necesară a fi evacuate;

fork 0 shell

proces 1

fork 0 shell

fork 1 proces 1

fork 2 proces 2

proces 3

Page 28: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalefiind de tip read-only, acesta este identic cu imaginea sa din disc, deci nu trebuie rescris când seevacuează;- Shell este încărcat pentru fiecare utilizator, deci există atâtea copii Shell, câţi utilizatori suntconectaţi; dacă mai mulţi utilizatori solicită un program (segment de cod), nu este necesară copiereaacestuia deoarece el poate fi folosit simultan; este suficient să se creeze şi când este necesar, să seevacueze 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 până la

terminare, având alocate cuante de timp de către procesor într-o planificare de tip Round- Robin;cuantele de timp nu sunt egale, lungimea depinzând de prioritatea taskului, de accesibilitatea datelorde intrare solicitate şi a perifericelor de ieşire.

Alocarea se face având în vedere maximizarea utilizării resurselor hardware, cu respectareapriorităţii taskurilor critice.

Priorităţile sunt periodic reînnoite astfel:- taskurile cu timp de execuţie mai mare, vor avea prioritate mai scăzută;- taskurile de tip întrebare-răspuns vor avea răspuns instantaneu;- taskurile ce constă în schimbarea de caractere au cea mai scăzută prioritate.

După expirarea timpului alocat, taskul este evacuat într-un fişier de evacuare pe disc undeva rămânea până i se dă din nou controlul; în acel moment, imaginea salvată anterior se reîncarcăîn RAM; ea va cuprinde:- conţinutul părţii de memorie inscriptibilă;- conţinutul registrelor;- numele directorului curent;- lista fişierelor deschise de procesul considerat.

În acest sens, sunt utile prezentarea apelurilor de sistem:i=fork()

care permite crearea unui nou proces fiu, având active procesele părinte şi fiu. Practic, se introduceun nou proces în tabela de procese a sistemului UNIX, dar nu se lansează în execuţie nici unprogram. Se crează astfel o bifurcaţie în care procesul fiu este realizat ca o copie a procesuluipărinte, nefiind necesară evacuarea programului din memorie ci doarcopierea zonelor de date.

j=execl(nume,arg1,arg2,...,argn,o)solicită execuţia unui alt program; nume,arg1,arg2,...,argn sunt pointeri către şiruri de caracterecare specifică numele programului şi numele argumentelor sale; o - pointer către o zonă de pointeri,fiecare din ei punctând câte un şir din mediu.

Prin acest apel, nucleul va determina ce program original să fie înlocuit cu alt program.Secvenţa fork-execl crează o copie a procesului părinte, apoi înlocuieşte procesul fiu cu programulcare doreşte să-l execute (procesul fiu nu este alterat de execl).

k=wait(status)determină procesul părinte să aştepte terminarea execuţiei procesului fiu;status este pointer la o valoare întreagă, iar k - valoarea returnată ca număr de identificare alprocesului fiu terminat.

O aplicaţie frecventă a lui execl se întâlneşte la înlănţuirea programelor; de exemplu, ocompilare în mai mulţi paşi implică încărcarea programului şi datelor pentru execuţie la primul pas;în continuare, se procedează asemănător şi la al doilea pas; o dată ce primul pas a fost executatcomplet, nu există nici un motiv de a se întoarce la el, deci a se suprascrie memoria ocupată la primatrecere cu programul şi zona de date.

Înlănţuirea ne este totdeauna practică pentru secvenţe în care părţi din program solicitatesunt dependente de date; astfel, procesul părinte crează un proces fiu (prin fork) cu cerere deaşteptare (wait); procesul fiu va exista ca proces evacuabil şi va avea acces la acelaşi spaţiu dememorie ca şi procesul părinte; prin execl, procesul fiu poate executa următorul program, putând

Page 29: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXel însuşi să fie rescris; deci, când procesul fiu modificat şi suprascris va fi încheiat, controlul vareveni procesului părinte.

Deoarece numărul de procese concurente nu este limitat, această schemă permite execuţiaunui mare număr de programe cu condiţia să fie posibil a se divide în programe şi date astfel încâtfiecare execuţie să încapă în RAM.

6.4.4. Sincronizarea proceselorSincronizarea proceselor poate fi sub controlul sistemului de operare prin intermediul

conductelor de comunicaţie (pipe) sau al utilizatorului, prin intermediul evenimentelor carereprezintă modul de determinare al momentului în care un proces devine gata pentru execuţie(READY).

La un moment dat un proces se află în execuţie; blocarea procesului se poate realiza prinfuncţia sleep, moment în care nucleul trece toate procesele care îndeplinesc condiţii stabilite, înstarea gata de execuţie; dintre acestea, numai un singur proces se va lansa în execuţie, celelalte fiindtrecute din nou în starea de blocare.

Mecanismele de sincronizare prin intermediul evenimentelor privesc sincronizarea prinintermediul semnalelor sau al semafoarelor, respectiv al directivelor de sistem.

Sincronizarea prin intermediul semnalelorAşa cum s-a menţionat anterior, la îndeplinirea condiţiilor prestabilite pentru lansarea în

execuţie, nucleul trece procesele în starea gata de execuţie prin intermediul funcţiei wakeup.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, nucleul efectuând verificarea activării bituluicorespunzător care se asimilează cu emiterea unui semnal la trecerea din modul sistem în modulutilizator înainte, respectiv după blocarea fiecărui proces.

La apariţia unui semnal se pot ivi următoarele acţiuni ce se execută în continuare:- terminarea procesului, când se afişează de regulă, şi imaginea procesului în memorie în

fişierul core;- acţiuni specifice care sunt desemnate prin funcţia: signal(nr_semnal,nr_rutină_tratare_semnal)De remarcat că după tratarea semnalului, se revine la valorile standard ale acţiunilor ce se

vor executa ulterior.Un caz particular îl constituie utilizarea funcţiei de sistem wait, 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;-numărul de identificare al fiului a cărui execuţie s-a terminat;

stare adresa unde se specifică modul de terminare al execuţiei iniţiate de fiu.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, ceea ce evidentimplică blocarea procesului apelant (tatăl).

Sincronizarea prin semafoareParticularitatea 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. Structurile de date asociatesemafoarelor sunt constituite din:

- identificatorul mulţimii de semafoare;- descrierea mulţimii de semafoare care include:

* utilizatorii care au acces la mulţimea de semafoare;* numărul de semafoare al mulţimii;

Page 30: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale* momentul ultimei accesări şi al ultimei actualizări al mulţimii semafoarelor;

- descrierea semaforului care cuprinde:* valoarea semaforului;* identificatorul ultimului proces care a accesat semaforul;* numărul proceselor care aşteaptă ca valoarea semaforului să devină mai mare decât valoarea sacurentă;* numărul proceselor care aşteaptă ca valoarea semaforului să devină zero.

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 acesta se va aduna la valoarea semaforului;b) dacă semaforul operaţiei este zero atunci:

- dacă valoarea semaforului este zero, funcţia se termină imediat;- dacă valoarea semaforului este zero şi indicatorii de condiţie (flags) arată NOWAIT, funcţia

se termină imediat; în caz contrar:* se incrementează numărul de procese care aşteaptă ca valoarea semaforului să fie zero;* se suspendă procesul curent până când valoarea semaforului devine zero (prin decrementareanumărului de procese ce aşteaptă ca valoarea semaforului să fie zero) sau se primeşte un semnalprin care se efectuează aceeaşi decrementare şi se reia procesul.c) dacă semaforul operaţiei este mai mic decât zero şi:

- dacă valoarea semaforului este mai mare sau egală cu modulul semaforului operaţiei,atunci din valoarea semaforului se va scădea valoarea absolută a semaforului;

- dacă valoarea semaforului este mai mică decât modulul semaforului operaţiei şi indicatoriide condiţie specifică NOWAIT, funcţia se va termina imediat; în caz contrar:* se incrementează numărul proceselor care aşteaptă ca valoarea semaforului să devină mai mareca valoarea sa curentă, suspendându-se procesul curent până când valoarea semaforului devine maimare 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ă, iar din valoarea semaforuluise va scădea valoarea absolută a semaforului operaţiei sau se primeşte un semnal (când numărul deprocese care aşteaptă ca valoarea semaforului să devină mai mare decât valoarea curentă sedecrementează, iar procesul suspendat se reia).

Sincronizarea prin directive de sistemSincronizarea se poate realiza şi printr-o serie de funcţii disponibile utilizatorului cum sunt:

kill(identificator_proces,număr_semnal);care realizează trimiterea unui semnal pentru un proces;

pause();realizează blocarea procesului curent până la primirea unui semnal;

allarm (număr_secunde);trimite un anumit semnal (întrerupere de ceas) după intervalul de timp specificat în număr desecunde.

6.4.5. Comunicaţia între proceseLa sistemele de operare UNIX este necesară realizarea unor modalităţi practice de

comunicaţie între procese; mecanismele actuale permit alternativele prezentate în continuare.

Comunicaţia prin fişiereComunicaţia prin intermediul fişierelor oferă avantajul simplităţii 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 eliberării zonei critice.Exemplu while ((f=creat("fişier",0111))<0) sleep(2); < zona critică >

Page 31: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIX unlink("fişier");prin care primul proces care reuşeşte să creeze fişierul, va trece la execuţia instrucţiunilor dinregiunea critică; până ce nu va executa funcţia unlink, orice alt apel al funcţiei de creare a unui fişier(creat), va bloca procesul prin apelul funcţiei sleep.

Comunicaţia prin fişiere de tip pipeFiş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); aceste fişiere sunt tranzitorii, datele cititeîntr-o manieră stricta a ordinii în care au fost scrise respectând regula de sincronizareproducător/consumator (o dată citită dintr-un fişier nu mai poate fi reluată, iar memorarea se faceca la orice fişier utilizând însă numai blocuri adresate direct).

La UNIX există două tipuri de fişiere pipe, fiecare generând anumite particularităţi alemodului î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 citirep[1] pentru scriere.

De remarcat că în blocurile alocate fişierelor (de regulă numai primele 10 blocuri de disc) alocarease realizează conform algoritmului Round-Robin.

Scrierea măreşte dimensiunea fişierului iar citirea o micşorează; dacă un proces încearcă săscrie un articol ce depăşeşte capacitatea fişierului, nucleul execută transferul până la umplereaacestuia, apoi blochează procesul; când se citeşte din acest fişier se poate scrie din nou, dar s-arputea să existe mai multe procese care aşteptau scrierea în fişier ducând la apariţia competiţiei.

Comunicaţia prin fişier pipe fără nume se poate realiza numai între un proces şi fiii săi,deoarece fişierul pipe nu se identifică decât prin descriptorul său şi intrările în tabela cu fişieredeschise în zona de procese ale utilizatorului, aceasta fiind moştenită de către fiii săi; astfel, zonelede date ale proceselor nu pot fi partajate în mod normal.2) Fişierele pipe cu nume oferă câteva facilităţi comparativ cu fişierele pipe fără nume:

- se crează într-un director ca orice fişier obişnuit prin directiva mknod cu tipul fişierului010000;

- la deschiderea sa prin directiva open, se poate specifica blocarea procesului ce încearcă sădeschidă pentru citire un fişier pipe nedeschis anterior pentru scriere;

- se va şterge explicit prin directiva unlink;- datorită unui nume de identificare este permisă accesarea lui de către orice procese

independente.Comunicarea prin zone de memorie comune

Zonele de memorie comune permit proceselor să utilizeze în comun, o zonă de memorie printransferul unei zone din spaţiul 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:

* numărul de identificare al utilizatorului care a creat zona, al utilizatorului curent şi al grupului;* dimensiunea segmentului;* identificatorul procesului care a accesat zona de memorie;* numărul de procese care partajează această zonă;* alte informaţii.Comunicarea prin cozi de mesaje

Principiul de comunicaţie prin intermediul cozilor de mesaje constă în comunicarea prinintermediul unei cozi circulare de mesaje gestionată de nucleul sistemului de operare.

Transmiterea se realizează cu sincronizare, deci procesele ce solicită primiri de mesaje se

Page 32: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionalevor bloca până ce recepţionează mesajul solicitat, iar cele ce doresc să emită, se vor bloca dacă nuexistă nici un proces care să recepţioneze iar coada de mesaje este plină.

Mesajele ce se transmit sunt caracterizate printr-un tip (reprezentat printr-un număr laalegere), iar recepţia se poate face prin specificarea tipului.

6.4.6. Gestiunea fişierelor specialeToate operaţiile de intrare/ieşire sunt privite ca operaţii cu fişiere, Shell nerecunoscând

existenţa unităţilor periferice, deci Kernel ascunde unităţile fizice reale sub forma unor fişiereaparente.

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 unitateataşată sistemului fără nici o deosebire, dacă aceasta dispune de driverul corespunzător.

Deoarece aceste fişiere sunt deosebite de fişierele utilizator, ele sunt referite ca fişierespeciale de tip caracter sau bloc, fiind recunoscute două tipuri de unităţi periferice (disc şiterminal) a căror inod-uri conţin:

- numărul major- indică tipul dispozitivului;- numărul minor- indică numărul unităţii.Fişierele disc sunt organizate fizic în blocuri de 512 bytes, fiecare fişier având alocat un

număr întreg de blocuri. Blocurile nu trebuie să fie neapărat contigue pe disc, spre deosebite de altesisteme ce impun acest lucru. Atribuirile standard pentru fişiere implicit sunt:

0 fişier standard de intrare - tastatură;1 fişier standard de ieşire - ecranul terminalului;2 ecranul de intrare al terminalului, ce serveşte gestionării mesajelor de eroare şi a

informaţiilor de diagnostic.Identificarea fişierelor se realizează prin:

- intrările din directori care identifică fişierele printr-un număr de index asociat fiecărui fişier;numărul de index pentru orice volum fizic, este punctator într-o altă tabelă rezidentă pe volum(index-listă);- intrările în lista de indecşi ale fiecărui volum, conţin un număr de intrări numite inod-uri, motivpentru care lista de indecşi se mai numeşte tabelă de inod-uri;- 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;* starea de protecţie a fişierului (ReadOnly,Open,etc);* 13 cuvinte ce arată blocurile unităţii ocupate de fişier;* dimensiunea fişierului;* data la care a avut loc ultima modificare;* de câte ori a fost referit în directori;* biţii de identificare a directorilor, fişierelor speciale şi a fişierelor mari.

Fig. 6.12. 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), aceasta servind drept mijloc de identificare şi gestiune a fişierului; alte comenzi ce afecteazălegăturile:

mv - mută legătura;

Numefişier

Numărindex

Director

inod

I - listTabela

fişierelor

} 64 bytes64

bytes

Page 33: Cap 6 - Sisteme de Operare, Radu Marsanu

Capitolul 6 – Sistemul de operare UNIXln - crează o legătură;rm - şterge o legătură;Când se lucrează cu un fişier în program, în RAM există o altă structură ce aparţine

nucleului (File Table) unde se copiază un inod din i-LIST, dar zona alocată în memorie va avea 64B ai inod-ului plus o zonă ce conţine informaţii necesare în timpul lucrului (pointeri decitire/scriere, contor pentru procesele ce folosesc fişierul, etc.).

Ca şi în MS-DOS, fişierele se identifică în program printr-un FD (File Descriptor). Fiecareproces are o zonă de informaţii în care se păstrează toate FD - urile pentru fişierele deschise întimpul lucrului şi o zonă de cod a procesului neaparţinând nucleului ci în UOF (User's Open File).

Accesul la sistemul de fişiere se face la trei nivele:1) prin utilitare - nivelul 1;2) prin funcţii de bibliotecă <stdio.h> - nivelul 2 care apelează 3);3) prin apeluri de sistem - nivelul 3: open, close, read, write prin care se gestionează fişierele la celmai scăzut nivel.

Pentru reducerea numărului operaţiilor de intrare/ieşire la periferice ce lucrează la nivel debloc, 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 înlănţuite (unele putând face parte dinambele); lista tampoanelor în uz este organizată conform unei funcţii de dispersie (hashing) ce ţineseama 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. Funcţiile sunt apelate de nivelul inferior al sistemului degestiune al fişierelor (SGF).

Page 34: Cap 6 - Sisteme de Operare, Radu Marsanu

Sisteme operaţionale

EXERCIŢII

1. 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.

3. Să se identifice principalele componente ale sistemelor de operare MS-DOS şi UNIX prinanalogie.

4. Ce tipuri de fişiere recunoaşte UNIX spre deosebire de MS-DOS ?

5. Care sunt componentele nucleului la UNIX ? Se regăsesc acestea şi la MS-DOS ? Motivaţirăspunsul.

6. Identificaţi stările 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. Specificaţi mecanismele de sincronizare a proceselor la UNIX; în ce constă fiecare dintre acestea?

9. Prin ce modalităţi practice se asigură comunicaţia dintre procese la UNIX ?

10. În ce constă gestiunea fişierelor speciale la UNIX ?