Software de Sistem

Previzualizare curs:

Cuprins curs:

1 Introducere .. 2
1.1 Definitii .. 2
1.2 Sisteme de operare si software de sistem .. 4
1.3 Istoric al sistemelor de operare .. 8

2 Asambloare .. 9
2.1 Definitii .. 9
2.2 Formate de fisiere .. 10
2.3 Structuri de date si algoritmi de asambloare .. 11
2.4 Relocatarea .. 13
2.5 Editoare de legaturi si încarcatoare .. 15
2.5.1 Utilizarea bibliotecilor de module obiect .. 16
2.5.2 Conducerea procesului de incarcare de programe .. 17
2.5.3 Structuri overlay .. 17
2.6 Structuri de editoare de legaturi si încarcatoare .. 20
2.7 Structuri de încarcatoare de încarcatoare .. 21

3 Macroprocesoare .. 22
3.1 Definitii .. 22
3.2 Comparatie între macroinstructiuni si apel macro .. 24
3.3 Structura unui macroprocesor .. 25
3.4 Facilitati atasate macroprocesoarelor .. 27
3.5 Macroprocesoare si translatoare .. 28

4 Compilatoare .. 30
4.1 Notiuni introductive .. 30
4.2 Generatorul de cod .. 32
4.3 Analiza lexicala .. 34
4.4 Analiza sintactica .. 36
4.4.1 Metoda ascendenta (jos-sus) .. 36
4.4.2 Metoda descendenta (coborirea recursiva) .. 37
4.5 Generarea codului obiect .. 38
4.6 Variante de constructie a compilatoarelor .. 40
4.7 Compilatoare de compilatoare .. 41

5 Gestiunea de procese .. 44
5.1 comunicatii între procese si excludere reciproca .. 44
5.2 Metode de excludere mutuala cu asteptare .. 46
5.2.1 Inhibarea întreruperilor .. 46
5.2.2 Variabile de închidere-poarta .. 46
5.2.3 Alternare fortata cu variabila comutator comuna .. 47
5.2.4 Alternare cu variabila locala vizibila .. 47
5.2.5 Alternare cu variabila locala modificata .. 48
5.2.6 Metoda dekker .. 48
5.2.7 Metoda peterson .. 49
5.2.8 Excluderea cu ajutorul instructiunilor speciale de blocare a magistralei .. 49
5.3 Excluderea mutuala fara asteptare activa .. 50
5.3.1 Excluderea prin sleep-wakeup .. 50
5.3.2 Semafoare .. 51
5.3.3 Monitoare .. 52
5.3.4 Message passing .. 53
5.3.5 Echivalenta între metodele de excludere reciproca (semafoare - monitoare - message-passing) .. 55

Extras din curs:

5.3 EXCLUDEREA MUTUALA FARA ASTEPTARE ACTIVA

Metodele precedente, inclusiv cele care rezolva corect problema, cer activitate inutila pentru asteptarea eliberarii resurselor. Solutia este blocarea procesului pentru care resursa nu e disponibila. Acesta nu va efectua activitate inutila cît timp va astepta.

Daca procesul nu e blocat, activitatile de testare inoportuna pot crea blocaj, daca activitatile cu prioritate mare nu pot fi desfasurate, pentru ca resursele exista deja la activitati cu prioritate mica (mecanismul de prioritati impiedica circulatia taskurilor). Solutia este blocarea procesului cu prioritate mare.

5.3.1 EXCLUDEREA PRIN SLEEP-WAKEUP

Se folosesc primitive sistem speciale:

SLEEP - se autoblocheaza procesul curent.

WAKEUP(p) - trezeste (activeaza) procesul p.

Exemplu: Avem doua procese si o magazie de capacitate finita:

- procesul executant realizeaza produse si le pune în magazie.

- procesul beneficiar preia produsele din magazie.

Executantul se va autobloca din productie în cazul în care magazia e plina.

Beneficiarul se va autobloca din consum în cazul în care magazia e goala.

Executantul si beneficiarul se vor “trezi” unul pe celalalt în cazul înlaturarii problemei care a dus la o blocare.

Totusi, prin time-sharing, se poate ajunge la un acces dublu la o magazie goala: beneficiarul vede magazia goala n=0, dar dispecerul începe procesul executant, care produce si introduce în magazie, pe care o reactualizeaza la n=1 si trece la trezirea beneficiarului. Semnalul de trezire se pierde, pentru ca beneficiarul nu este blocat. Procesul beneficiar revine în executie prin dispecer si testeaza valoarea n, citita înainte de a i se prelua controlul (n=0). Drept rezultat, beneficiarul executa primitiva SLEEP si se autoblocheaza. Executantul va umple magazia si se va autobloca si el, astfel ca ambele procese vor fi blocate.

Solutie : memorarea bitului de trezire, daca se trimite unui proces treaz. Ulterior, daca acesta vrea sa se autoblocheze, nu o va face, dar va sterge bitul de memorare a trezirii. Fiecare proces care poate trezi un proces înca treaz va trebui sa isi aiba bitul memorat, impreuna cu adresa procesului la care se refera.

5.3.2 SEMAFOARE

Semafor: variabila care numara trezirile pentru a tine cont de ele apoi. De fapt, un contor.

Asupra unui semafor actioneaza doua functii :

DOWN(s) : testeaza semaforul s :

- daca s>0 decrementeaza semaforul s si continua procesul

- daca s=0 blocheaza procesul curent

UP(s) : incrementeaza semaforul s.

Daca unul sau mai multe procese erau blocate de acest semafor (nu puteau sa continue o operatie DOWN(s) anterioara), unul din ele e ales de sistem si i se permite sa-si termine operatia de DOWN care îl blocase => dupa o operatie de UP asupra unui semafor cu procese blocate, semaforul va avea tot valoarea 0, dar se reduce numarul de procese blocate de el.

DOWN se foloseste la blocarea proceselor si va micsora numarul de activari memorate.

UP se foloseste la trezirea proceselor si incrementeaza numarul de activari memorate.

Implementarea functiilor UP si DOWN se face prin operatii atomice, neîntreruptibile,care odata începute nu se mai opresc pîna cînd nu se sfirsesc. Apelul acestor functii se face prin "system call", în care OS va efectua el dezactivarea întreruperilor pe timpul testarii semaforului, modificarii lui eventuale, sau în timpul blocarii procesului, pentru a efectua operatia într-un tot. Toate aceste actiuni se fac rapid, în citeva instructiuni si nu deranjeaza sistemul.

La calculatoare cu mai multe CPU e necesar ca la fiecare CPU sa se execute UP sau DOWN precedate de TSL, care sa conduca la un arbitraj hardware între CPU pentru a asigura ca numai un CPU examineaza semaforul.

Exemplu : o magazie cu un producator si un beneficiar.

Vom folosi 3 semafoare:

full : numar de locuri ocupate în magazie.

empty : numar de locuri libere în magazie.

mutex : pentru a asigura accesul exclusiv al unui solicitant la magazie.

Initial valorile pentru cele 3 semafoare vor fi :

full=0 ;magazia goala

empty=n ;capacitatea magaziei

mutex=1 ;permite accesul în zona critica

....

Semafoarele empty si full realizeaza sincronizarea între procese, iar mutex realizeaza excluderea reciproca a proceselor, în timpul accesului la magazie ( daca mutex=0 înseamna ca un proces lucreaza deja cu magazia, procesul care va face DOWN (&mutex) se va bloca, pâna ce procesul care lucreaza cu magazia va elibera accesul facând UP (&mutex) ).

Functionarea sincronizarii se face pe baza algoritmului SLEEP / WAKEUP, dar semafoarele vor memora trezirile si se va evita pierderea lor.

Semafoarele pot fi folosite în sistemul de operare pentru a ascunde întreruperile efectuate de sistem (pentru a le izola de utilizator).

Fiecare I/O are un semafor initializat pe 0. Dupa startarea unui dispozitiv de I/O, se apeleaza DOWN pe acel semafor deci procesul se blocheaza. Cînd vine întreruperea de terminare a operatiei de I/O, în rutina de tratare a ei se va efectua UP pe semaforul corespunzator, ceea ce va face ca procesul întrerupt sa se activeze.

Observații:

Note de curs

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • Software de Sistem.doc
Alte informații:
Tipuri fișiere:
doc
Nota:
9/10 (3 voturi)
Nr fișiere:
1 fisier
Pagini (total):
57 pagini
Imagini extrase:
57 imagini
Nr cuvinte:
19 498 cuvinte
Nr caractere:
109 541 caractere
Marime:
116.54KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Curs
Domeniu:
Electronică
Predat:
la facultate
Materie:
Electronică
Profesorului:
Stefan Stancescu
Sus!