sis
DESCRIPTION
curs siteme de operareTRANSCRIPT
Curs 10 Componenta hardware a sistemelor de calcul necesita
existenta unui sistem de operare care sa poata gestiona resursele
hardware, concomitent cu asistarea utilizatorului pe timpul
pregatirii si lansarii in executie a lucrarilor sale. Sistemul de
operare contine programe care coordoneaza si controleaza resursele
hardware (memoria, CPU, canalele, dispozitivele periferice) si
informatiile (progame, date), asigurand astfel utilizarea eficienta
a resurselor. Din acest punct de vedere, functiile unui sistem de
operare au fost grupate in 4 categorii: 1. Gestiunea informatiei:
Sistemul de fisiere (organizarea, regasirea, utilizarea
informatiei); rutine de access; alocare de resurse prin deschiderea
fisierului(OPEN); eliberarea de resurse prin inchiderea fisierului
(CLOSE). 2. Gestiunea dispozitivelor periferice: operarea
dispozitivelor periferice (I/O Traffic Controller); alocarea
dispozitivelor periferice intr-un mod eficient (I/O Scheduler);
alocarea dispozitivului periferic si initierea operatiei de
intrare/iesire; eliberearea dispozitivului periferic la terminarea
operatiei de intrare/iesire: 3) Gestiunea procesorului: operarea
procesorului (CPU Controller); alocarea procesorului la procese
(CPU scheduler). 4) Gestiunea memoriei: alocarea memoriei pentru
programele din sistem; multiprogramarea; metode de access si
protectie; eliberarea zonelor de memorie alocate. Gestiunea
dispozitivelor periferice: Gestiunea dispozitivelor periferice este
foarte complexa datorita diversitatii si multitudinii tipurilor de
periferice. Exista mii de dispozitive periferice, fiecare avand
interfete diferite si viteze de acces diferite. De aceea sistemele
de operare dedica o mare parte din cod gestiunii acestor
periferice.Unele dispozitive pot fi de tip bloc (e.g., hardisk-ul,
CD-urile, DVD-urile) iar altele de tip caracter (e.g., tastatura,
mouse-ul). Unele dispozitive au acces secvential (e.g., banda
magnetica, tastatura) iar altele au acces aleator (e.g.,
hardisk-ul, CD-urile). Apoi mai exista problema verificarii daca un
dispozitiv periferic este disponibil. De ex. la apasarea unei
taste. Sistemul poate verifica la intervale regulate de timp daca
s-a apasat vreo tasta, sau apasarea unei taste poate genera un
semnal. In acest caz specific, actiunile generate de tastatura sunt
rare si imprevizibile deci generarea unui semnal e mai potrivita.
Un alt exemplu este primirea pachetelor pe placa de retea. Datorita
faptului ca trasmiterea pachetelor in retea e "bursty" (sub forma
de ingramadiri), primul pachet dintr-un "burst" genereaza o
intrerupere dupa care sistemul verifica la intervale predefinite de
timp (polling) daca au mai venit si alte pachete. Nu se poate ca
toate pachetele sa genereze cate o intrerupere datorita faptului ca
sistemul nu mai apuca sa prelucheze pachetele. De asemenea
dispozitivele pot fi foarte rapide (placa de retea) sau foarte
incete (tastatura). Si cum se vede in schema, cu cat sunt mai
rapide perifericele, cu atat sunt puse mai aproape de procesor. De
exemplu memoria se afla pozitionata foarte aproape de procesor.
Alte periferice, care sunt mai lente se afla mai departe de
procesor (de ex. coltul dreapta jos slide-ul 2). \nUnul dintre
scopurile principale ale gestiunii dispozitivelor periferice este
acela de a oferii o interfata uniforma de lucru cu toate
perifericele oricat de diferite ar fi acestea. De exemplu o cheie
USB daca o atasam unui calculator o putem accesa in acelasi mod ca
si un alt disc (folosind un sistem de gestiune de fisiere ca de ex:
total commander). Sistemele de operare din familia Unix vad toate
perifericele ca si fisiere. \nDriver-ele ofera interfete standard
pentru toate perifericele. Astfel 3 interfete standard: Periferice
de tipBLOC(e.g., unitati de disc, banda magnetica, DVD-ROM)[
trasferul de informatie se realizeaza la nivel de bloc de date;
comenzile folosite sunt: open(), read(), write(), seek();pot
contine date in forma bruta sau pot fi organizate sub forma de
sisteme de fisire]; Periferice de tipCARACTER(e.g., tastatura,
mouse-ul, porturile seriale si unele periferice USB)[ unitatea de
trasferul de informatie este caracterul; comenzile folosite sunt:
get(), put();librarii de functii ofera posibilitatea de a lucra si
cu linii de caractere]; Periferice de tipRETEA(e.g., Ethernet,
Wireless, Bluetooth)[Unix si Windows includ interfata socketprin
care se realizeaza comunicarea efectiva]. \nSubsistemul I/O al
nucleului: Tehnica zonelor tampon temporare (buffering, caching)
[la comunicarea intre periferice datele sunt stocate in memorie;
aceasta tehnica se foloseste pentru a solutiona diferentele de
viteze de acces dintre diferite periferice; sau pentru a solutiona
diferentele de dimensiune a datelor transferate]; Canalul de I/O
[aceasta componenta faciliteaza comunicarea intre procesorul
central (CPU) si periferice];Elemente specifice lucrului cu discul
[hardiscul fiind o componenta mai complexa si importanta, vom
analiza elemente specifice intrarile/iesirilor pentru astfel de
dispozitive]. \nTehnica zonelor tampon temporare: Folosita in
schimbul de informatii atat intre memoria interna si periferice,
cat si intre diverse nivele ale memoriei (schimb intre memoria
cache si memoria interna sau intre cea interna si cea secundara).
In functie de context se mai numeste: metoda zonelor tampon
multiple, cache-ingul paginilor web, pool de pagini recent
utilizate, buffering, etc. {Producator, consumator (depinde de
context); Obiectul care se produce/consuma: o zona de memorie, un
spatiu pe disc, etc.; Buffer-ul: ansamblu a n zone tampon (pool de
zone tampon); Trecerea zonelor tampon de la producator la
consumator: FIFO}. \nCanalul de I/O: Canalul I/O reprezinta
comunicarea intre procesorul central (CPU) si periferice. Exista
trei moduri fundamentale de interactiune intre procesor (CPU) si
periferice. Asteptare reciproca - sincronizare prin blocare [la
cerearea unei date (e.g., apelul sistem read()) procesul este pus
in stare de asteptare pana cand informatia este gata; la scrierea
unei informatii (e.g., apelul sistem write()) procesul este pus in
stare de asteptare pana cand perifericul este pregatit pentru
respectiva informatie]; Poolingul efectuat de catre procesorul
central - metoda asincrona (adica, trasferul de date se realizeaza
printr-un buffer, iar notificarea se realizeaza la umplerea
bufferului) [aceasta notificare se produce prin verificari la
intervale egale de timp ale procesorului sa determine daca datele
sunt disponibile; pro: nu incarca asa de mult sistemul; con: nu e
avantajos pentru evenimente rare si imprevizibile pentru ca se fac
prea mult verificari (pollings) fara nici un rezultat]; Intrerupere
lansata de catre periferic - metoda asincrona (adica, trasferul de
date se realizeaza printr-un buffer, iar notificarea se realizeaza
la umplerea bufferului) [aceasta notificare se produce prin
generarea unui semnal din partea perifericului care atentioneaza
CPU-ul ca datele sunt disponibile; pro: in cazul evenimentelor mai
rare si imprevizibile; con: o intrerupere incarca sistemul (trebuie
salvat tot contextul, tratata intreruperea, iar apoi refacut
contextul).]. Canalul de intrare-iesire este un procesor
specializat de operatii de I/O care poate functiona in paralel cu
procesorul central. [Fiecare periferic contine o zona Tampon
proprie, capabila sa pastreze o inregistrare (o linie de
imprimanta, un sector de disc, etc).; Procesorul, printr-o rutina
de I/O, in cazul scrierii, pune din memorie informatii in aceasta
zona tampon, iar in cazul citirii, preia informatii din ea si le
pune in memorie.; Dipozitivul periferic, in cazul scrierii, ia
informatiile din zona tampon proprie si le pune pe suport, iar in
cazul citirii, ia informatiile de pe suport si le pune in zona
tampon proprie.; Viteza cu care lucreaza procesorul este mult mai
mare decat viteza dispozitivului periferic.]. \nElemente specifice
lucrului cu discul: Planificarea accesului la discul magnetic:
Elementul de adresare pe un HDD este sectorul. Totusi, trasferul de
date la nivel de HDD se face prin blocuri de date. Aceste blocuri
reprezinta grupari de sectoare. Accesarea unui bloc de date se
poate face indirect. Pentru a accesa un bloc de date, unitatea de
disc actioneaza in 3 etape: [Pozitionarea bratului pe cilindrul
dorit; Rotirea discului pana cand sectorul trece prin fata capului
de citire/scriere; Schimbul propriu-zis de informatie].
Planificarea accesului la discul magnetic. Metode de optimizare:
optimizarea in selectarea sectoarelor: [Reducerea accesului la
sectoarele vecine; Reducerea asteptarii rotatiei], optimizarea
pozitionarii bratului cu capetele de citire/scriere:[Reducerea
timpului de pozitionare]. Exista asadar mai multi timpi in care se
face accesul la HDD, si anume: [timpul de cautare a
piste/cilindrului (8-12 ms); timpul de rotire pana cand capetele de
citire se afla deasupra sectorului dorit (8-16 ms per rotire - in
medie e nevoie de o jumatate de rotire ca sa ajung la sectorul
cautat); timpul de transfer efectiv al datelor citite/scrise (2-15
MB/s )]. \nReducerea accesului la sectoarele vecine: In cazul in
care cererile nostre se refera la sectoare vecine, datorita
timpului de transfer, capul de citire trece peste inceputul
sectorului vecin. De aceea, s-a propus ca sectoarele "vecine" sa se
numeroteze cu intretesere. Astfel, spre deosebire de primul caz in
care se pot accesa toate cele 8 sectoare doar prin o rotiri de
disc, cu intretesere se citesc toate sectoarele doar din 2
parcurgeri. Pentru cazurile in care timpul de trasfer este mai mare
decat timpul de trecere peste un sector, s-a propus intreteserea cu
factor 2. In cazul acesta discul se roteste de 3 ori pentru citirea
tuturor sectoarelor. \nReducerea asteptarii rotatiei: In cazul in
care se cere o secventa de sectoare, aceasta secventa se va
optimiza astfel incat citirea lor sa se realizeze cu cat mai putine
rotiri. Functioneaza dupa regula "cel ce asteapta cel mai putin va
fi servit primul". In cazul de fata, cele tre cereri vor fi servite
dintr-o singura rotire a discului. \nReducerea timpului de
pozitionare: [FCFS - desi usor de implementat, e cel mai putin
optim algoritm din punct vedere al timpilor de servire; SSTF -
poate amana indefinit unele cereri; SCAN - unele cereri pot astepta
parcurgerea de 2 ori a tuturor cilindrilor; cilindrii din mijloc
sunt mai bine deserviti; C-SCAN - e un algorim des folosit de catre
sistemele de operare Unix]. Curs 11 Gesionarea proceselor:
Facilitatea de a rula mai multe programe simultan in cadrul unui
sistem de operare este considerata astazi normala de catre toti
utilizatorii. Rularea unui navigator web simultan cu rularea unui
program pentru citirea postei este o practica de zi cu zi a
majoritatii utilizatorilor. Din punct de vedere a sistemului de
operare toate aceste programe sunt considerate procese. Program [o
secventa de instructiuni care descrie operatiile ce vor fi
efectuate in timpul unei executii; caracter static: nu se modifica
de la executie la alta]. Proces [set de activitati din program care
se executa secvential; caracter dinamic: modul de desfasurare al
prelucrarilor poate sa difere de la o executie la alta, in functie
de contextul de lucru]. In arhitecturile monoprocesor, mai multe
procese care ruleaza concomitent sunt de fapt deservite alternativ
de catre procesor. Procesorul executa alternativ grupuri de
instructiuni din fiecare program de-a lungul unei cuante de timp.
Dimensiunea unei astfel de quante de timp este astfel aleasa incat
momentele de stationare ale unui program nu sunt sesizabile de
catre utilizator.Paralelismul este efectiv doar in cadrul
sistemelor multiprocesor. Concurenta intre procese: Intr-un sistem
pot coexista la un moment dat mai multe procese care solicita
accesul concurent la resursele sistemului (memoria, discul
magnetic, terminalul, interfata de retea, etc). Sectiune critica;
resursa critica; excludere mutuala: O problema legata de accesul la
resurse este asigurarea corectitudinii operatiilor executate in
regim de concurenta.; Pentru a vedea cum operatii corecte pot da
rezultate gresite in caz de concurenta vom da un exemplu clasic. Se
considera un fisier care stocheaza numarul de locuri libere intr-un
sistem de vanzare de bilete. Vanzarea unui bilet va avea ca si
consecinta decrementarea numarului de locuri libere. Codul care
face acest lucru este: Ambele procese citesc aceeasi valoare din
program, o decrementeaza si apoi o scriu la loc. In final, in loc
ca numarul de locuri sa scada cu doua pozitii, va scadea doar cu
una si ca urmare operariile executate aspra fisierului sunt
gresite. Eroarea apare din lipsa de sincronizare intre accesele
proceselor la fisier. Pentru a obtine rezultate corecte, secventa
de executie dorita este: Portiunea de program incepand cu read si
terminand cu write este o sectiune critica (deoarece NU este permis
ca ea sa fie executata de mai multe procese simultan; adica
sectiunea critica este neinteruptibila), iar pozitia pe care se
stocheaza numarul de locuri in fisier este o resursa critica
(deoarece nu poate fi accesata simultan de mai multe procese).
Pentru a evita situatia eronata prezentata anterior, vom spune ca
procesele A si B trebuie sa se excluda reciproc, deoarece trebuie
sa aiba access exclusiv la sectiunea si la resursa critica.
Sincronizarea executie proceselor: Conceptul de semafor: Dijkstra a
introdus, pe la sarsitul anilor '60, conceptul de semafor ca si
solutie la problema sectiunii critice (ca un fel de blocare
generalizata). Un semafor este o pereche
(v(s), c(s)) , unde v(s) este valoare semaforului, iar c(s) o coada
de asteptare. Valoarea v(s) este un numar intreg, iar c(s) contine
pointeri la procesele care asteapta la semaforul s. Disciplina
cozii depinde de sistemul de operare (FIFO, LIFO, prioritati, etc).
Pentru gestiunea semafoarelor se definesc doua operatii
indivizibile P(s) si V(s) ale caror roluri sunt "a trece de
resursa", respectiv "a anunta eliberarea resursei" (Literele -
primele din denumirea in olandeza a operatiilor). In alte resurse
operatie P se numeste WAIT, iar operatie V se numeste SIGNAL.
Folosirea semaforului in vederea solutionarii sectiunii critice se
face sub forma: valoare initiala a semaforului se seteaza la 1:
v0(s)=1, iar toate procesele care folosesc sectiune critica sunt de
forma: ...; P(s); < sectuinea critica >; V(s); ... Se poate
demonstra ca v(s)