Documente Academic
Documente Profesional
Documente Cultură
Sisteme de Operare
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-
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-
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
-4-
tip
permisiuni
de acces
numr de
legturi
UID
GID
data creare,
accesare,
modificare
10
dimensiune
n bytes
11
12
adresele
fizice ale
fiierului
13
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.
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 evalueaz la
- dac variabila este definit i nenul, se evalueaz la
${VARIABIL:-CUVNT}
${VARIABIL:?CUVNT}
VARIABIL
VARIABIL
VARIABIL
${VARIABIL:+CUVNT}
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.
$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
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
tipul de fiier:
u
g
o
a
PERMISIUNI
Proprietarul
Grupul
Alii
Toi
OPERATOR
+
=
Se acord
Se retrage
Se suprascrie
r
w
x
s
t
l
Citire
Scriere
Execuie
Schimb UID
Sticky bit (TSR)
Lock
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-
-12-
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).
TTY
con
con
con
TIME
0:01
0:00
0:00
COMMAND
SH
SLEEP
PS
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-
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
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
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-
Buclri
FOR
DONE
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
+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
ECHO
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
-19-
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
deplasare la paragraf
1
mascare
6
5
4
3
2
1
6
1
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.
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-
biii 21-12
index n tabela pagin
biii 11-0
deplasarea n pagin
paginii
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
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)
Aplicaie
Win32
DLL-urile de sistem
3 GB
Aplicaie
Win16
3 GB
Aplicaiile Win16
DLL-urile de aplicaie
Spaiu partajat
2 GB
2 GB
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
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-