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

bin

etc

dev

lib

lost+found

tmp

bin

usr

lib

unix

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

10

dimensiune
n bytes

11

12

adresele
fizice ale
fiierului

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:
$ DATE
afieaz data curent
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
DATE: NOT FOUND!
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.
$WHO
afieaz toi utilizatorii autentificai n acel moment
$WHO H
afieaz aceleai informaii ca mai sus cu o scurta descriere a coloanelor
$MAN WHO
afieaz manualul de utilizare a programului tastat ca argument
$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
$DIFF FISIER1 FISIER2
calculeaz diferenele ntre cele dou fiiere primite ca argument
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
$ECHO HELLO > /DEV/TTY1
scrie pe portul serial 1 irul de caractere Hello
$ECHO HELLO > /DEV/MEM
scrie n memoria utilizator irul de caractere Hello
$ECHO HELLO > /DEV/KMEM
scrie n memoria sistem irul de caractere Hello
$ECHO HELLO > /DEV/RHD0
scrie pe hard discul caracter irul de caractere Hello
$ECHO HELLO > /DEV/HD0B
scrie pe hard discul block irul de caractere Hello
$ECHO HELLO > /DEV/FD0
scrie pe dischet irul de caractere Hello
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
$ECHO *
afieaz toate fiierele i directoarele din directorul curent
$ECHO *
afieaz * pe monitor
$ECHO *
afieaz * pe monitor
$ECHO `*`
ncearc s execute primul fiier din director. Dac nu este executabil se
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
$ECHO $NUME
afieaz pe ecran SURDU VASILESCU
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
$CD /USR/JOE;LS
schimb directorul curent i afieaz coninutul directorului
nou
c) caracterul \ duce la pierderea de semnificaii, anulnd nelesul special al unui caracter
$ECHO ;
nu afieaz nimic
$ECHO \;
afieaz ;
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
$CAT BIBI | LP
determin listarea la imprimant (LP) a fiierului BIBI
-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
$LS > CONTINUT.DIR
determin scrierea n fiierul CONTINUT.DIR a coninutului
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
$LS > CONTINUT.DIR
determin scrierea n fiierul CONTINUT.DIR a coninutului
directorului curent. Dac fiierul exist, va scrie la sfritul
su
c) operatorul < determin redirectarea intrrii comenzii nspre fiierul precizat
$CAT < BIBI.TEXT
determin afiarea pe ecran a fiierului 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
$ECHO $NUME
- afieaz MIHAI
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:-CUVNT}

- dac variabila este nedefinit sau nul, se evalueaz


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

${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

VARIABIL

${VARIABIL:+CUVNT}

Exemple:
$X = HELLO
$echo $X
$ECHO {X:-GOODBYE}
$ECHO {X:=GOODBYE}

- 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

$ECHO $X
$ECHO {X:-GOODBYE}
$ECHO $X
$ECHO {X:=GOODBYE}
$ECHO $X

- 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

$PATH =
$ECHO ${PATH:?NU AM GSIT PATH!}

- atribuire, nici un efect pe ecran


- se afieaz NU AM GSIT PATH!

$X = HELLO
$ECHO ${X:+GOODBYE}

- atribuire, nici un efect pe ecran


- se afieaz HELLO

Substituirea comenzii
Substituirea comenzii se refer la faptul c ieirea unei comenzi poate deveni intrare ntr-o variabil sau o linie
de text.
$X = `LS JOBX`
- ncarc n variabila X ieirea comenzii 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
$ECHO `ECHO `DATE``
- se afieaz DATE
$ECHO `DATE`
- se afieaz data curent de dou ori

-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

subshel
l
procesul
A

fork

subshel
l
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
$CD NUME_DIRECTOR
- stabilete directorul curent (dac exist permisiuni potrivite)
$UMASK
- verific dac avem permisiune pe director
$RM NUME_FIIER
- terge fiierul primit ca parametru
$RMDIR NUME_DIRECTOR
- terge directorul primit ca parametru numai dac este gol
$RM -R NUME_DIRECTOR
- golete un director recursiv pn la 17 nivele adncime fr
mesaj 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 proprietar

tipul de fiier:

permisiunile pentru ali utilizatori


permisiunile pentru grupul proprietarului

- 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

u
g
o
a

PERMISIUNI

Proprietarul
Grupul
Alii
Toi

OPERATOR

+
=

$CHMOD A = RWX NUME_FIIER


$CHMOD 777

Se acord
Se retrage
Se suprascrie

r
w
x
s
t
l

Citire
Scriere
Execuie
Schimb UID
Sticky bit (TSR)
Lock

- 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:
$LINK FILE1 FILE2
- determin crearea unei legturi hard ntre FILE1 i FILE2
$LINK S FILE1 FILE2
- determin crearea unei legturi soft ntre FILE1 i 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
$FIND /USR NAME JOE PRINT
- caut (dup nume) fiierul JOE n /USR i afieaz
rezultatul
$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).
-11-

Backslash-ul exprim pierderea de semnificaie n linia de


comand a separatorului;

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
$ SORT FILE1 FILE2 FILE3
- sorteaz cele trei fiiere, cu afiare pe ecran
$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
$HEAD CONTOR FISIER
- determin afiarea primelor CONTOR linii din FISIER
$HEAD -1 /ETC/PASSWD
- afieaz informaiile despre root
Comanda TAIL
- este o derivaie a comenzii HEAD
$TAIL CONTOR LBC F FISIER
- determin, la folosirea a +CONTOR s porneasc de la nceputul
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
$JOIN T FIS1 FIS2
- face JOIN pe cmpul 1
$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.
-13-

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

Comenzile folosite pentru gestionarea proceselor:


$ $$
- returneaz PID-ul shell-ului
$ $!
- returneaz PID-ul ultimului proces lansat n background
$PS
- apelat fr parametrii afieaz PID-ul, ID-ul de terminat, timpul de rulare
i numele scurt al comenzii
Ex.:
$SLEEP 100&
- determin somnul de 100 de secunde
$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
81
1
0 30 20 00FFAD27 C00FFD30 68
00FF
CON
0:01
SH
269
81 14 30 20 00000FDC 000FFAC 60
0AFF
CON
0:00
PS
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:
-14-

- 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
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
$PS T
- se refer la portul de conectare
$PS EF
- se refer la procese
$PS EL
- se refer la procese
$PS E
- se refer la procese
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.
$KILL -9 81
- determin transmiterea semnalului KILL la procesul cu PID-ul 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.
$WHO HU
- determin afiarea cu cap de tabel a urmtorului tabel
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.
-15-

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).
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
/USR/SPOOL/CRON
pentru utilizatori obinuii
/USR/LIB/CRON
pentru administratorul de sistem
Comenzile $AT, $BATCH, $CRON permit lucrul cu acest daemon.
Urmtoarele fiiere sunt de asemenea folosite de CROND:
.PROTO
- comenzi prin care se genereaz scriptul executabil
.FIFO
- o conduct prin care comenzile asociate CROND lanseaz ctre acesta semnale
ce anun schimbrile aprute
.AT.ALLOW
- dac exist i este gol, nimeni nu are voie s foloseasc comanda. Are
preceden asupra lui DENY.
.AT.DENY
- determin utilizatorii care nu au voie s ruleze comanda.
.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
-16-

IF/THEN/ELSE
CASE

- produce o ramificare spre o comand sau spre o secven de comenzi bazat pe o


anumit condiie
- produce o ramificaie la o secven de comanzi dintr-o serie de secvene de comenzi alternative
printr-o selecie fcut de utilizator

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
-17-

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

Buclri
FOR

ruleaz o secven de comenzi de un numr fix de ori


FOR VARIABILA IN ART1 ART2 ART3
DO
COMANDA1
COMANDA2

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
SLEEP 2

+1

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

ECHO

UTILIZATORUL $NUME NU ESTE LOGAT

ELSE
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

-19-

ECHO SELECTATI O OPTIUNE


ECHO \N1) DIR-UL CURENT
ECHO \N2) CINE ESTE LOGAT
ECHO \N3) IESIRE
ECHO \NOPTIUNEA DVS.: \C
READ CHOICE
CASE $CHOICE IN

1)
CLEAR
ECHO ALEGEREA
PWD

;;
2)
CLEAR
ECHO ALEGEREA
WHO

;;
3)
CLEAR
ECHO ALEGEREA
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.

-21-

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)
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
-22-

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

Adresa de baz segment 16 bii:


1

Adresa offset segment 16 bii:

deplasare la paragraf
1

mascare

adresa fizic (nsumare)


1

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

6
5
4
3
2
1

6
1

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
-23-

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.

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 2 32 = 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
-24-

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

biii 21-12
index n tabela pagin

biii 11-0
deplasarea n pagin

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
-25-

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

intrare n directorul tabele de pagini i n tabela de pagin


biii 31-12 (20 bii) indexul tabelei de pagin

D A

U/S R/W P

D dirty

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

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
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)
-27-

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.
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).
-28-

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
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.
Seciuni critice
O seciune critic

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

-29-

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
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
algoritmului care o definete
3 GB
aplicaia
poate solicita memorie implicit, alocarea de memorie fiind un
3 GB
efect secundar al alocrii unei alte resurse (Ex.: cnd aplicaia
Spaiul de adres partajabil
creaz o nou fereastr)
2 GB
2 GB
Spaiul de adres privat
0 GB
-30-

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

Aplicaie
Win32

DLL-urile de sistem
3 GB

Aplicaie
Win16

3 GB
Aplicaiile Win16
DLL-urile de aplicaie

Spaiu partajat
2 GB
2 GB

Main virtual DOS


Aplicaia #1
Main virtual DOS
Aplicaia #2

Kernel, User, GDI

Aplicaiile Win32
4 MB
4 MB
Neutilizat
1 MB
1 MB
Maini virtuale DOS

Ring3
Ring0
Gestionar de fiiere
Gestionar de fiiere instalabile

0 MB
NTFS
FAT

ISO
9660

Reea

Subsistemul I/O pentru blocuri

Gestionar maini virtuale


Servicii:
- alocare memorie
- planificator
- VxD-uri
- DPMI
- drivere caracter
-31-

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