Sunteți pe pagina 1din 32

Sisteme de operare

Adrian Vasilescu Structura cursului: - 7 cursuri de Unix - 7 cursuri de Windows - examen scris i oral (mai mult scris, deoarece oral nu se poate da deoarece practica este redus) - prezen i proiect la seminar; seminarul nu conteaz prea mult, doar ca indulgen UNIX Sistemul de operare UNIX: - a fost scris ncepnd cu anul 1970 - ruleaz pe toate platformele, de la laptop-uri pn la megacomputere - a fost primul sistem de operare scris ntr-un limbaj superior (C), avnd prin urmare un mare grad de portabilitate. nainte de apariia sa, toate sistemele de operare erau scrise ntr-un limbaj main (assembler) i prin urmare erau foarte greu de portat de la o platform la alta. Sistemul UNIX devine portabil prin recompilarea surselor pe fiecare platform pe care se dorete portarea sa, modificrile realizate n surse fiind n jurul a 15-50% din cod. Organizarea UNIX: Sistemul de operare UNIX este structurat soft, n straturi diferite bazate pe abstractizarea cresctoare a hardware-ului. Aplicaii de firm (CAD, CAM), tiinifice, baze de date, jocuri Programe utilitare editoare, compilatoare (interpretoare), linkedtoare Sistemul de operare nucleul (kernel-ul) Hardware-ul limbaje main, microprogramare, perifericele Nucleul (kernel-ul): - asigur interfaa dintre om-hardware i ntreaga funcionalitate a sistemului de calcul - sarcinile primare ale nucleului sunt: - conducerea procesului de multitasking (multiprogramare) UNIX este un sistem multiuser i multitasking - coordonarea, memorarea i exploatarea fiierelor - ntreg sistemul de operare este construit n jurul kernel-ului, restul sistemului fiind deservit de un shell, sistemul de interaciune dintre om i kernel; - funciile kernel-ului: a) interfa cu hardware-ul: - kernel-ul ascunde complexitatea hardware-ului fa de utilizator i este prevazut cu faciliti legate strict de acest subiect - se caut s fie ct mai condensat (cca. 1 MB) i mai portabil - la portarea pe o alt platform, kernel-ul trebuie rescris n proporie de 15 50 % -1-

b) administrarea sistemelor de fiiere: - n UNIX memorarea fiierelor se face sub form de blocuri (echivalentul clusterelor n Windows). Aceste blocuri reprezint cea mai mic granularitate n lucru cu fiierele, reprezentnd, de regul, 4 KB (adic opt blocuri fizice de 512 B) - ntr-o tabel se ine evidena tuturor blocurilor alocate, a celor disponibile, a celor defecte precum i a blocurilor care le vor nlocui pe cele ce se vor defecta - n cadrul sistemului de securitate, sistemul de operare reine pentru fiecare fiier proprietarul i drepturile aferente lui i celorlali utilizatori - n UNIX, fiecare fiier este tratat ca un ir de bytes (n mod binar) - dispozitivele (periferice sau interne) sunt tratate ca fiiere binare, astfel nct un utilizator poate scrie direct un byte pe floppy disc, hard disc sau imprimat - structura de director UNIX este arborescent cu rdcina n sus. Cnd root-ul (administratorul de sistem) creeaz un cont de utilizator nou, acesta va primi automat un homedir (director cas) propriu, n care i va putea construi subdirectoare. root / unix

bin

etc

dev

lib

lost+found

tmp

usr

bin

lib

maria

ion

bin conine toate comenzile UNIX i toate utilitarele n form binar (executabil) etc conine comenzile i informaiile necesare administratorului de sistem dev conine pointeri la dispozitivele periferice lib conine biblioteca de funcii pentru compilatorul C lost+found folosit de comanda de verificare a sistemului de fiiere (apelat de sistem sau de administratorul de sistem) tmp folosit de diferite comenzi UNIX pentru stocarea fiierelor temporare. Poate fi folosit i de ctre utilizatori cu meniunea c la repornirea sistemului este ters automat usr conine n general homedir-urile pentru utilizatori. La un numr mare de utilizatori pot exista usr1, usr2, unix este un fiier ce conine nucleul sistemului de operare i care, odat ncrcat n memorie va rmne rezident c) administrarea memoriei - n UNIX se folosete conceptul de memorie virtual organizat n pagini (tehnica paging). Pagina are dimensiune fix, dar dimensiunea ei poate fi stabilit de administrator la instalarea sistemului; - translatarea ntre memoria principal i cea auxiliar (proces denumit swaping) are loc ntr-o partiie special regsit n /dev/swap, partiie a crei dimensiune este stabilit nainte de instalare; - de managementul memoriei se ocup MMU, Memory Management Unit

-2-

d) planificarea i executarea (gestionarea) job-urilor: - UNIX folosete pentru planificarea i gestionarea job-urilo active tehnica round-robin (coad circular de procese) cu prioriti. Fiecare proces primete o cuant de timp n care poate accesa CPU. Dac procesul se termin nainte de terminarea cuantei alocate, timpul de procesare rmas este alocat urmtorului proces; dac procesul ns nu a terminat procesarea n cuanta de timp alocat, el reintr n coad ateptnd o nou cuant. - job-urile cu operaii de I/O (input / output) intense primesc o prioritate mai ridicat, n vreme ce procesele de background (fundal) primesc o prioritate mai mic. - UNIX are implementat un sistem de securitate care mpiedic interferarea itre procesele aceluiai sau a diferiilor utilizatori. UNIX Shell Shell-ul reprezint legtura dintre nucleul sistemului de operare i utilizator, el facilitnd introducerea comenzilor de ctre utilizator i translatnd comenzile acestuia ntr-o form neleas de nucleu. Nucleul ncarc shell-ul ca pe orice alt program din sistemul de operare; din punct de vedere al kernel-ului, nu exista nici o deosebire ntre el i restul programelor, dar din punctul de vedere al unui utilizator, el reprezint legtura vital cu UNIX-ul. O alt caracteristic important a shell-ului este aceea de a utiliza mediul i mijloacele pentru a construi programe denumite shell scripts, adic fiiere de tip batch (lot fiiere ce conin un lot de comenzi). Aceste fiiere de comenzi sunt executate de shell lsnd impresia c fiecare comand coninut de ele ar fi introdus de la tastatur. Prin urmare, shell-ul poate servi i ca limbaj de programare structurat, oferind construcii i structuri ce permit scrierea aplicaiilor complexe. Ca avantaj al acestor shell-scripturi avem faptul ca ele necesit pentru implementare un mic efort de programare, dar dezavantajul c ele se execut mai puin rapid dect programele compilate i scrise n limbajul C (scripturile sunt interpretate de shell la ncrcarea lor). Caracteristicile generale ale unui shell 1) executarea comenzii shell-ul afieaz prompterul pe ecran n ateptarea unei comenzi; dup iniierea comenzii, el o va prelua i o va traduce nucleului ce o va executa, dup care are loc ntoarcerea la prompter. excepii de la aceast regul sunt utilitarele (Ex.: mail, vi) care sunt aplicaii complexe din care nu se poate reveni la prompter dect printr-o comand explicit. 2) biblioteca de comenzi ncorporate ncorporat n shell i ncrcate n memorie se afl o suit de comenzi; executarea acestor comenzi este mai rapid dect a celor care nu sunt introduse n aceast biblioteca i care trebuie aduse de pe HDD; 3) procesarea n background UNIX ofer aceast facilitate, astfel nct comenzile lansate n background sunt traduse kernel-ului de ctre shell i apoi se revine la prompter, fr a se atepta terminarea execuiei acestuia. n general, acest tip de execuie este specific programelor care nu au nevoie de mari resurse de procesare i a cror activitate se desfoar un timp ndelungat. Ex.: imprimarea. Aceast caracteristic ofer o mare flexibilitate n administrarea sistemului. 4) extinderea numelor de fiiere shell-ul permite utilizarea caracterelor wildcard (cabalistice) (*, ?) care permit substituirea n numele unui fiier sau a unui director a unui ir de caractere sau a unui caracter. Ex.: LS A *A.SO listeaz toate fiierele care au extensia .SO i a cror nume se termin n A. LS MIA?NEL listeaz toate fiierele care ncep cu MIA, se termin n NEL i mai conin o liter ntre aceste grupuri. 5) variabilele acestea reprezint locaii de memorie ce pstreaz valori specifice de date ce afecteaz funcionarea sistemului i/sau a unor aplicaii. 6) redirectarea I/O n UNIX intrarea standard este tastatura i ieirea standard este monitorul. Shell-ul ofer posibilitatea de a schimba aceasta, oferind posibilitatea de a scrie rezultatele direct la imprimant sau de a putea prelua datele ce urmau a fi introduse de la tastatur dintr-un fiier. 7) limbaj structurat shell-ul pune la dispoziie o serie de controale ce ajut programarea structurat: construcii while, for, if-then-else, -3-

8) substituirea comenzilor (folosirea alias-urilor) aceasta este o facilitate oferit numai de sistemul UNIX. Ea se refer la abilitatea shell-ului de a folosi ieirea unei comenzi ca intrare ntr-o linie de text sau ntr-o variabil ca intrare pentru alt comand. Ex.: utilizatorul vrea s verifice des prezena n reea a server-ului venus.ase.ro prin comanda PING VENUS.ASE.RO Deoarece aceast comand este destul de lung i dificil de scris de fiecare dat, el introduce n fiierul su de profil linia ALIAS PV=PING VENUS.ASE.RO De acum, el poate doar s scrie comanda PV i se va executa comanda PING VENUS.ASE.RO Tipuri majore de shell Tipurile de shell se deosebesc dup mai multe caracteristici: a) tipul de prompter folosit b) comanda de ncrcare a shell-ului c) fiierul de iniializare folosit (locul de reziden a comenzilor personalizate de utilizator) Principalele shell-uri folosite sunt: 1. Bourne i BourneAgainShell (BASH) scris la origine de Stephen Bourne. Are urmtoarele caracteristici: a) tipul de prompter folosit: $ b) comanda de ncrcare a shell-ului: SH c) fiierul de iniializare folosit: .PROFILE n directorul utilizatorului 2. C-shell a) tipul de prompter folosit: % b) comanda de ncrcare a shell-ului: CSH c) fiierul de iniializare folosit: .LOGIN i .CSHRC n directorul utilizatorului 3. Korn shell, scris de David Korn, este n esen tot un BourneShell dar mbuntit a) tipul de prompter folosit: $ b) comanda de ncrcare a shell-ului: KSH c) fiierul de iniializare folosit: .PROFILE n directorul utilizatorului Sistemul de organizare a fiierelor i directoarelor n UNIX, toate sunt tratate ca un fiier, inclusiv device-urile i dispozitivele periferice. Fiierul = o structur fundamental pentru pstrarea grupat a informaiei pe un suport de stocare a unui sistem de calcul. Intrarea de director n UNIX 3675 miaunel.bin numele user-friendly afiat de sistem inode nr. folosit de kernel n identificarea unic a fiierului Restul de informaii sunt ncrcate n tabela Inode List, unde se regsesc informaii precum dimensiunea, data crerii, accesrii, modificrii, precum i informaiile de securitate (posesor, grup, permisiuni). Criteriile de scriere a numelui unui fiier sunt: - fiierul poate conine maxim 14 caractere - la separarea cuvintelor, se pot folosi caracterele _ i . (punct) - se evit folosirea n numele de fiiere a caracterelor @, &, ;, |, spaiile i tab-urile - UNIX este un sistem case-sensitive, adic face difereniere ntre literele mari i cele mici

-4-

Intrarea inode-list (512 bii) inode tip permisiuni de acces numr de legturi UID GID data creare, accesare, modificare dimensiune n bytes adresele fizice ale fiierului

10

11

12

13

blocuri de adrese directe totaliznd 40 KB dimensiune fiier simpl indirectare dubl indirectare tripl indirectare Prin simpl indirectare se nelege adresarea ctre o tabel de 1024 de intrri care conine tot attea alte adrese de blocuri fizice coninnd fiierul. Adresarea aceasta permite atingerea dimensiunilor de KB. Prin dubl indirectare se nelege adresarea ctre o tabel de 10242 de intrri care conine tot attea alte adrese de blocuri fizice coninnd fiierul. Adresarea aceasta permite atingerea dimensiunilor de MB. Prin tripl indirectare se nelege adresarea ctre o tabel de 10243 de intrri care conine tot attea alte adrese de blocuri fizice coninnd fiierul. Adresarea aceasta permite atingerea dimensiunilor de GB. Tipuri de fiiere 1. fiiere curente: - text conin date n format ASCII - batch - conin date n format ASCII care reprezint comenzi recunoscute i executate de shell - executabile conin date n format binar-executabil ce reprezint comenzi i aplicaii - de date conin informaii codificate recunoscute doar de aplicaiile care le-au creat 2. fiiere director: reprezint fiiere normale dar cu un coninut de repertoriu ce conin o list de intrri de director a fiierelor pe care utilizatorul a hotrt s le asocieze din motive funcionale 3. fiiere speciale de dispozitive: conin numele tuturor dispozitivelor prezente ntr-un sistem de calcul, ataate sau nu; aceste fiiere nu conin date propriu-zise i doar pointeri ctre programele-translator de dispozitive (device drivers). Sistemul de securitate UNIX Sistemul de securitate al UNIX are patru nivele funcionale: 1) nivelul de securitate sistem, ce const din procedurile utilizate pentru a executa login / logout. La iniierea unei sesiuni, fiecare utilizator va avea un username i o parol ce va fi cutat ntr-o baz de date proprii (de obicei ascuns) pentru identificare i autentificare. Nu sunt admii dect cei care au conturi legitime. Acest sistem include de asemenea recunoaterea conturilor de root. UNIX asigur o rezerv de login pentru root i i permite acestuia s acorde unele privilegii i altor utilizatori: Ex.: s ruleze anumite programe-sistem, s instaleze anumite aplicaii, s gestioneze coada de imprimare etc. 2) nivelul de securitate fiier: reprezint cea de-a doua linie de aprare i const din modurile de acces pentru proprietarii unui fiier, grupurile de lucru asociate i accesul pentru publicul general. 3) nivelul de securitate responsabilitate: se refer la modul n care fiecare aciune aprut pe un sistem UNIX poate fi urmrit i atribuit utilizatorului real. Un identificator adiional numit LUID (Login User ID) este ataat pentru a furniza o marc de neters fiecrui proces asociat cu un utilizator -5-

4) nivelul de securitate audit (verificare): presupune faptul c n UNIX se pot contoriza pentru sistemul de conturi de utilizator nu numai tentativele reuite de utilizare a unui program, ci i cele nereuite. Mediul Shell Mediul Shell = parametri care conlucreaz la crearea acestui mediu sunt valorile introduse n setul de variabile ale shell-ului. Variabil = numele unei locaii de memorie temporare n care se va depune o anumit informaie Shell-ul vine cu un set standard de variabile i ofer i utilizatorului crearea unor variabile personale. Utilizarea variabilelor permite o mare flexibilitate i un mare grad de control sistemului UNIX. Pentru afiarea variabilelor se folosesc comenzile: $SET %SET ENV Urmtoarele variabile sunt rezervate de sistem i au o valoare special: HOME conine ntreaga cale ctre homedir-ul utilizatorului curent LOGNAME conine numele de login al utilizatorului curnd MAIL conine calea pn la directorul n care se afl corespondena electronic a utilizatorului curent TERM conine informaii despre tipul de terminal la care lucrm TZ conine informaii despre fusul orar al mainii UNIX PS1 conine informaii despre tipul de prompter folosit de utilizator. Personalizarea sa se poate face din fiierele de configurare .PROFILE i .LOGIN PATH conine cile de directoare n care shell-ul va cuta comenzile utilizatorului Lucrul cu comenzi Linia de comand = linia tastat de utilizator, afiat pe ecran i interpretat de shell $COMANDA [OPIUNI] [ARGUMENTE] Orice linie de comand are o comportare implicit; unele comenzi pot avea opiuni i/sau argumente; alte opiuni pot avea numai opiuni, numai argumente sau nici una dintre ele. De regul, comenzile se scriu cu litere mici, dar nu n mod obligatoriu, ci ca practic generalizat. Exemplu de comenzi: afieaz data curent $ DATE Dup analizarea comenzii, shell-ul caut n directorul curent comanda, apoi n directoarele specificate de variabila PATH. Dac nu este gsit n nici una dintre aceste locaii, se genereaz un mesaj de eroare. DATE: NOT FOUND! $DATE Rolul [OPIUNI] n sintaxa comenzilor este acela de a modifica / mbuntii comportarea implicit a comenzii; opiunile sunt mereu precedate de semnul - fr a exista un spaiu ntre - i opiunea efectiv. ntre comand i - exist ntotdeauna un spaiu. afieaz toi utilizatorii autentificai n acel moment $WHO afieaz aceleai informaii ca mai sus cu o scurta descriere a coloanelor $WHO H afieaz manualul de utilizare a programului tastat ca argument $MAN WHO $WHO X apelat cu parametrii greii, comanda de regul afieaz opiunile valide [ARGUMENTE] Argumentele reprezint orice informaie (date, fiiere) asupra crora va opera comanda $CAL afieaz calendarul lunii curente ncadrat de luna precedent i cea urmtoare $CAL 9 1983 afieaz calendarul lunii septembrie 1983 calculeaz diferenele ntre cele dou fiiere primite ca argument $DIFF FISIER1 FISIER2 Deoarece fiierele primite ca argumente nu activeaz cutarea n variabila PATH, putem ocoli aceast problem prin: - aducerea fiierelor necesare n directorul curent - adresarea lor prin ci de directoare relative - adresarea lor prin ci de directoare absolute -6-

../BIN/SH cale relativ /USR/BIN/SH cale absolut Numele de dispozitive pot fi pasate ca argumente ctre comenzi scrie pe portul serial 1 irul de caractere Hello $ECHO HELLO > /DEV/TTY1 $ECHO HELLO > /DEV/MEM scrie n memoria utilizator irul de caractere Hello scrie n memoria sistem irul de caractere Hello $ECHO HELLO > /DEV/KMEM scrie pe hard discul caracter irul de caractere Hello $ECHO HELLO > /DEV/RHD0 $ECHO HELLO > /DEV/HD0B scrie pe hard discul block irul de caractere Hello scrie pe dischet irul de caractere Hello $ECHO HELLO > /DEV/FD0 Modul de interpretare a unei comenzi de ctre shell Dup tastarea unei comenzi, shell-ul o va procesa pe msur ce o introducem i abia dup prelucrare se va trece la execuie. Procesul de spargere a unei linii de comand n constitueni se numete analiz gramatical parsing. opiunea $LS L MYDIR
ARGUMENTUL

comanda Shell-ul separ parametrii utiliznd coninutul variabilei IFS (InterField Separator). n mod normal IFS este constituit din caractere blank i tab-uri. nainte de a aplica regulile de separare a parametrilor, shell-ul aplic regulile ghilimelelor, substituie comenzii, genereaz numele de fiiere din expresiile curente, expandeaz variabilele i determin intrarea i ieirea comenzii. tot ce se gsete ntre reprezint un singur parametru pasat la comand ca atare. Generarea numelor de fiiere este suprimat. tot ce se gsete ntre reprezint un singur parametru pasat la comand ca atare. Generarea numelui de fiiere, expandarea i substituirea comenzii sunt suprimate. `` comanda coninut ntre `` va fi executat, iar rezultatul ei va fi pasat ca argument comenzii din linia de comand afieaz toate fiierele i directoarele din directorul curent $ECHO * $ECHO * afieaz * pe monitor afieaz * pe monitor $ECHO * ncearc s execute primul fiier din director. Dac nu este executabil se $ECHO `*` semnaleaz eroare, dar dac este executabil se ncearc execuia sa cu toate celelalte fiiere din director ca argumente (REZULTAT IMPREVIZIBIL) Caractere speciale Anumite caractere au o nsemntate special n linia de comand a) caracterul $ - returneaz valoarea variabilei ce-l urmeaz $SET NUME = SURDU VASILESCU $ECHO NUME afieaz pe ecran NUME afieaz pe ecran SURDU VASILESCU $ECHO $NUME b) caracterul ; - este folosit pentru a separa dou comenzi n aceeai linie de comand. Are practic valoare de ENTER i permite scrierea comenzilor multiple ntr-o singur linie schimb directorul curent i afieaz coninutul directorului $CD /USR/JOE;LS nou c) caracterul \ duce la pierderea de semnificaii, anulnd nelesul special al unui caracter nu afieaz nimic $ECHO ; afieaz ; $ECHO \; d) caracterele ( i ) foreaz execuia comenzilor ntr-un nou subshell e) | determin ca ieirea primei comenzi din linia de comand s fi folosit ca intrare pentru cea de-a doua comand din linie determin listarea la imprimant (LP) a fiierului BIBI $CAT BIBI | LP -7-

f) caracterele { i } grupeaz ieirile / intrrile comenzilor ${CAT BIBI;LS}|LP determin listarea la imprimant (LP) a fiierului BIBI i a coninutului directorului curent g) caracterul & determin execuia comenzii n background $CP /USR/JOE/FILMMARE.AVI /USR/EU/FILMMAREDELAJOE.AVI& copiaz fiierul in background Redirectarea intrrii i a ieirii a) operatorul > determin ca ieirea comenzii s fie redirectat ctre un fiier. Dac el nu exist, va fi creat, iar dac exista, va fi suprascris determin scrierea n fiierul CONTINUT.DIR a coninutului $LS > CONTINUT.DIR directorului curent. Coninutul fiierului existent se pierde b) operatorul >> se comporta exact ca operatorul >, dar n loc de rescrierea fiierului n cazul n care exista, va aduga la sfritul su determin scrierea n fiierul CONTINUT.DIR a coninutului $LS > CONTINUT.DIR directorului curent. Dac fiierul exist, va scrie la sfritul su c) operatorul < determin redirectarea intrrii comenzii nspre fiierul precizat determin afiarea pe ecran a fiierului BIBI.TEXT $CAT < BIBI.TEXT d) operatorul << determin interpretarea n bloc a comenzilor $CAT << MARCAJ JOB1 JOB2
MARCAJ

e) operatorul | (pipe) determin ca ieirea unei comenzi s fie considerat intrarea urmtoarei comenzi $COMANDA1|COMANDA2|COMANDA3 Generarea numelor de fiiere Generarea numelor de fiiere reprezint folosirea semnelor de wildcard (? i *) pentru nlocuirea unuia sau mai multor caractere dintr-o linie de comand. UNIX utilizeaz i expresiile [] cnd dorim s fim mai selectivi. $LS JOB[12] - listeaz fiierele JOB1 i JOB2, dac acestea exist n directorul curent $LS JOB[1-8] - listeaz fiierele de la JOB1 la JOB8, dac acestea exist n directorul curent $LS JOB[A-Z] - listeaz fiierele de la JOBA la JOBZ, dac acestea exist n directorul curent Exist posibilitatea de a exclude anumite fiiere de la cutare prin includerea semnului ! $LS JOB[!34] - listeaz toate fiierele care au o cifr n coad, cu excepia fiierelor JOB3 i JOB4 Pentru a accesa fiierele de tipuri diferite, se pot combina semnele pentru obinerea unii efect maxim: $LS JOB[0-9][A-Z]* - listeaz toate fiierele ce ncep cu JOB i continu cu o cifr, o liter i apoi orice alt ir de caractere Expandarea variabilelor Expandarea variabilelor nseamn nlocuirea unui nume de variabil cu valoarea sa. Declararea unei variabile se face prin construcia NUME_VARIABIL = VALOARE $NUME = MIHAI $ECHO NUME - afieaz NUME - afieaz MIHAI $ECHO $NUME Consider dou variabile, X i X1. Dac vom defini variabila $Y= $X1 - avem o ambiguitate, deoarece nu se tie dac se dorete accesarea variabilei X1 sau se dorete adugarea la variabil X a lui 1 $Y = {$X}1 - pentru a elimina ambiguitatea, am stabilit s accesm variabila X i s i adugm un 1 n coad $Y = {$X1} - pentru a elimina ambiguitatea, am stabilit s accesm variabila X1

-8-

Se pot folosi urmtoarele construcii: Expresia ${VARIABIL:-CUVNT}

Se evalueaz la - dac variabila este definit i nenul, se evalueaz la


VARIABIL

${VARIABIL:-CUVNT}

- dac variabila este nedefinit sau nul, se evalueaz la CUVNT - dac variabila este definit i nenul, se evalueaz la
VARIABIL

${VARIABIL:?CUVNT}

- dac variabila este nedefinit sau nul, se evalueaz la VARIABIL, iar variabila ia valoarea CUVNT - dac variabila este setat i nenul, se evalueaz la
VARIABIL

${VARIABIL:+CUVNT}

- dac variabila este nedefinit sau nul, se tiprete CUVNT i se revine n shell - dac variabila a fost setat i este nenul, se evalueaz la VARIABIL - dac nu a fost setat sau este nul, nu se ntmpl nimic - atribuire, nici un efect pe ecran - se afieaz HELLO - se afieaz HELLO - se afieaz HELLO - nu se afieaz nimic, variabila nu este definit - se afieaz GOODBYE - nu se afieaz nimic, variabila nu este definit - se afieaz GOODBYE - se afieaz GOODBYE - atribuire, nici un efect pe ecran - se afieaz NU AM GSIT PATH! - atribuire, nici un efect pe ecran - se afieaz HELLO

Exemple: $X = HELLO $echo $X $ECHO {X:-GOODBYE} $ECHO {X:=GOODBYE} $ECHO $X $ECHO {X:-GOODBYE} $ECHO $X $ECHO {X:=GOODBYE} $ECHO $X $PATH = $ECHO ${PATH:?NU AM GSIT PATH!} $X = HELLO $ECHO ${X:+GOODBYE}

Substituirea comenzii Substituirea comenzii se refer la faptul c ieirea unei comenzi poate deveni intrare ntr-o variabil sau o linie de text. - ncarc n variabila X ieirea comenzii LS JOBX $X = `LS JOBX` Dup executarea substituirii comenzii, shell-ul separ parametrii dup variabila InterFieldSeparator (IFS). Procesul de analizare gramatical a liniei de comand nu este recursiv, shell-ul nu va reparcurge linia de comand i nu va ncerca expandarea n continuare a acesteia. $COMANDA1 PARAMETRU1 PARAMETRU2 `COMANDA2` - se va executa COMANDA2, iar rezultatul ei va deveni al treilea parametru pentru COMANDA1 $ECHO `ECHO $PATH` - se afieaz $PATH, nerealizndu-se o prelucrare recursiv - se afieaz DATE $ECHO `ECHO `DATE`` - se afieaz data curent de dou ori $ECHO `DATE`

-9-

Transferarea parametrilor Dup analiza gramatical a liniei de comand, shell-ul este gata s transfere parametrii ctre comand. Dac programul a fost scris n C, parametrii sunt plasai n vectorul ARGV de unde pot fi preluai, n ordinea liniei de comand, prin ARGV[0], ARGV[1], Dac programul este un shell-script, atunci parametrii sunt aloca`ti variabilelor $1, $2, $9 Dac avem scriptul PGM, i este apelat prin linia de comand PGM JOB[12], atunci el va vedea linia de comand ca: $PGM JOB1 JOB2 $1 $2

Transferul datelor prin mediu Shell-ul poate transfera variabilele ctre un program i prin mediu. La UNIX executarea unei comenzi nu nseamn numai aducerea de pe HDD i rularea sa ntr-un proces, ci shell-ul, nainte de a executa comanda, va crea un nou subshell ca o copie a sa n care ulterior va rula comanda. Procedeul poart numele de forking. Shell fork fork

subshell procesul A

subshell procesul B

Partiiile de disc Tabela de partiii este localizat n MBR Master Boot Record. Acesta se afl la primul track, primul cilindru n sectorul 1. (Track 0, Head 0, sector 1). Partea de informaii a unei partiii UNIX conine informaii despre blocurile de boot, blocurile defecte i blocurile de rezerv. Soft-ul se sistem este o parte static care nu prea sufer modificri, n vreme ce soft-ul utilizatorului sufer dese modificri, fiind o parte dinamic. Salvarea unui HDD (operaia de backup) se poate face pista cu pist, cu o vitez superioar dat total neselectiv din punct de vedere al informaiei, dar i fiier cu fiier, selectiv dar mai ncet deoarece fiierele nu sunt memorate n zone contigue pe disc. Prin urmare, la operaia de backup se va proceda la salvarea pista cu pist a partiiilor sistem i la salvarea fiier cu fiier a zonelor utilizator. Partiiile UNIX sunt vzute ca discuri logice. Ele au dezavantajul c nu se poate scrie un fiier dincolo de limita unei partiii. UNIX poate crea un singur disc logic foarte mare prin unirea mai multor discuri fizice printr-un procedeu denumit stripping. Acest sistem ofer posibilitatea existenei unor fiiere de dimensiuni foarte mari, dar au dezavantajul c la defectarea unuia dintre discuri ntreaga informaie de pe toate discurile este nefolositoare. Comenzi pentru sistemul de gestiune a fiierelor i directorilor $MKDIR NUME_DIRECTOR - creeaz un nou director - stabilete directorul curent (dac exist permisiuni potrivite) $CD NUME_DIRECTOR - verific dac avem permisiune pe director $UMASK $RM NUME_FIIER - terge fiierul primit ca parametru - terge directorul primit ca parametru numai dac este gol $RMDIR NUME_DIRECTOR - golete un director recursiv pn la 17 nivele adncime fr mesaj $RM -R NUME_DIRECTOR de confirmare Permisiunile de fiiere Permisiunile de fiiere reprezint al doilea nivel de securitate al UNIX-ului, dnd posibilitatea lucrului fie n colaborare, fie a lucrului restrictiv -10-

$LS L

- afieaz varianta long a listrii directorului, cuprinznd i informaii de securitate permisiunile pentru ali utilizatori permisiunile pentru grupul proprietarului

permisiunile pentru proprietar

tipul de fiier:

- fiier obinuit, d director, c fiier dispozitiv caracter, b fiier dispozitiv bloc, p pipe, s socket, l legtur simbolic

Pentru schimbarea acestor informaii se folosete comanda CHMOD, cu semnificaia urmtoare: $CHMOD CINE OPERATOR PERMISIUNI FIIER
CINE OPERATOR PERMISIUNI

u g o a

Proprietarul Grupul Alii Toi

+ =

Se acord Se retrage Se suprascrie

r w x s t l

Citire Scriere Execuie Schimb UID Sticky bit (TSR) Lock

$CHMOD A = RWX NUME_FIIER $CHMOD 777

- determin ca fiierul s aib permisiunile RWX/RWX/RWX - determin ca fiierul s aib permisiunile RWX/RWX/RWX (octal)

Legturi simbolice Legturile simbolice de tip hard reprezint de fapt o redenumire a unui fiier sau director. La o legtur simbolic tip hard pot exista denumiri diferite pe HDD pentru aceleai blocuri. Dac vom terge directorul original, noul director va continua s rmn. La o legtur simbolic tip soft avem de fapt de-a face cu un pointer ctre un fiier sau un director. Dac trecem printr-un director ca legtur simbolic de tip soft putem ajunge chiar pe alt main din reea (prin mount-area unui drive NFS Network File System). n acest caz, la tergerea directorului original va trebui s tergem i legtura, pentru c altfel ea va returna o eroare ca urmare a lipsei fiierului destinaie. Legturile (hard i soft) se creeaz prin comanda LINK, folosit n felul urmtor: - determin crearea unei legturi hard ntre FILE1 i FILE2 $LINK FILE1 FILE2 - determin crearea unei legturi soft ntre FILE1 i FILE2 $LINK S FILE1 FILE2 Cutarea unui fiier (comanda FIND) Comanda FIND este una dintre cele mai complexe comenzi, ea fiind capabil s caute un fiier pe baza numelui su, pe baza datei ultimei accesri, a permisiunilor, proprietarilor tipului sau dup orice alte criterii. $FIND CALE NAME FISIER PRINT - caut (dup nume) n CALE fiierul FISIER i afieaz rezultatul - caut (dup nume) fiierul JOE n /USR i afieaz rezultatul $FIND /USR NAME JOE PRINT $FIND /USR /NAME JOE EXEC LS L {}\; - apeleaz comanda LS L i cu parametru calea ctre fiierul care a fost gsit (acoladele nlocuiesc aceast cale n expresie). Backslash-ul exprim pierderea de semnificaie n linia de comand a separatorului;

-11-

Comenzi pentru manipularea coninutului unui fiier Comanda SORT - a fost proiectat s lucreze pe fiiere text (ASCII) - ea permite testarea informaiei dintr-un fiier pe cmpuri multiple i pe subcmpuri - ieirea standard a comenzii se face pe monitor dar ea poate fi redirecionat ctre un fiier - sorteaz cele trei fiiere, cu afiare pe ecran $ SORT FILE1 FILE2 FILE3 $SORT FILE1 FILE2 O FILE3 - sorteaz primele dou fiiere, iar rezultatul l depune n FILE3 Opiuni -c (check) = verific dac fiierele au fost sortate n prealabil -m (merge) = concateneaz dou sau mai multe fiiere n unul singur dup sortare - u (unique) = ndeprteaz nregistrrile unicate, producnd date unice +m.n m.n = permite sortarea i pe subcmpuri Ex.: presupunem fiierul STAN cu urmtoarele nregistrri Georgescu:Maria:Strada Mrului:Craiova:Dolj:5827 Georgescu:Vlad:Strada Prului:Craiova:Dolj:621 $SORT T: +5 -6 STAN - determin sortarea dup codul potal -d = permite folosirea de sortri conform ordinii din dicionar; Doar literele, cifrele, blank-ul i tab-ul conteaz la sortare -f = nu face diferen ntre literele mari i cele mici (case insensitive) -i (ignore) = ignor caracterele netipribile din cmpurile nenumerice -M (month) = calculeaz lunile n ordinea normal din an -r (reverse) = sortarea se face n ordine invers alfabetic -m = permite sortarea numeric Comanda HEAD - afieaz dintr-un fiier acel numr de blocuri sau linii care este precizat n linia de comand - este creat, alturi de comanda TAIL, pentru inspecia rapid a unui fiier text - determin afiarea primelor CONTOR linii din FISIER $HEAD CONTOR FISIER $HEAD -1 /ETC/PASSWD - afieaz informaiile despre root Comanda TAIL - este o derivaie a comenzii HEAD - determin, la folosirea a +CONTOR s porneasc de la nceputul $TAIL CONTOR LBC F FISIER fiierului cu afiarea sau de la sfrit a CONTOR Comanda JOIN - concateneaz informaia din dou fiiere ntr-o nregistrare comun bazata pe o cheie comun - aceast comand marcheaz baza unui sistem de baze de date informaional implementat n UNIX - lucreaz numai cu fiiere sortate n prealabil - n mod normal, comanda creeaz o ieire compus din alipirea celor dou nregistrri n care cmpul cheie este unic - face JOIN pe cmpul 1 $JOIN T FIS1 FIS2 $JOIN T +J13 J24 FIS1 FIS2 - face JOIN a primului fiier cu cel de-al doilea fiier dup cmpul 3 al primului fiier cu cmpul 4 al celui de-al doilea

-12-

Lucrul cu informaia de sistem Funcionarea procesului INIT Dup pornirea calculatorului se execut rutina POST (PowerOn Self Test) dup care, prin procedee obinuite (nivelul de ncrcare bootstrap, bootloader-ul din MBR, booloader-ul din partiia sistemului de operare) se ajunge la ncrcarea nucleului sistemului de operare n memorie. Acesta va porni o serie de task-uri spre rulare. Procesul INIT are PID (Process ID) 1, el fiind primul lansat de kernel. El devine astfel printele tuturor proceselor ce se vor lansa n continuare, rdcina arborelui de procese. Pentru a i ce procese sunt de pornit de ctre INIT, se va parcurge o tabel denumit INITTAB, regsit n /ETC/INITTAB. Programul INIT utilizeaz aceast tabel pentru a determina ce va rula n diferite stri ale sistemului. Dintre toate tabelele UNIX-ului, INITTAB este cea mai important deoarece ea arat starea ulterioar a sistemului. Programul INIT citete aceast tabel pentru a determina ce va rula conform diferitelor nregistrri ale tabelei. INITTAB precizeaz runlevel-ul (nivelul de rulare al sistemului) i diferitele pachete software (services servicii) pe care INIT urmeaz s le porneasc; INIT poate exista ntr-o singur stare la un moment dat. Strile sistemului sunt: - boot = sistemul este n cadrul procedurilor de pornire iniializare - single (utilizator singur) = un singur utilizator acceseaz sistemul cu full credentials (acces total), nu se pot rula procese n background, nu sunt pornite servicii de nici un fel - starea 0 (shutdown) = sistemul se pregtete pentru oprirea mainii - starea 1 (single +) = ca la un singur utilizator, dar cu posibilitatea de a rula procese n background - starea 2 (multiuser) = mai muli utilizatori, capabili de a folosi ntregul sistem, logai fizic la main - starea 3 (net multiuser) = mai muli utilizatori cu posibilitatea logrii din reea - starea 4 (admin defined) = stare definit de administratorul de sistem - starea 5 (shutdown) = starea 5 definete n sistemele Linux modul grafic. n UNIX tot shutdown. - starea 6 (no warning off) = shutdown fr mesaj de avertizare (n Linux: reboot) O nregistrare din tabela INITTAB este compus din patru cmpuri: - cmpul 1: cmpul etichet cu ajutorul cruia INIT-ul sorteaz ordinea de execuie a tabelului; - cmpul 2: o list ce conine strile n care va rula procesul n cauz - cmpul 3: cmpul aciune ce determin ce aciune va lua INIT-ul n raport cu procesul din list - once: se ruleaz comanda i se continu procesarea; la schimbarea runlevel-ului, dac comanda ruleaz n continuare, ea nu se va mai rencrca - respawn: comanda este rulat din nou la schimbarea runlevel-ului, iar dac s-a terminat o va rula din nou - powerfail: comanda este rulat imediat dup cderea curentului - powerwait: comanda este rulat imediat dup cderea curentului, dar se ateapt terminarea procesului n curs de execuie - sysinit: se ruleaz comanda nainte ca orice acces de la consol s se fi produs - cmpul 4: numele procesului Monitorizarea proceselor Monitorizarea proceselor este folosit att de administratorul sistemului UNIX ct i de utilizatorii simpli. Din acest motiv exist dou puncte de vedere: cel al utilizatorului i cel al administratorului. Utilizatorul dorete s-i urmreasc propriile programe, s tie ct memorie ocup, de ce s-au blocat sau dac s-au terminat. Administratorul dorete integritatea sistemului de operare i crearea unui mediu ct mai echitabil i de aceea, el trebuie s urmreasc daca n sistem exist programe cu prea multe procese-fiu sau programe zombie (care refuz s moar).

-13-

Comenzile folosite pentru gestionarea proceselor: $ $$ - returneaz PID-ul shell-ului $ $! - returneaz PID-ul ultimului proces lansat n background - apelat fr parametrii afieaz PID-ul, ID-ul de terminat, timpul de rulare $PS i numele scurt al comenzii Ex.: - determin somnul de 100 de secunde $SLEEP 100& $PS - afieaz urmtorul tabel PID 81 4022 4084 $PS L F S UID 10 S 203 01 R 203 Cmpul F: 01 02 04 10 20 Cmpul S: S R I Z TTY con con con TIME 0:01 0:00 0:00 COMMAND
SH SLEEP PS

- determin afiarea detaliat a raportului despre procesele din sistem PID PPID C PRI NI ADDR1 ADDR2 SZ WCHAN TTY TIME COMMAND CON 0:01 SH 81 1 0 30 20 00FFAD27 C00FFD30 68 00FF CON 0:00 PS 269 81 14 30 20 00000FDC 000FFAC 60 0AFF proces n memorie proces de tip sistem proces blocat fie datorit comenzii LOCK fie datorit ateptrii pentru o operaie I/O proces transferat (parial) pe disc n vederea swap-ului proces monitorizat de alt proces (n curs de debug) sleep proces adormit running proces ce ruleaz intermediate proces n stare intermediar, pe cale s ruleze, s fie blocat sau s se termine zombie procesul s-a terminat dar nu a fost eliminat din lista de rulare din diverse motive Dac la o apelare consecutiv a $PS procesul continu s fie zombie, atunci ntr-adevr este zombie

Cmpul UID: - afieaz identificatorul proprietarului procesului (User ID). la $PS F se afieaz username-ul n clar Cmpul PID: - afieaz Process ID Cmpul PPID: - afieaz identificatorul de proces al printelui procesului curent Cmpul C: - fr semnificaie pentru utilizatori obinuii, afieaz doar timpul de utilizare a procesorului (n procente) pentru planificarea procesului Cmpul PRI: - determin prioritatea procesului n lista de procese. O valoare mai mic indic o prioritate mai mare Cmpul NI: - folosit, n mic msur, la determinarea prioritii. Vine de la NICE (frumos) Cmpurile ADDR1 i ADDR2: - adresa primei pagini a procesului, putnd reprezenta i adresa de evacuare pe disc. Necesar la repararea aplicaiilor czute Cmpul SZ: - size (mrimea) reprezint dimensiunea n blocuri de 1 KB a imaginii principale a procesului -14-

Cmpul WCHAN: - adresa de ntrerupere a unui proces Cmpul TTY: - portul de la care a fost lansat procesul respectiv Cmpul TIME: - timpul scurs de la lansarea procesului Cmpul COMMAND: - comanda scurt a procesului. $PS F determin afiarea comenzii lungi (inclusiv PATH-ul) Ali parametrii ai comenzii $PS se refer la: $PS U - se refer la utilizator - se refer la portul de conectare $PS T - se refer la procese $PS EF $PS EL - se refer la procese - se refer la procese $PS E Oprirea unui proces cu ajutorul comenzii $KILL Dup partea de informare i pentru a avea un control asupra proceselor, UNIX ofer semnale de proces. Semnalele de proces reprezint adevrate ntreruperi cu funcia de a ntrerupe execuia normal a unor procese i de a cauza preluarea controlului de ctre o subrutin de ntrerupere care n cele mai multe cazuri afieaz un mesaj de eroare dup care se autoaborteaz. - determin transmiterea semnalului KILL la procesul cu PID-ul 81 $KILL -9 81 Eliminarea printelui unei serii de procese e important, dar nu suficient i conteaz mult modul n care procesele fiu sunt omorte. Terminarea proceselor se recomand a se face ntr-o list de jos n sus (de la fiu la printe). Cnd lansm comanda $KILL ctre un printe, acesta va trimite semnale de nchidere la rndul su ctre fii. Dac un semnal ajunge la un fiu deja mort, $KILL emite un mesaj de eroare dup care se autoaborteaz, lsnd perspectiva rmnerii de procese fiu nenchise (zombie). Comanda $WHO Dac $PS era o comand pentru determinarea unui instantaneu al sistemului de operare din punct de vedere al kernel-ului, $WHO este un instantaneu din punct de vedere al utilizatorului. n forma ei cea mai simpl, $WHO ne afieaz cine este logat la un moment dat pe un sistem UNIX, afindu-ne numele de utilizator, linia (portul) la care este conectat, momentul conectrii, timpul de mers n gol (idle time perioada n care utilizatorul nu a apsat nici o tast) i unele comentarii. - determin afiarea cu cap de tabel a urmtorului tabel $WHO HU NAME LINE TIME IDLE PID COMMENT ROOT CON 29 NOVEMBER 10:52 0:00 81 JUG TTY04 29 NOVEMBER 08:45 0:18 85 VAC TTY07 29 NOVEMBER 09:23 0:01 205 BOU TTY16 29 NOVEMBER 12:05 0:03 102 UNIX Daemons Un daemon este un program care ruleaz constant n fundal i care furnizeaz un serviciu sau o funcie util tuturor utilizatorilor. Lucrul cu imprimanta: Daemon-ul care se ocup cu imprimanta este LPSCHED. Trimiterea la imprimanta a unui fiier se realizeaz prin comanda $LP FIIER1. Dup $LP, fiierul de tiprit este nmnat daemon-ului LPSCHED care i confer o anumit prioritate i l introduce ntr-o coad de ateptare, determinnd tiprirea sa la o anumit imprimant. n UNIX, imprimantele primesc nume i pot fi grupate n clase care la rndul lor pot primi nume, cu condiia ca imprimantele s fie interschimbabile (acelai tip i situate n aceeai ncpere). -15-

Imprimanta INKJET 1

Imprimanta INKJET 2

Imprimanta INKJET 3

Imprimanta LASER 1

Imprimanta LASER 2

JETDOT n fiecare sistem UNIX exist o imprimant implicit. O clas echivaleaz pentru user cu o singur imprimant. Lucrul cu CROND: CROND este un daemon care permite definirea unui program care s ruleze fie periodic, fie la anumite momente de timp. Acest daemon este configurat cu ajutorul fiierelor pentru utilizatori obinuii /USR/SPOOL/CRON pentru administratorul de sistem /USR/LIB/CRON Comenzile $AT, $BATCH, $CRON permit lucrul cu acest daemon. Urmtoarele fiiere sunt de asemenea folosite de CROND: - comenzi prin care se genereaz scriptul executabil .PROTO .FIFO - o conduct prin care comenzile asociate CROND lanseaz ctre acesta semnale ce anun schimbrile aprute - dac exist i este gol, nimeni nu are voie s foloseasc comanda. Are .AT.ALLOW preceden asupra lui DENY. - determin utilizatorii care nu au voie s ruleze comanda. .AT.DENY .BATCH.ALLOW .BATCH.DENY .CRON.ALLOW .CRON.DENY LOG - lista tuturor activitilor CROND QUEUEDEFS - definirea cozilor = definiiile pentru $AT, $ BATCH i $CRON n care se pot defini numrul de joburi simultane la o comand, nivelul NICE al joburilor i timpul de ateptare ntre tentativele de rulare a dou joburi. Shell Scripturi Shell scriptul reprezint un program care conine un lot de comenzi de shell i care ne permite s evitm darea lor repetat de la tastatur i s crem programe i comenzi proprii. Acestea sunt fiiere de tip batch (lot). Controlul fluxului ntr-un shell script este realizat prin folosirea declaraiilor de shell. Declaraiile de shell spun acestuia s execute comenzile dintr-un script ntr-o ordine specific i numai dac anumite condiii sunt adevrate. ntregul repertoriu de declaraii shell constituie librria de programare a shell-ului. Declaraii: FOR - aceasta produce o repetare a unei secvene de comenzi. Unei variabile din cadrul declaraiei i se asociaz pe rnd o nou valoare la fiecare trecere prin bucla. DO - instruciunea care decide de unde ncepe o astfel de bucl DONE - marcajul de ncheiere a unei bucle WHILE - produce o execuie repetat a unei bucle atta timp ct o anumit condiie este adevrat IF/THEN/ELSE - produce o ramificare spre o comand sau spre o secven de comenzi bazat pe o anumit condiie CASE - produce o ramificaie la o secven de comanzi dintr-o serie de secvene de comenzi alternative printr-o selecie fcut de utilizator

-16-

Ex.: S se scrie un script care afieaz data curent, directorul curent i coninutul directorului curent. Informaii ajuttoare: - caractere escape: \n - linie nou \t - tab \c - continu pe aceeai linie - convertirea unui fiier la fiier executabil CHMOD 700 SCRIPT001 - aflarea directorului curent: comanda PWD
CLEAR ECHO \N\N\N ECHO DATA CURENTA ESTE\N DATE ECHO \N\NDIRECTORUL CURENT ESTE\N PWD ECHO \N\NACEASTA ESTE LISTA FISIERELOR LS

Comanda READ Aceast comand ne permite s furnizm parametrii programului nostru prin intermediul tastaturii. Parametrii furnizai sunt transmii prin intermediul unor variabile. Ex.: Program de redenumire a unui fiier
CLEAR ECHO \N\N ECHO INTRODUCETI NUMELE VECHI AL FISIERULUI \C READ OLD ECHO \N\NINTRODUCETI NUMELE NOU AL FISIERULUI \C READ NEW MOV $OLD $NEW ECHO \N\NFISIERUL $OLD REDENUMIT IN $NEW //ghilimelele

nu mpiedic expandarea variabilelor

Primirea i gestionarea parametrilor Parametrii din linia de comand sunt preluai n script prin intermediul variabilelor $1, $2,,$9. Astfel, primul parametru din linia de comand (imediat dup numele scriptului) este regsit n script ca $1, al doilea ca $2, i aa mai departe. Ex.: Program de verificare pentru primirea de parametrii (schimb directorul curent i afieaz coninutul noului director). Se apeleaz cu $NUME_SCRIPT CALE_CATRE_DIRECTOR CD $1
PWD LS

Ex.: Script de cutare a unui fiier dat n linia de comand. Se apeleaz cu $NUME_SCRIPT FISIER_DE_CAUTAT
CLEAR ECHO CAUT FISIERUL $1 ECHO \NDUCETI-VA LA CULCARE PANA GASESC FISIERUL ECHO FIND -NAME $1 PRINT >>/DEV/NULL //erorile nu sunt

afiate. Deoarece comanda FIND i ncepe cutarea de la rdcin, se tinde s se intre i n directoare n care utilizatorul nu are acces

-17-

Buclri
FOR ruleaz o secven de comenzi de un FOR VARIABILA IN ART1 ART2 ART3 DO COMANDA1 COMANDA2

numr fix de ori

DONE

Ex.: un joc de culori


FOR COLOR IN ROSU GALBEN VERDE ALBASTRU DO CLEAR ECHO $COLOR SLEEP 2 DONE WHILE CONDIIE [COMENZI] atta timp ct condiia este adevrat, execut comenzile. Cnd condiia nu mai este adevrat, se continu cu urmtoarea comand dup bucl. Dac condiia este tot timpul adevrat, atunci scriptul va cicla la infinit. FOR CONDIIE DO COMANDA1 COMANDA2

DONE

Ex.: un program de contorizare COUNT = 0 WHILE [$COUNT < 10]


DO CLEAR ECHO $COUNT COUNT = $COUNT + 1 SLEEP 2 DONE ECHO \N\NNUMARATOARE INCHEIATA

-18-

Ramificri
IF

Declaraia IF testeaz o condiie iniial, rulnd anumite comenzi n funcie de rezultatul evalurii condiiei respective.
IF CONDITIE THEN COMANDA1 COMANDA2

ELSE COMANDA3

FI

Ex.: un script de verificare dac un utilizator (al crui username a fost primit prin linia de comand) este logat sau nu. NAME = $1; IF WHO|GREP $NUME >/DEV/NULL
THEN ECHO UTILIZATORUL $NUME ESTE LOGAT ELSE ECHO UTILIZATORUL $NUME NU ESTE LOGAT FI CASE

Declaraia CASE permite o ramificare la o anumit secven dintr-o niruire de secvene pe baza unei selecii fcute de utilizator. Acelai efect s-ar fi obinut prin utilizarea multipl a declaraiei IF. CASE $VARIABILA IN VALOAREA1) COMANDA1 VALOAREA2) COMANDA2 VALOAREA3) COMANDA3 *) COMANDA_CAND_NICI_O_ALTA_VALOARE_NU_ESTE_CEA_BUNA
ESAC

Ex.: un script care genereaz un meniu i ateapt alegerea utilizatorului


CLEAR ECHO SELECTATI O OPTIUNE ECHO \N1) DIR-UL CURENT ECHO \N2) CINE ESTE LOGAT ECHO \N3) IESIRE ECHO \NOPTIUNEA DVS.: \C READ CHOICE

-19-

CASE $CHOICE IN

1)
CLEAR ECHO ALEGEREA 1 PWD

;; 2)
CLEAR ECHO ALEGEREA 2 WHO

;; 3)
CLEAR ECHO ALEGEREA 3 EXIT

;; *)
CLEAR ECHO ALEGERE INCORECTA!

;;
ESAC

-20-

Windows
Istoric Windows a fost dezvoltat n dou direcii, purtnd numele de cod Chicago (Win95, Win98, WinMe), i Cairo (WinNT, Win2k i WinXP). n noiembrie 1985 este lansat primul Windows, nu un OS ci un shell grafic peste DOS. Aceast lansare nu a generat profit pentru Microsoft n mai 1990 este lansat Windows 3.0. Aceste determin un anume grad de profit pentru Microsoft i, odat cu apariia puternicului procesor 386 pe pia i a adaptoarelor grafice puternice acesta ctig teren. Windows 3.0 aducea nou acele Unrecoverable Application Error, faimoasele BLUE SCREEN. Se pare c erau att de mndrii de ele, nct sistemul le afia destul de des Windows 3.1 ncearc s rezolve problema UAE-urilor. Microsoft i IBM au ncercat un parteneriat pentru dezvoltarea unui sistem de operare denumit OS/2, dar care nu a avut un prea mare succes de piaa, ba chiar a fost un fiasco. Prin urmare, Microsoft s-a retras din acest parteneriat. Descendentul lui Win3.1 era necesar s aib, n viziunea Microsoft, urmtoarele atribute: pstrarea compatibilitii cu DOS. DOS era limitat (monotask), si de aceea acest deziderat era greu de realizat. DOS-ul, cu accesul su n mod real la procesor, reprezenta o mare problem de compatibilitate. Sistemul de operare Win95 permite comutarea n mod real, cednd maina sistemului DOS i pstrnd doar un mic program de ncrcare care ulterior, la prsirea DOS, va rencrca Windows. De asemenea, se dorea pstrarea compatibilitii cu Win3.1. lucrul client-server (nu numai soft, dar i hard) n lucrul n reea un calculator poate juca dou roluri: cel de server i cel de client. Clientul este cel care ruleaz aplicaiile de tip desktop, n vreme ce serverul este computerul care menine baza de date a firmei, partajeaz resursele, asigur conectarea cu alte reele etc. Pentru fiecare dintre aceste clase de sisteme sunt necesare alte caracteristici: workstation-ul vrea un nalt nivel de exploatare, performane grafice i conectare uoar la reea, n vreme ce serverul trebuie s asigure performan, robustee i securitate. Prin urmare, pentru sistemele de tip client a fost dezvoltat Chicago (Win95 cu toi descendenii si), iar pentru server WinNT cu o capacitate (teoretic) nelimitat de lucru. iniiativa Plug n Play. Aceast iniiativ este mai larg dect Win95 i se refer la toate sistemele de operare. Pe scurt, PnP nseamn preluarea problemei de identificare a unui dispozitiv din computer de ctre sistemul de operare, asigurnd acestuia resursele necesare de funcionare (IRQ, port, DMA, driverul potrivit); din BIOS se pot modifica anumite setri legate de PnP, indiferent de arhitectur. configurare uoar. Fiierele de configurare ale Windows (AUTOEXEC.BAT, CONFIG.SYS, WIN.INI i SYSTEM.INI) sunt destul de greoaie n operare. Fiecare aplicaie instalat n Windows poate scrie n fiierele de iniializare sau poate crea propriile fiiere de iniializare, ceea ce conduce la conflicte. Astfel, s-a ajuns la configurarea cu ajutorul Registry-ului. Registry reprezint o baz de date ce conine toat informaia relativ la hardware, sistemul de operare i configurarea aplicaiilor. Deoarece toate accesele la Registry se fac prin intermediul API-ului de Windows (sau de ctre utilizator prin intermediul REGEDIT.EXE), folosirea acestei metode de setare duce rareori la conflicte. un nou shell Introducerea OLE2 (Object Linking and Embedding) permite un deziderat mai vechi, lucrul cu documente. Aceste este primul pas ntr-o iniiativ Microsoft privind crearea unei arhitecturi complet bazat pe documente. OLE2 permite shell-ului Windows: - Drag and Drop - Pot electronic SMTP - Nume lungi de fiiere (nu 8.3 ca la DOS) -21-

sistemul de operare s ofere view-ere View-erele sunt aplicaii care ofer posibilitatea utilizatorului s examineze coninutul unui fiier formatat de o alt aplicaie. lucrul n modul protejat Apariia 286 permite lucrul n modul protejat, dar Windows 3.1 era obligat permanent s comute ntre modul real i cel protejat. Modul protejat permite lucrul n multitasking. n modul protejat, apar driverele de dispozitiv independente, se pot realiza mai multe lucruri odat (tipriri spooler, programe n background, etc.). suport pentru aplicaiile pe 32 de bii Win32 a aprut pentru prima oar ca un add-on la Win3.1. WinnT este primul sistem de operare care ofer suport total pentru 32 de bii, n vreme ce Win95 rmne tributar aplicaiilor 16/32 bii. Apariia sistemului Win32 a permis programatorilor trei mari faciliti n programarea aplicaiilor Windows: - acces la cantiti mari de memorie (2GB) - un model mai simplu de acces la memorie (liniarizarea memoriei). Aplicaiile se scriu n Win32 ntr-un spaiu de memorie plat(liniar), ceea ce reprezint o simplificare a arhitecturii segmentate ale procesoarelor din familia IA32. - folosirea unui API consistent. n Win3.1 programatorul trebuia s-i aminteasc la scrierea unei aplicaii care parametrii ai unei funcii erau pe 16 i care erau pe 32 de bii, n vreme ce la Win32 toate funciile au parametrii pe 32 de bii. Alte beneficii aduse de Win32: - task-urile cu prioriti = OS-ul poate suspenda oricnd execuia unui task pentru a executa unul de o prioritate mai mare. Astfel, sistemul de operare poate asigura un rspuns mai uniform i evitarea pierderilor de date. - spaiul de adres separat i protejat = fiecare aplicaie ruleaz ntr-o zon de memorie separat. Aplicaiile nu i ncalc ntre ele aceast zon, i mai ales nici o aplicaie nu ncalc zona sistemului de operare. - suportul multithreading = fir-ul de execuie este un task de categorie uoar. Win32 permite multithreading-ul, furniznd un mod structurat de implementare a acestuia - suportul de reea Win95 are clieni pentru majoritatea reelelor existente: Novell, TCP/IP, Net-Beui, Benyan, precum i lucrul unificat cu reele eterogene. (IPX cu Novell, TCP/IP cu alte reele). Arhitectura procesorului Intel n interiorul fiecrui sistem de operare bate inima unui procesor. Win95 este scris pentru familia de procesoare IA32 (Intel Architecture 32 bits). Deoarece WinNT este un sistem de operare pentru servere, el funcioneaz att pe maini Intel, ct i pe MIPS, Alpha, R400, PowerPC, etc. Pentru aplicaii DOS, WinNT conine un emulator pentru lucrul pe 16 bii. Deoarece Win95 a fost gndit pentru pstrarea compatibilitii 100% cu aplicaiile Win3.1 i DOS, el i-a luat adio de la orice fel de portabilitate. 8086 - procesorul iniial pentru DOS, lucreaz numai n modul real 80286 - introduce lucrul protejat i mediul multitasking 80386 - principalul procesor ce ofer suport pentru Win95. Din punct de vedere al sistemului de operare, 386, 486 i Pentium pot fi considerate ca identice, diferenele dintre ele constnd n sporirea vitezei de lucru prin diferite metode i artificii. Intel 8086: Mod real de adresare a memoriei Adresarea segmentat cu un registru de adrese pe 20 de bii Acces la 1MB RAM (16 segmente a 64KB), din care: 384KB maparea dispozitivelor hardware 640KB RAM disponibil pentru OS

-22-

Adresa de baz segment 16 bii: 1 2 3 4

Adresa offset segment 16 bii: 4 3 2 1

deplasare la paragraf mascare 1 2 3 4 0 1 adresa fizic (nsumare) 4 6 8 5

Intel 80286: (16 MB RAM maxim adresabili) - mod de adresare real i protejat, cu posibilitatea de comutare de task-uri a fost neinspirat deoarece la trecerea din modul real n cel protejat, computerul trebuia reboot-at. Modul protejat pune la dispoziia sistemului de operare multitasking-ul. n modul protejat, registrul de segmente este folosit pentru accesarea unei zone de memorie denumit descriptor de 8 bytes lungime. n fiecare descriptor se gsete informaia care duce la construirea adresei fizice. Registrul de segment cu un selector pe 13 bii 1 2 3 4 0 Deplasare 1 2 3 4 0

6 5 4 3 2 1

6 1 2 3 4 5 6

Adresa fizic (nsumare) Descriptorul conine n rest informaii legate de solicitrile de protecie a memoriei. Sistemul de operare seteaz toi descriptorii unui program ntr-o zon contigu de memorie care constituie tabela Local Descriptor Table. Sistemul de operare seteaz de asemenea i tabela Global Descriptor Table pentru a-i aloca lui nsui memorie i pentru a permite unor programe accesarea unei aceleiai zone de memorie. LDTR Local Descriptor Table Register GDTR Global Descriptor Table Register Conin baza tabelelor pentru programul care tocmai se execut. Dac sistemul de operare comut un task, el va rescrie registrul LDTR. n general, GDTR rmne neschimbat. Cele dou registre nu pot fi setate dect de sistemul de operare prin intermediul unor instruciuni privilegiate. Dou aspecte ale modului protejat: - introduce noiunea de protecie a memoriei, iar sistemul de operare poate fixa un mediu de lucru n care mai multe programe pot rula concurent n zone de memorie separate proprii. - arhitectura d posibilitatea accesului indirect la memorie prin intermediul LDT i GDT, permind sistemului de operare s utilizeze orice zon din RAM ca un segment. Segmentele unui program nu este necesar s fie contigue, ci pot fi chiar i de dimensiuni diferite. Dac un program dorete, el poate accesa toat memoria descris de LDT-ul propriu. Programul nu tie i nu trebuie s poarte grija locului exact din memoria fizic n care se afl segmentele.

-23-

Intel 80386: (4 GB RAM maxim adresabili) Se dezvolt din 286 pe dou ci distincte: - intern, totul crete de la 16 la 32 de bii (rezult 232 = 4 GB RAM accesibili). 80386 poate rula n mod virtual 8086, 286 Protejat i pe 32 de bii - mbuntete schema proteciei memoriei astfel nct aceasta s poat fi privit linear i se pot crea sisteme de operare cu o schem complet de memorie virtual paginat. Din aceast cauz, tabela descriptorilor pe 32 de bii trebuie s treac prin nc un nivel de interpretare nainte de utilizarea ei ca adres actual de memorie. Descriptorul A adresa de baz biii 0-15 limita biii 0-15 Acest tip de adresare este utilizat n modul virtual 8086. n modul protejat 286 i n adresarea pe 32 de bii este ignorat. Descriptorul B adresa G B/D B/D 0 0 limita de baz 16-19 24-31 P DPL DPL S TYPE TYPE TYPE TYPE A adresa de baz 16-23

Pentru modul 286 protejat se folosesc descriptorii A i adresele de baz 16-23 de la descriptorul B. Pentru modul de adresare pe 32 de bii se folosete descriptorul A, precum i adresele de baz din descriptorul B G granularitatea Limita de adresare este de 1 MB, astfel nct granularitatea definete: G = 0 adresare de maxim 1 MB, G = 1 adresare a 1 GPagin = 1.000.000 4 KB = 4 GB B/D determin dac segmentul este de date sau de cod, precum i caracteristica de dimensiune a segmentului D = 0 cod 286 D = 1 cod 386 B = 0 segment < 64KB B = 1 segment > 64KB P present, arat dac segmentul este prezent n memoria fizic sau pe disc: P = 0 segmentul nu se afl n memorie; se genereaz o ntrerupere n urma creia segmentul va fi adus de pe disc P = 1 segmentul se afl n RAM DPL Descriptor Priviledge Level determin nivelul de privilegiu al programului Acest descriptor este folosit mai trziu de sistemul de operare pentru sistemul de protecie. Windows nu folosete dect dou din aceste nivele: nivelul 0 (pentru sistemul de operare) i nivelul 3 (pentru programele de aplicaii). Programele de Ring3 nu au privilegiul de a executa instruciuni de Ring0 (nu se pot porni / referi / opri ntreruperi). S segment S = 0 este vorba de altceva n afar de un segment de memorie (Ex.: o structur caracteristic unei ntreruperi) S = 1 este vorba de un segment de memorie TYPE o construcie de trei bii ce ofer opt situaii posibile. Acest cmp spune sistemului de informaie ce tip de informaie este referit, n scopul implementrii mecanismelor de protecie. read-only read-write system A access indic faptul c segmentul respectiv a fost cel puin odat referit. Orice referire a segmentului face ca bitul s fie setat. Managerul de memorie utilizeaz bitul A pentru schema de memorie virtual. Un segment care nu este niciodat accesat e un bun candidat pentru evacuarea pe disc. -24-

Memoria virtual Memoria virtual const din RAM i un fiier (partiie n cazul UNIX) pe HDD. Acest fiier se poate dezvolta att ct i permite spaiul de pe partiie (spre deosebire de partiia de swap de la UNIX, care avea o dimensiune fix). Sistemul de operare gestioneaz ntreaga memorie disponibil, fcnd n permanen schimb de date sau cod ntre RAM i fiierul de swap. Cnd sistemul de operare evacueaz pe disc un segment de memorie, el va terge bitul de prezen. Cnd aplicaia ncearc s foloseasc un segment care nu este n memoria principal, CPU va genera ntreruperea NOT PRESENT ce ntiineaz sistemul de operare despre absena unui segment. OS-ul va ncrca segmentul lips n memorie ntr-o zon liber, dup care va restarta aplicaia ntrerupt, totul desfurndu-se ntr-un mod transparent pentru aplicaie. Sistemul de operare rezolv toate problemele legate de swapping i de memoria virtual. Un manager al memoriei virtuale slab duce la o scdere semnificativ a vitezei de lucru a sistemului; procesoarele de la 386 ncoace pun la dispoziie faciliti ce permit implementarea unei scheme de memorie virtual paginat. O pagin de memorie are dimensiunea standard la procesoarele Intel de 4 KB; fiecare segment poate avea una sau mai multe asemenea pagini. La pornirea sistemului de operare Windows, procesorul este comutat n modul protejat, fiind astfel posibile operaiile paginate. Odat setat paginarea, ea va rmne activ pn la oprirea sistemului. La validarea paginrii, cei 32 de bii de adres din descriptor primesc nc un nivel de interpretare: biii 31-22 index ntr-un director de tabele paginate (maxim 1024 de intrri) CR3 biii 21-12 index n tabela pagin biii 11-0 deplasarea n pagin

baza paginii Adresa fizic pe 32 de bii

Figura ilustreaz mprirea celor 32 de bii ntr-un descriptor de trei pri: biii 31-22: index ntr-un director de tabele biii 21-12: index ntr-o astfel de tabel de pagin biii 11-0: deplasarea n pagin (pentru a ajunge la byte-ul dorit) Sistemul de operare ancoreaz aceast structur de adresare prin depunerea adresei de baz a directorului de tabelele pagin al programului curent ntr-un registru special denumit CR3. Cnd sistemul de operare comut ntre task-uri, el va rencrca acest CR3. Dei pare laborios sistemul, el este transparent pentru utilizator i rapid: tehnicile de cache asigur accesul la intrrile din tabela paginat frecvent utilizate fr a fi nevoie s se fac referire la memoria principal mai nceat. Ca s adreseze un task de dimensiuni considerabile, sistemul de operare ar fi nevoit s ocupe pn la 4 MB RAM. Pentru a evita aceast ocupare a memoriei, exist posibilitatea stocrii tabelelor de pagin pe HDD ntrun fiier de paginare

-25-

intrare n directorul tabele de pagini i n tabela de pagin biii 31-12 (20 bii) indexul tabelei de pagin D dirty

D A

U/S R/W P

Acest flag este setat ori de cte ori un program modific coninutul unei pagini de memorie. Dac dorete s ndeprteze pagina din RAM (s o evacueze pe disc), sistemul de operare va salva modificrile. n caz contrar, versiunea de pe disc rmne nemodificat (n cazul n care exist) A - accesed Orice referire la o pagin din RAM face ca programul s seteze bitul. Managerul de memorie virtual poate utiliza acest flag pentru a estima dac este bine-venit mutarea paginii din RAM pe disc. Pentru a determina ordinea de evacuare pe disc a paginilor, managerul de memorie virtual al Windows-ului folosete tehnica LRU (Least Recently Used). Cu ct o pagin este mai des accesat, ansa ei de a fi evacuat pe disc este mai mic. U/S User / Supervisor U/S = 0 pagina respectiv este o pagin a sistemului de operare. Nici un program utilizator nu are dreptul s o acceseze U/S = 1 pagina respectiv este o pagin a unui program. n momentul nclcrii dreptului de acces la pagin, CPU anun sistemului de operare un General Protection Fault, acesta trebuind s analizeze cauzele i s ia msurile corespunztoare R/W Read/Write Programul care a cptat accesul la o pagin de memorie o poate doar citi, sau o poate i modifica R/W = 0 pagina poate fi doar citit (read only) R/W = 1 pagina poate fi citit i modificat P Present Arat dac o pagin este n RAM sau pe disc. P = 0 pagina nu este prezent n RAM, ci este pe disc P = 1 pagina este n RAM

Mixarea programelor de 16 bii cu programele de 32 de bii Problema care trebuie rezolvat este aceea de a permite codului pe 32 de bii s apeleze subrutine scrise pe 16 bii, i de a permite rutinelor pe 16 bii s apeleze rutine pe 32 de bii. Pentru a media ntre cele dou modele, Microsoft a dezvoltat tehnica denumit thunking. Thunk = o scurt secven de cod responsabil de convertirea adreselor de memorie dintr-un format n altul. Operarea eficient a thunk-urilor este critic pentru funcionarea eficient a Windows-ului n care sunt acceptate programe pe 32 i 16 bii. Ex.: o aplicaie Win32 face apel ctre o funcie din biblioteca USER16. Nucleul de Windows accept cererea i parametrii pe 32 de bii, dup care apeleaz un asemenea thunk, care translateaz parametrii i adresele pe 16 bii, apoi apeleaz adevrata rutin USER16. Sistemul de protecie Orice sistem de operare trebuie s ofere sisteme de protecie pentru 1. Datele utilizatorului O prim problem este rezervarea numai pentru sistemul de operare a dreptului de a seta tabele de pagini ce descriu zone exacte de memorie la care un program poate avea acces. Flag-ul R/W din intrarea n tabela de pagin mpiedic un program s modifice o pagin read-only. Flag-ul U/S permite sistemului de operare s i protejeze memoria proprie de orice acces a unei aplicaii de utilizator. 2. Protecia ntre programele concurente Oricnd o aplicaie vrea s acceseze o zon de memorie care nu este n zona de memorie alocat, CPU genereaz o ntrerupere i nmneaz sistemului de operare informaii despre problem. Exist situaii cnd referirea dincolo de spaiul de memorie a unui task s fie legal (Ex.: atunci cnd un apel de funcie mpinge pe -26-

stiv parametrii care depesc memoria alocat aplicaiei. n acest caz sistemul de operare este obligat s mai aloce memorie aplicaiei, dup care aceasta este repornit). n alte cazuri, un mesaj de referire invalid a memoriei apare pentru a indica o problem software, spre exemplu o aplicaie care vrea s acceseze ce nu are dreptul s acceseze. n acest caz, sistemul de operare nu are nimic altceva de fcut dect s ncerce nchiderea aplicaiei ce a provocat aceast referin. 3. Protecia sistemului de operare CPU 386 este pus n situaii n care acioneaz ca un comutator de task-uri, mnuitor de ntreruperi i alte asemenea solicitri ale gestiunii de sistem. Nucleul Windows trebuie s fie singurul software din computer care s implementeze aceste operaii. 386 furnizeaz pentru cererile de protecie patru nivele (inele). Pe Ring0 un software poate s fac ce vrea: s schimbe tabele de pagini, s comute modul procesorului, s porneasc/opreasc paginarea, s opreasc procesorul etc. Programele de Ring3 ce ncearc s execute instruciuni privilegiate (comutare de task, gestionarea de ntreruperi, gestionarea sistemului etc.) oblig procesorul la generarea unei ntreruperi; sistemul de operare are posibilitatea de a analiza i de a ncheia procesul care a produs aceast ntrerupere. Pentru a putea accesa funcii privilegiate trebuie s existe un mod controlat prin care CPU s comute ntre nivele diferite de privilegiu: acest lucru se poate face printr-o poart de intrare specializat ntr-o tabel de descriptori ce permite transferuri controlate ntre inele. Sunt folosite patru pori pentru aceste operaii: CALL - pentru apeluri de rutine de alte privilegii INTERUPT - pentru gestionarea de ntreruperi TASK - pentru comutarea de task-uri TRAP - pentru debugging-ul de aplicaii Cnd o aplicaie trece printr-o asemenea poart ctre Ring0, se genereaz noi indicatori de instruciune i de stiv, care sunt apoi folosite pentru manipularea datelor sensibile. Rentoarcerea n programul apelator reface contextul n care a fost pornit programul. Deoarece sistemul de operare este cel care seteaz iniial porile, acesta vor controla ce se ntmpl n timpul acestor tranzacii, garantnd integritatea sistemului. Protecia de dispozitive Solicitarea proteciei de dispozitive apare: - la partajarea corect a unei resurse (HDD) - pentru arbitrarea ncercrii de a utiliza o resurs nepartajabil (un port COM) Accesul de nivel jos (low-level) = la nivel hard, un program controleaz toate operaiile de intrare-ieire prin manipularea porilor I/O i a solicitrilor de ntrerupere (IRQ = Interrupt ReQuest); Pentru fiecare resurs, sistemul trebuie s aloce o adres de I/O i un IRQ unice (n general, deoarece se ntmpl ca dou sau mai multe dispozitive s mpart acelai IRQ). ntr-un sistem compatibil IBM PC exist 65.566 de pori (adrese de port pe 16 bii). Pentru a lucra cu un dispozitiv, este suficient ca o aplicaie s scrie date ntr-un port i acestea vor fi transmise dispozitivului asociat portului. n acelai mod, pentru a citi date de la un dispozitiv, se citesc date din portul su asociat (instruciunile ASM specifice sunt out i in) n general, un dispozitiv iniiaz o ntrerupere ori de cte ori are nevoie de atenie. Microprocesorul i sistemul de operare apeleaz un driver care tie s rezolve toate problemele legate de comunicarea cu dispozitivul. Sistemul de operare este responsabil de instalarea i configurarea acestor rutine ale driverului. Accesul de nivel nalt (high-level) = apare atunci cnd o aplicaie solicit accesul la un dispozitiv printr-o cerere de deschidere a dispozitivului adresat sistemului de operare. Dac cererea are succes, aplicaia va putea apoi s citeasc/scrie pe dispozitiv. ntr-un final, aplicaia va renuna la accesul la dispozitiv tot printr-o cerere adresat sistemului de operare. Cererile prin care o aplicaie solicit accesul la un dispozitiv se realizeaz prin intermediul API-ului Windows. Sistemul de operare valideaz apelurile API i le nmneaz driverului specific de dispozitiv, asistnd gestiunea erorilor i planificarea taskurilor. -27-

Utilizarea facilitilor oferite de microprocesor pentru protecia de dispozitiv Aplicaiile Windows ruleaz pe Ring3 i nu au permisiunea de a accesa vreun dispozitiv n mod direct. Accesul acestor aplicaii se face strict prin API-urile de sistem. Dac o aplicaie Windows ncearc accesarea direct a unui device, microprocesorul semnaleaz o violare de protecie sistemului de operare i acesta va fora terminarea programului n cauz. Windows 9x, pentru a permite vechilor aplicaii s acceseze direct dispozitivele seteaz bitmap-uri coninnd permisiunile de acces I/O pentru fiecare main virtual. Acest bitmap este o matrice de flag-uri, cte unul pentru fiecare port I/O al CPU i care specific dac aplicaie poate accesa n mod direct un port. Dac nici un acces nu este validat, microprocesorul va semnala o violare de protecie ori de cte ori aplicaie ncearc s refere n mod direct portul. Pentru aplicaiile DOS, un acces direct este ns un lucru normal, deci nu constituie o eroare de program aa cum este pentru aplicaiile Windows. Ca o aplicaie DOS s ruleze cum trebuie, sistemul de operare trebuie s-i permit accesul direct la dispozitiv. Tratamentul de gestiune a mainii virtuale i controlul dispozitivelor poart numele de virtualizare de dispozitiv, un element cheie al Windows 9x. De remarcat este c microprocesorul furnizeaz facilitatea hardware de protecie selectiv a porturilor prin tratare individual a programelor i cu informarea sistemului de operare ori de cte ori apare un acces direct la ele. Sistemul de baz Maini virtuale diferite O main virtual Windows (MV) = un context de executare a unei aplicaii. Un astfel de context MV include mapa de memorie adresabil a aplicaiei i coninuturile registrelor hardware, precum i resursele alocate aplicaiei. Pe o main Windows exist dou tipuri de maini virtuale: - o main virtual de sistem n care ruleaz aplicaiile Windows(Win3.1, Win32) - o serie de maini virtuale DOS, n fiecare rulnd o singur aplicaie DOS. MV de sistem ruleaz n mod permanent n modul protejat. La Win3.1 sistemul bascula permanent ntre modul protejat i cel real. La iniializarea sistemului de calcul, sistemul de operare seteaz maina virtual de sistem i pregtete contextul global pentru toate mainile virtuale DOS. Maina virtual sistem Contextul pentru maina virtual sistem este un mediu n mod protejat n care ruleaz toate aplicaiile Windows mpreun cu componentele majore ale subsistemului grafic. Toate aplicaiile din maina virtual sistem solicit diferite operaii sistemului de operare prin intermediul API-urilor, care sunt referite prin nume spre deosebire de solicitarea funciilor DOS prin parametrii ntreruperilor de servicii DOS. Legtura dintre o aplicaie i funciile Windows se face prin ncrcarea prin legare dinamic (Dynamic Linking) Modele multitasking Win3.1 pune la baza planificrii proceselor tehnica multitasking cooperativ: - fiecare task primete o cuant de timp Round-Robin Windows 95 poate folosi un algoritm de planificare cu ntreruperi (multitasking prioritar). Windows este un sistem de operare condus prin evenimente (mesaje care sunt transmise aplicaiei sau sistemului de operare). Sub Win3.1, sistemul utilizeaz o singur coad de mesaje n care pstreaz toate mesajele pentru toate aplicaiile; dac o aplicaie rateaz prelucrarea unui mesaj din coad, se va produce o cretere a cozii care va mpinge sistemul ctre blocare. n sistemul Win32, fiecare aplicaie are propria sa coad de mesaje. Blocarea unei cozi duce doar la blocarea aplicaiei n cauz. Planificatorul = componenta sistemului de operare care lucreaz cu timpi i evenimente Un proces Win32 primete o cuant de timp ce determin ct timp procesul respectiv poate deine microprocesorul. La sfritul acestei cuante, planificatorul decide dac va nmna procesorul unui al proces. Evenimentele sunt cele ce influeneaz deciziile planificatorului, un click pe o fereastr putnd duce la nmnarea procesorului ctre procesul ce deine fereastra n care s-a dat click. Durata cuantei este implicat i n -28-

calculul prioritii: planificatorul recalculeaz n mod frecvent prioritile proceselor din main, crend un mediu echitabil de lucru. WinNT are numai multitasking prioritar, n vreme ce familia Win9x utilizeaz ambele sisteme pentru compatibilitate (multitasking prioritar i multitasking cooperativ). Procesul, n virtutea multitasking-ului cooperativ, trebuie s returneze procesorului microprocesorul dup trecerea unei anumite perioade de timp. = secven de instruciuni executate de mai multe procese care pentru un motiv sau altul nu trebuie ntrerupte naintea terminrii execuiei Ex.: La alocarea de memorie, procesul nu trebuie ntrerupt, altfel rezultatele ar fi dezastruoase. Cnd un proces intr ntr-o seciune critic, sistemul de operare garanteaz c procesul nu va iei din seciunea critic nainte ca orice alt proces s poat intra n ea. Gestionarul seciunii critice asigur c un proces nu va intra n aceast seciune critic atta vreme ct un alt proces deja ntr-o asemenea seciune critic nu o prsete. Gestionarul mainii virtuale suport de mai mult vreme MUTEX (Mutual EXclusion) n lucrul cu driveri hardware. Windows suport funcii similare gestiunii de seciune critic la nivelul API-ului. MUTEX-urile = semafoare, utilizate pentru controlul intrrilor i ieirilor n/din seciuni critice Module = o colecie de cod i alte resurse (bitmap-uri, string-uri, etc.) nrudite prezente n memorie. n mod obinuit, o asemenea colecie va forma singur un program sau un DLL. Windows ntreine o structur de date (baza de date pentru module)ce identific toate modulele active n mod curent n sistemul de operare. Baza de date de module descrie o colecie esenial static spre deosebire de colecia dinamic referit de baza de date pentru procese, Pstrarea unei nregistrri a modulelor ncrcate la momentul actual e important pentru ca o asemenea nregistrare constituie baza partajrii resurselor Windows. DLL-ul se afl n memorie, la o nou solicitare se creeaz o nou referin. n lucru, Windows pstreaz i actualizeaz controlul de utilizare pentru orice resurs (incrementat la fiecare utilizare, decrementat la abandonarea resursei). O resurs care are acest contor pe 0 este marcat ca fiind posibil de ndeprtat din RAM. Suportul API Windows pune la dispoziia programatorilor un set de API (Application Programming Interface) prin trei componente majore: - kernel - user - GDI Kernel ncorporeaz marea majoritate a funciilor de sistem (alocare memorie, gestiunea proceselor). User se ocup de funciile legate de ferestre: crearea unei ferestre, mutarea, manipularea mesajelor, executarea ferestrelor de dialog. GDI (Graphic Device Interface) se ocup cu desenarea de linii, scalarea fonturilor, gestiunea culorilor i de imprimare. Orice aplicaie Windows partajeaz cod din aceste componente, fiecare avnd o implementare pe 16 sau pe 32 de bii prezent permanent n memorie. Pentru utilizator nu este necesar s aib cunotine de aceast existen dual. Kernel, User i GDI sunt exemple de biblioteci legate dinamic (DLL-uri). Fiecare funcie din API este apelat prin nume i nu prin intermediul identificatorului de funcii aa cum era cazul la DOS. Legarea dinamic Cnd se execut compilarea i linkeditarea pentru un program, linkeditorul va scana biblioteci de cod obiect i de date i va copia cele necesare n fiierul executabil al aplicaiei. Editarea de legturi pentru programele Windows se face n doi pai: - editarea de legturi clasic - ncrcarea programului este lsat n sarcina sistemului de operare Linkeditorul mai scaneaz biblioteci copiind cod, dar totodat va parcurge i biblioteci ce conin numai referine spre funcii ce nu pot fi complet rezolvate pn la ncrcarea de ctre sistemul de operare a programului respectiv. Aceste biblioteci se numesc import libraries (biblioteci de import) i toate conin doar referine de -29Seciuni critice O seciune critic

definire pentru fiecare funcie API Windows. n final, linkeditorul, dup scanarea bibliotecilor de import, va include n fiierul executabil un nume al modulului int i un punct numeric de intrare. Ex.: MessageBox() -> User::1 LineTo() -> GDI::15 Orice modul care satisface referinele prin editarea de legturi dinamic este un DLL. Fiecare DLL declar un set de puncte de intrare numite exporturi ce vor satisface referinele externe. Windows nsui este o colecie de DLL-uri. Toate driverele de dispozitiv sunt obligate s declare cel puin un set standard de astfel de puncte de intrare, iar numele lor este standardizat. Acest lucru simplific ataarea de dispozitive, nefiind necesar recompilarea kernel-ului. Suport din sistemul de baz Subsistemul Windows trebuie s apeleze servicii din sistemul de baz. Aceasta se poate realiza prin o cerere explicit (deschiderea unui fiier) sau prin una implicit (generarea unui page fault, astfel nct sa oblige sistemul de operare s ncarce paginile lips n RAM). O tranzacie la codul sistemului de operare n sistemul de baz implic o tranziie ntre nivelele de privilegiu ale procesorului. O main virtual sistem ruleaz pe Ring3, iar sistemul de baz pe Ring0. Codul de baz conine VxD-uri (Virtual Anything Driver Driver de Dispozitiv Virtual). VxD = un modul pe 32 de ii ce ruleaz n mod protejat la cel mai privilegiat nivel al procesorului, Ring0. Unele VxD-uri coopereaz cu dispozitive hardware, n vreme ce altele ofer funcionaliti ale sistemului de operare fr a avea legturi directe cu dispozitivele. Gestiunea de memorie n Windows, gestiunea memoriei are loc pe dou nivele: - un nivel vzut de programatorul aplicaiei - un nivel vzut de sistemul de operare, total diferit de cel al programatorului Spaiul de memorie virtual a aplicaiei Spaiul de adres privat = aparine strict aplicaiei, dar dei este privat, nu este i protejat Spaiul de adres partajat = alocarea de memorie pentru operaiile de dialog cu alte task-uri Spaiul de adresa sistem = locaia n care se ncarc DLL-urile de sistem 4 GB Solicitrile de memorie pot aprea la rulare din dou motive: - aplicaia poate solicita memorie explicit, conform prevederilor Spaiul de adres sistem 3 GB algoritmului care o definete 3 GB - aplicaia poate solicita memorie implicit, alocarea de memorie fiind un efect secundar al alocrii unei alte resurse (Ex.: cnd aplicaia creaz o Spaiul de adres partajabil nou fereastr) 2 GB 2 GB Spaiul de adres privat 0 GB Alocarea HEAP Heap (gramad)

= descrie o zon de memorie utilizat pentru a satisface cererile de alocare de memorie a pentru aplicaie. Windows 3.1 utiliza un heap local i unul global. Cel local reprezenta o zon de memorie n spaiul de adres a aplicaiei, iar cel global era o zon de memorie a sistemului de operare. Cnd o aplicaie solicita memorie local, aceast cerere era satisfcut din heap-ul local. Cererile de memorie global erau rezolvate din fondul comun de memorie pentru toate aplicaiile. Astfel, depirea heap-ului local (2 GB) duce la afectarea profund a unei singure aplicaii, n vreme ce depirea celui global duce la repercusiuni n ntreg sistemul de operare. Prezena celor dou tipuri de heap n Win3.1 ducea la necesitatea existenei unor selectoare de memorie, astfel nct modelul aplicaiei elimin folosirea celor dou heap-uri i se va utiliza un singur heap.

-30-

Gestionarea memoriei de aplicaii n Win9x API-ul Win32 introduce o serie de noi funcii pentru gestionarea memoriei de aplicaii: 1. Win32 furnizeaz funcii ce ofer heap-uri private prin care o aplicaie poate rezerva o parte din memoria aflat n propriul spaiu de memorie. Aplicaia poate crea i utiliza cte heap-uri dorete i poate ndruma sistemul de operare s satisfac cererile de alocare de memorie suplimentar dintr-un heap privat specific. 2. Win32 furnizeaz funcii care permit unei aplicaii s rezerve o zon special din propriul spaiu de memorie ce odat rezervat nu va mai fi folosit de alte solicitri de alocare dinamic de memorie. Ex.: aplicaii multithreading folosesc pointeri pe 32 de bii pentru a furniza thread-urilor aceluiai proces un mijloc de comunicare prin partajarea aceleiai zone de memorie. 3. Fiierele mapate ca spaiu de memorie permit aplicaiilor s partajeze date. O aplicaie poate deschide un fiier i mapa o zon din el la spaiul su de memorie virtual. O alt aplicaie sau un alt thread din cadrul aceluiai proces poate deschide acelai fiier i s-l mapeze n spaiul ei de memorie virtual. Mapa de memorie la Win95 4 GB DLL-urile de sistem 3 GB 3 GB Aplicaiile Win16 DLL-urile de aplicaie 2 GB 2 GB Aplicaiile Win32 4 MB 4 MB Neutilizat 1 MB 1 MB Maini virtuale DOS 0 MB NTFS FAT ISO 9660 Reea Ring3 Ring0 Gestionar de fiiere Gestionar de fiiere instalabile Gestionar maini virtuale Servicii: - alocare memorie - planificator - VxD-uri - DPMI - drivere caracter Spaiu partajat Kernel, User, GDI Aplicaie Win32 Aplicaie Win16 Main virtual DOS Aplicaia #1 Main virtual DOS Aplicaia #2

Subsistemul I/O pentru blocuri

Spaiul de memorie ntre 1 MB i 4 MB ar putea fi utilizat, dar translatarea adreselor n acest spaiu de memorie necesit un efort ce nu se justific. Planificarea mainilor virtuale (a proceselor) Planificarea proceselor n Windows este strns legat de gestionarea mainilor virtuale. Windows introduce conceptul de thread unitatea de baz n planificarea Windows. Thread-ul = un mod de a executa un proces = poate fi creat de orice aplicaie sau VxD = are o stiv i un context de lucru proprii = partajeaz memoria procesului printe = orice fir poate fi unul dintre mai multe fire create de acelai proces Thread = light weight task, are un necesar minim de memorie, partajnd aceeai memorie cu printele

-31-

Cnd Windows ncarc o aplicaie se creeaz structura de date a procesului asociat, iar la nceput sistemul de operare creaz procesul ca avnd un singur fir de execuie (majoritatea aplicaiilor mici nu au nevoie de mai mult). Serviciile legate de thread-uri sunt disponibile numai aplicaiilor Win32 i VxD-urilor; mainile virtuale DOS i vechile aplicaii Win16 nu pot apela API-urile de threading. Win16 utilizeaz un singur fir de execuie i multitasking-ul cooperativ, n vreme ce aplicaiile Win32 pot genera mai multe fire, fiecare dintre acestea fiind planificat in mod prioritar.

-32-

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