Modul I - OS
Modul I - OS
Modulul I
Sistemul de operare controlează ș i coordonează utilizarea hardware-ului, între diferite programe aplicaț ie (precum
compilator, procesor de text etc.) pentru diferiț i utilizatori.
Sistemul de operare alocă resursele între programe astfel încât hardware-ul să fie utilizat eficient.
folosit.
Sistemul de operare este programul care rulează în permanenț ă pe computer. De obicei, este numit
ca nucleul.
Funcț iile kernel sunt întotdeauna utilizate în sistem, aș a că sunt întotdeauna stocate în memorie. Funcț iile non-kernel
sunt stocate pe hard disk ș i sunt recuperate ori de câte ori este necesar.
Perspectiva asupra OS
Sistemul de operare poate fi văzut din două perspective–
User Views:-
Părerea utilizatorului despre sistemul de operare depinde de tipul de utilizator.
i. Dacă utilizatorul folose ș te un sistem stand-alone, atunci sistemul de operare este conceput pentru a fi u ș or de utilizat ș i pentru performan ț ă înaltă.
performanț e. Aici utilizarea resurselor nu este considerată importantă.
[Link]ă utilizatorii sunt la terminale diferite conectate la un mainframe sau la minicomputere, prin partajare
informaț ii ș i resurse, apoi sistemul de operare este conceput pentru a maximiza utilizarea resurselor. Sistemul de operare este
proiectat astfel încât timpul CPU, memoria ș i I/O să fie folosite eficient ș i niciun utilizator singular să nu ia
mai mult decât ressourcea alocată lor.
[Link]ă utilizatorii sunt în sta ț ii de lucru, conecta ț i la re ț ele ș i servere, atunci utilizatorul are un
unitate de sistem a lor proprie ș i împarte resurse ș i fiș iere cu alte sisteme. Aici, sistemul de operare este
conceput atât pentru uș urinț a în utilizare, cât ș i pentru disponibilitatea resurselor (fiș iere).
[Link] sistemelor portabile se a ș teaptă ca sistemul de operare să fie proiectat pentru u ș urinț a utilizării ș i performan ț ă.
per cantitate de viaț ă a bateriei.
[Link] sisteme, cum ar fi sistemele integrate utilizate în dispozitivele de uz casnic (cum ar fi ma ș inile de spălat) ș i automobile
nu are nici o interacț iune cu utilizatorul. Există câteva LED-uri pentru a arăta starea funcț ionării sale.
System Views:-
[Link] de resurse - Sistemul de operare ac ț ionează ca un manager al resurselor hardware ș i software. Sistemul de operar
alocă resursele programului solicitant în funcț ie de prioritate.
vii. Program de control – Sistemul de operare este un program de control ș i gestionează execu ț ia programului utilizatorului
pentru a preveni erorile ș i utilizarea necorespunzătoare a computerului.
Când sistemul este pornit, programul 'Bootstrap' este executat. Este programul iniț ial care rulează în
programul [Link]
. Iniț iază registrele, memoria ș i dispozitivele de I/O
. Localizează ș i încarcă nucleul în memorie
. Începe cu procesul 'init'
. Aș teaptă o întrerupere de la utilizator.
Gestionarea întreruperilor–
Apariț ia unui eveniment este de obicei semnalizată printr-o întrerupere. Întreuprea poate fi ori
fie din hardware, fie din software.
Hardware-ul poate declanș a o întrerupere în orice moment prin trimiterea unui semnal către CPU.
Software generează o întrerupere prin executarea unei operaț iuni speciale numită apel de sistem (de asemenea
apelat apel de monitor).
Când CPU-ul este întrerupt, acesta opre ș te ceea ce face ș i transferă imediat
executarea la o locaț ie fixă. Locaț ia fixă (Tabelul Vectorilor de Interrupț ie) conț ine
adresa de pornire unde se află rutina de serviciu pentru interupere.
După executarea rutinei de servicii pentru întreruperi, CPU-ul î ș i continuă activitatea întreruptă
calcul
Structura de Stocare
Programele de calculator trebuie să fie în memoria principală (RAM) pentru a fi executate. Memoria principală este
memoria mare la care procesorul poate accesa direct. Este implementată de obicei într-o
tehnologia semiconductorilor numită memorie dinamică cu acces aleator (DRAM).
Computerele oferă memorie doar pentru citire (ROM), a cărei date nu pot fi schimbate.
Toate formele de memorie oferă un set de cuvinte de memorie. Fiecare cuvânt are propria adresă.
Interac ț iunea se realizează printr-o secven ț ă de instruc ț iuni de încărcare sau salvare către specifice
adrese de memorie.
Un ciclu tipic de execuț ie a instrucț iunilor, aș a cum este executat pe un sistem cu arhitectura Von Neumann
arhitectură, mai întâi preia o instrucț iune din memorie ș i stochează acea instrucț iune în
registrul de instrucț iuni.
Instrucț iunea este apoi decodificată ș i poate determina fetch-ul operanzelor din memorie ș i
stocat într-un anumit registru intern.
După ce instrucț iunea asupra operanzilor a fost executată, rezultatul poate fi stocat înapoi în
memorie.
Ideal, dorim ca programele ș i datele să rezide în memoria principală permanent.
aranjamentul de obicei nu este posibil din următoarele două motive:
1. Memoria principală este de obicei prea mică pentru a stoca permanent toate programele ș i datele necesare.
2. Memoria principală este un dispozitiv de stocare volatil care îș i pierde conț inutul atunci când alimentarea este oprită.
oprire.
Astfel, majoritatea sistemelor de calcul oferă stocare secundară ca o extensie a stocării principale.
memorie. Principala cerinț ă pentru stocarea secundară este că va putea păstra cantităț i mari
cantităț i de date permanent.
Cel mai comun dispozitiv de stocare secundar este discul magnetic, care oferă stocare
pentru ambele programe ș i date. Cele mai multe programe sunt stocate pe un disc până când sunt încărcate în
memorie. Multe programe folosesc apoi discul atât ca sursă, cât ș i ca destinaț ie a
informaț ii pentru procesarea acestora.
The wide variety of storage systems in a computer system can be organized in a hierarchy
aș a cum se arată în figură, conform vitezei, costului ș i capacităț ii.
Nivelurile superioare sunt scumpe, dar sunt rapide. Pe măsură ce ne miș căm în josul ierarhiei,
costul pe bit în general scade, în timp ce timpul de acces ș i capacitatea de stocare
în general creș te.
Pe lângă diferenț ele în viteză ș i cost, diferitele sisteme de stocare sunt fie volatile
sau nonvolatile.
Stocarea volatilă îș i pierde conț inutul atunci când alimentarea dispozitivului este oprită.
lipsa sistemelor scumpe de baterii ș i backup cu generator, datele trebuie scrise în
stocare nonvolatilă pentru păstrare în siguranț ă.
În ierarhia prezentată în figură, sistemele de stocare deasupra discului electronic sunt
volatil, în timp ce cele de mai jos sunt nonvolatile.
Structura I/O
O mare parte din codul sistemului de operare este dedicată gestionării I/O.
Fiecare dispozitiv are un controller de dispozitiv, întreț ine un anumit buffer local ș i un set de special.
registre de scop.
Controllerul dispozitivului este responsabil pentru mutarea datelor între dispozitivele periferice. Dispozitivul
sistemele de operare au un driver de dispozitiv pentru fiecare controler de dispozitiv
Pentru a începe o operaț iune I/O, driverul dispozitivului încarcă registrele din cadrul controlerului dispozitivului
Controlerul dispozitivului examinează conț inutul acestor registre pentru a determina ce acț iune să întreprindă.
ia (de exemplu, "citeș te un caracter de la tastatură").
Controlerul începe transferul de date de la dispozitiv la bufferul său local.
Odată ce transferul de date este complet, controlerul dispozitivului informează driverul dispozitivului (OS)
printr-un întrerupător că ș i-a terminat operaț iunea.
Drv-ul dispozitivului returnează apoi controlul către sistemul de operare ș i returnează ș i datele.
alte operaț iuni, driverul de dispozitiv returnează informaț ii de stare
Această formă de I/O condusă de întreruperi este bună pentru mutarea unor cantităț i mici de date, dar foarte dificilă pentru
miș care de date în vrac. Pentru a rezolva această problemă, se utilizează accesul direct la memorie (DMA).
DMA este folosit pentru dispozitive I/O de mare viteză, capabile să transmită informaț ii aproape de memorie
viteze
Controlerul dispozitivului transferă blocuri de date din stocarea tampon direct în memoria principală
fără intervenț ia CPU
Numai un întrerupător este generat pe bloc, mai degrabă decât unul pe octet
Arhitectura sistemelor informatice
Categorizaț i aproximativ în funcț ie de numărul de procesoare destinate scopului general utilizate–
Beneficiul acestui model este că multe procese pot rula simultan. Procesele pot
rulează dacă există NCPU—fără a provoca o deteriorare semnificativă a performanț ei.
Sistemele de operare precum Windows, Windows XP, Mac OS X ș i Linux—acum oferă
suport pentru SMP.
O tendin ț ă recentă în proiectarea CPU-urilor este includerea mai multor nuclee de calcul pe un singur cip.
comunicarea între procesoare într-un cip este mai rapidă decât comunicarea între
two single processors.
3. Sisteme Clusterizate
Sistemele clusterizate sunt două sau mai multe sisteme individuale conectate între ele prin intermediul unei reț ele
ș i partajarea resurselor software.
Clustering oferă disponibilitate ridicată a resurselor ș i serviciilor.
Există două tipuri de sisteme clusterizate
I. Clustering asimetric - un sistem este în modul de a ș teptare inactiv, în timp ce celelalte
are running the applications. The hot-standby host machine does nothing but
monitorizează serverul activ. Dacă acel server eș uează, gazda de rezervă activă devine
server activ.
II. clustering simetric – două sau mai multe sisteme rulează aplica ț ii ș i sunt
monitorizarea reciprocă. Acest mod este mai eficient, deoarece foloseș te toate resursele disponibile
hardware. Dacă vreun sistem eș uează, sarcina sa este preluată de sistemul de monitorizare.
Alte forme de clustere includ clustere paralele ș i clustering pe o reț ea de tip wide-area.
(WAN).
Clusterele paralele permit mai multor gazde să acceseze acelea ș i date din stocarea partajată.
Tehnologia clusterează se schimbă rapid cu ajutorul reț elelor de stocare (SAN).
Folosind resurse SAN, acestea pot fi partajate cu zeci de sisteme într-un cluster, care sunt
separaț i de mile.
Structura sistemului de operare
Unul dintre cele mai importante aspecte ale sistemelor de operare este capacitatea de a multiprograma.
Un singur utilizator nu poate men ț ine niciodată CPU-ul sau dispozitivele I/O ocupate tot timpul.
Multiprogramarea cre ș te utilizarea CPU-ului prin organizarea muncii, astfel încât CPU-ul
întotdeauna are unul de executat.
Sistemul de operare menț ine mai multe sarcini în memorie simultan, aș a cum este prezentat în figură.
Această set de locuri de muncă este un subset al locurilor de muncă păstrate în piscina de locuri de muncă.
Sistemul de operare alege ș i începe să execute una dintre sarcinile din memorie.
În cele din urmă, jobul poate trebui să a ș tepte o anumită sarcină, cum ar fi o opera ț iune I/O, pentru
complet.
Un bit hardware al computerului, numit bitul de mod, este folosit pentru a indica modul curent:
kernel (0) sau utilizator (1).
Cu bitul de mod, putem distinge între o sarcină care este executată de sistemul de operare
sistem ș i unul care este executat de utilizator.
Când sistemul informatic execută o aplicaț ie utilizator, sistemul se află în modul utilizator.
Când o aplicaț ie a utilizatorului solicită un serviciu de la sistemul de operare (printr-o apelare a sistemului),
tranzitia de la modul utilizator la modul kernel are loc.
La pornirea sistemului, hardware-ul începe în modul kernel. Sistemul de operare este apoi
încărcat ș i porneș te aplicaț iile utilizatorului în modul utilizator.
Ori de câte ori apare un tipar sau un întrerupător, hardware-ul comută de la modul utilizator la modul kernel
(adică, schimbă bit-ul de mod de la 1 la 0). Astfel, de fiecare dată când sistemul de operare obț ine
controlul computerului, este în modul kernel.
Hardware-ul permite executarea instruc ț iunilor privilegiate doar în modul kernel. Dacă un
o tentativă de a executa o instrucț iune privilegiată în modul utilizator este tratată ca fiind ilegală ș i
o captează pentru sistemul de operare.
Cronometru
Sistemul de operare foloseș te un temporizator pentru a controla CPU-ul. Un program utilizator nu poate ț ine CPU-ul pentru mult timp.
timp, acest lucru este prevenit cu ajutorul unui temporizator.
Un cronometru poate fi setat să întrerupă computerul după o perioadă specificată. Perioada poate fi
Timer fix – După un timp fix, procesul aflat în execuț ie este întrerupt.
Timer variabil – Interrupț ia apare după un interval variabil.
Înainte de a comuta în modul utilizator, sistemul de operare se asigură că temporizatorul este setat la
interrupț ie. Dacă temporizatorul generează o întrerupere, controlul se transferă automat către sistemul de operare.
Managementul proceselor
Un program aflat în execuț ie este un proces. Un proces are nevoie de resurse precum timpul CPU, memoria,
fiș iere ș i dispozitive I/O pentru executarea sa.
Aceste resurse sunt oferite procesului atunci când este creat sau în timpul execuț iei.
Când procesul se încheie, sistemul de operare recuperează resursele.
Programul stocat pe un disc este o entitate pasivă, iar programul în execuț ie este un
entitate activă.
Un proces cu un singur fir de execu ț ie are un contor de program care specifică următoarea instruc ț iune de
execută. CPU-ul execută o instrucț iune a procesului după alta, până când procesul
complete.
Un proces cu fire multiple are mai multe contoare de program, fiecare indicând la următorul
instructiune de executat pentru un fir dat.
Sistemul de operare este responsabil pentru următoarele activită ț i în legătură cu procesul
management:
Procesul de programare ș i firele de execuț ie pe CPU
Crearea ș i ș tergerea atât a proceselor utilizator, cât ș i a celor de sistem
Suspendarea ș i reluarea proceselor
Oferirea mecanismelor pentru sincronizarea proceselor
Furnizarea de mecanisme pentru comunicarea proceselor
Gestionarea memoriei
Memoria principală este o matrice mare de cuvinte sau octeț i. Fiecare cuvânt sau octet are propria sa adresă.
Pe măsură ce programul se execută, procesorul central citeș te instrucț iuni ș i de asemenea citeș te ș i scrie
date din memoria principală.
Pentru a îmbunătăț i atât utilizarea CPU-ului, cât ș i viteza de răspuns a computerului la acesta
utilizatori, calculatoarele de uz general trebuie să păstreze mai multe programe în memorie, creând o necesitate
pentru gestionarea memoriei.
Sistemul de operare este responsabil pentru următoarele activităț i în legătură cu memoria
management:
Ț inând evidenț a părț ilor de memorie care sunt în prezent utilizate de utilizator.
Deciderea proceselor ș i datelor care să fie mutate în ș i din memorie.
Alocarea ș i dezalocarea spaț iului de memorie după cum este necesar.
Gestionarea stocării
Există trei tipuri de management al stocării i) Managementul sistemului de fi ș iere ii) Stocare de masă
management iii) Gestionarea cache-ului.
Managementul sistemului de fiș iere
Gestionarea fiș ierelor este una dintre cele mai vizibile componente ale unui sistem de operare.
Un fiș ier este o colecț ie de informaț ii relaț ionate definite de creatorul său. În mod obiș nuit, fiș ierele reprezintă
programe ș i date.
Sistemul de operare implementează conceptul abstract de fiș ier prin gestionarea stocării de mare capacitate
Fiș ierele sunt în mod normal organizate în directoare pentru a le face mai uș or de utilizat.
Când mai mulț i utilizatori au acces la fiș iere, poate fi dorit să se controleze de cine ș i în
ce modalităț i (citire, scriere, executare) pot fi accesate fiș ierele.
Sistemul de operare este responsabil pentru următoarele activită ț i în legătură cu fi ș ierul
management:
Crearea ș i ș tergerea fiș ierelor
Crearea ș i ș tergerea directoarelor pentru organizarea fiș ierelor
Primitive de suport pentru manipularea fiș ierelor ș i directoarelor
Maparea fiș ierelor pe stocarea secundară
Backup-ul fiș ierelor pe suporturi de stocare stabile (nevolatile)
Gestionarea stocării de masă
Deoarece memoria principală este prea mică pentru a putea acomoda toate datele ș i programele, ș i având în vedere că datele care
informaț iile sunt ș terse când alimentarea se pierde, sistemul de calcul trebuie să furnizeze stocare secundară
pentru a face o copie de rezervă a memoriei principale.
Cele mai moderne sisteme de calcul folosesc discuri ca mediu de stocare pentru atât programe, cât ș i date.
Cele mai multe programe - inclusiv compilatoare, asamblatoare, procesatoare de texte, editore ș i
formatterii - sunt stocaț i pe un disc până când sunt încărcaț i în memorie ș i apoi folosesc discul ca pe ambele
sursa ș i destinaț ia procesării acestora.
Prin urmare, gestionarea corespunzătoare a stocării pe disc este de o importan ț ă centrală pentru un computer
sistemul. Sistemul de operare este responsabil pentru următoarele activităț i în legătură cu
disk management:
Gestionarea spaț iului liber
Alocarea stocării
Programarea discurilor
Cache
Cachingul este un principiu important al sistemelor informatice. Datele folosite frecvent sunt copiate
sistem de stocare mai rapid—cache-ul—ca date temporare. Când o anumită bucată de
informaț iile sunt necesare, mai întâi verificăm în cache.
Deoarece cache-urile au o dimensiune limitată, gestionarea cache-ului este o problemă de design importantă.
Selectarea atentă a dimensiunii cache-ului ș i a politicii de înlocuire a paginilor poate duce la rezultate semnificative.
performanț ă crescută.
Transferul de date de la cache la CPU ș i registre este de obicei o funcț ie hardware implicită,
fără intervenț ia sistemului de operare.
În contrast, transferul de date de pe disc în memorie este de obicei controlat de sistemul de operare.
sistem-explicit.
Într-o structură de stocare ierarhică, aceleaș i date pot apărea în diferite niveluri ale
sistem de stocare. De exemplu, să presupunem că trebuie să recuperăm un întreg A de pe disc magnetic la
program de procesare. Operaț iunea continuă prin emiterea mai întâi a unei operaț iuni I/O pentru a copia discul
blocul pe care A se află în memorie principală. Această operaț iune este urmată de copierea lui A în cache
ș i într-un registru intern. Astfel, copia lui A apare în mai multe locuri: pe discul magnetic, în
memoria principală, în cache ș i într-un registru intern.
Sisteme I/O
Unul dintre scopurile unui sistem de operare este de a ascunde particularităț ile hardware-ului specific
dispozitive de la utilizator. Subsystemul I/O este compus din mai multe componente:
O componentă de gestionare a memoriei care include tamponare, stocare în cache ș i
spooling
O interfaț ă generală pentru drivere de dispozitiv
Drivere pentru dispozitive hardware specifice
Numai driverul de dispozitiv cunoaș te particularităț ile dispozitivului specific căruia îi este atribuit.
Protecț ie ș i Securitate
Protecț ie–orice mecanism pentru controlul accesului proceselor sau utilizatorilor la resursele definite de OS
Protecț ia îmbunătăț eș te fiabilitatea. Un sistem orientat spre protecț ie oferă un mijloc de a distinge între
utilizare autorizată ș i neautorizată
Security–defense of the system against internal and external attacks. Such attacks spread across a huge
incluzând viruș i ș i viermi, atacuri de tip denial-of-service etc.
Protec ț ia ș i securitatea necesită ca sistemul să fie capabil să facă distinc ț ia între to ț i utilizatorii săi. Cei mai mul ț i
sistemele de operare menț in
Identităț ile utilizatorilor (ID-uri de utilizator, ID-uri de securitate) includ numele ș i numărul asociat, câte unul per utilizator.
ID-ul utilizatorului este apoi asociat cu toate fiș ierele ș i procesele acelui utilizator pentru a determina controlul accesului.
Identificatorul grupului (ID de grup) permite definirea unui set de utilizatori ș i gestionarea acestuia.
de asemenea asociat cu fiecare proces, fiș ier.
Escalarea privilegiilor permite utilizatorului să schimbe ID-ul efectiv cu unul cu mai multe drepturi pentru a obț ine extra
permisii pentru o activitate.
Sisteme Distribuite
Un sistem distribuit este o colecț ie de sisteme care sunt conectate în reț ea pentru a oferi utilizatorilor
acces la diversele resurse din reț ea.
Accesul la o resursă partajată creș te viteza de calcul, funcț ionalitatea, disponibilitatea datelor,
ș i fiabilitate.
O reț ea este un drum de comunicare între două sau mai multe sisteme. Reț elele variază în funcț ie de
protocolele utilizate (TCP/IP, UDP, FTP etc.), distan ț ele dintre noduri ș i transportul
media(sârme de cupru, fibră optică, wireless)
Re ț elele sunt caracterizate în func ț ie de distan ț ele dintre nodurile lor. O re ț ea locală
Reț eaua (LAN) leagă computerele într-o cameră, pe un etaj sau într-o clădire.
O reț ea de mare arie (WAN) leagă, de obicei, clădiri, oraș e sau ț ări.
O reț ea metropolitană (MAN) conectează clădiri dintr-un oraș .
Dispozitivele BlueTooth ș i 802.11 folosesc tehnologie wireless pentru a comunica pe o distanț ă de
câț iva metri, creând în esenț ă o reț ea de mică amploare, asemănătoare cu cea care ar putea fi găsită într-o casă.
Mediile de transport pentru a purta reț elele sunt de asemenea variate. Acestea includ cabluri de cupru, fibră
fibre, ș i transmisii wireless între sateliț i, antene cu microunde ș i radiouri.
3. Calcul Peer-to-Peer
Un alt model de sistem distribuit
P2P nu distinge între clienț i ș i servere. În schimb, toate nodurile sunt considerate colegi.
Fiecare nod trebuie să se alăture reț elei P2P, acț ionând ca client, server sau ambele.
Îș i înregistrează serviciul cu serviciul central de căutare pe reț ea, sau
Solicitare de difuzare pentru serviciu ș i răspuns la cererile de serviciu prin protocolul viadiscovery
Exemple includ Napster ș i Gnutella
Există mai multe interpretoare de comenzi cunoscutele sub numele de shelluri. În UNIX ș i Linux
sisteme, există mai multe tipuri diferite de shell-uri, precum shell-ul Bourne, shell-ul C, Bourne-
Încă o dată shell, Korn shell ș i altele
Func ț ia principală a interpreterului de comenzi este de a primii ș i executa comanda specificată de utilizator.
comandă. Multe dintre comenzi manipulează fiș iere: creează, ș terge, listează, imprimă, copiază, execută,
ș i aș a mai departe.
Apeluri de sistem
Apelurile de sistem sunt un mijloc de a accesa serviciile sistemului de operare.
În general, sunt scrise în C sau C++, deș i unele sunt scrise în assembly pentru performanț ă optimă.
Figura de mai jos ilustrează secvenț a apelurilor de sistem necesare pentru a copia conț inutul unui fiș ier dintr-unul
fiș ier(fişier de intrare) către un alt fiș ier (fiș ier de ieș ire).
Cei mai mul ț i programatori nu folosesc apelurile de sistem de nivel inferior direct, ci în schimb folosesc un
Interfaț ă de Programare a Aplicaț iilor, API.
API-urile, în loc de apeluri directe de sistem, oferă o portabilitate mai mare a programului între diferite
sisteme.
Cele trei cele mai comune API-uri sunt Win32 API pentru Windows, POSIX API pentru sistemele bazate pe POSIX
(inclusiv practic toate versiunile de UNIX, Linux ș i Mac OS X), ș i API Java pentru Java
maș ină virtuală (JVM)
O descriere a parametrilor transmiș i către ReadFile() HANDLE file—fiș ierul care trebuie citit
LPVOID buffer—un tampon unde datele vor fi citite ș i scrise
DWORD bytesToRead—numărul de bytes care trebuie citiț i în buffer
LPDWORD bytesRead—the number of bytes read during the last read
LPOVERLAPPED ovl—indică dacă I/O suprapus este folosit
API-ul face apoi apelurile de sistem corespunzătoare prin intermediul interfeț ei de apeluri de sistem, folosind un
tabelul apelurilor de sistem pentru a accesa apelurile de sistem numerotate specific, aș a cum este arătat în figură.
Fiecare apel de sistem are un apel de sistem numerotat specific. Tabelul apelurilor de sistem (format din
numărul apelului de sistem ș i adresa serviciului specific) invocă o rută de serviciu particulară
pentru un apel de sistem specific.
Cine sună nu trebuie să ș tie nimic despre cum este implementată apelul de sistem sau ce face.
în timpul execuț iei.
Trei metode generale folosite pentru a transmite parametrii către OS Cele mai simple: transmite ț i parametrii în
în unele cazuri, pot fi mai mulț i parametrii decât registre
Parametrii sunt stocaț i într-un bloc sau într-un tabel, în memorie, iar adresa blocului este transmisă ca parametru într-o
această abordare adoptată de Linux ș i Solaris
Parametrii plasaț i sau împinș i pe stivă de program ș i scoș i de pe stivă de către
sistem de operare
Metodele de blocare ș i stivuire nu limitează numărul sau lungimea parametrilor transmiș i
a) Controlul Proceselor
Apelurile sistemului de control al proceselor includ: sfâr ș it, anulare, încărcare, execu ț ie, crearea procesului, terminare
procesează, obț ine/setează atributele procesului, aș teaptă pentru timp sau eveniment, semnalează evenimentul ș i alocă ș i eliberează
memorie.
Procesele trebuie create, lansate, monitorizate, suspendate, reluate ș i, în cele din urmă, oprite.
Când un proces se opreș te sau se suspendă, atunci un altul trebuie să fie lansat sau reluat.
Atributele procesului, cum ar fi prioritatea procesului, timpul maxim de execu ț ie permis etc. sunt setate ș i
recuperat de OS.
După crearea noului proces, procesul părinte poate fi nevoit să aș tepte (timp de aș teptare), sau să aș tepte pentru
un eveniment care să aibă loc (aș teaptă eveniment).
Apelurile de sistem pentru gestionarea fi ș ierelor includ crearea fi ș ierului, ș tergerea fi ș ierului, deschiderea, închiderea, citirea, scrierea,
repoziț ionaț i, obț ineț i atributele fiș ierului ș i setaț i atributele fiș ierului.
După crearea unui fiș ier, fiș ierul este deschis. Datele sunt citite sau scrise într-un fiș ier.
Punctul de fiș ier poate fi nevoie să fie repoziț ionat într-un punct.
Atributele fi ș ierului, cum ar fi numele fi ș ierului, tipul de fi ș ier, permisiunile etc., sunt setate ș i recuperate folosind
apeluri de sistem.
Aceste operaț iuni pot fi, de asemenea, susț inute pentru directoare, precum ș i pentru fiș iere obiș nuite.
c) Managementul Dispozitivelor
Apelurile sistemului de gestionare a dispozitivelor includ cererea dispozitivului, eliberarea dispozitivului, citirea, scrierea,
repoziț ionaț i, obț ineț i/setaț i atributele dispozitivului ș i ataș aț i sau detaș aț i logic dispozitivele.
Când un proces are nevoie de o resursă, se face o solicitare pentru resursă. Apoi, controlul este acordat.
procesului. Dacă resursa solicitată este deja ataș ată la un alt proces, solicitantul
procesul trebuie să aș tepte.
În sistemele de multiprogramare, după ce un proces foloseș te dispozitivul, acesta trebuie returnat sistemului de operare, astfel
că un alt proces poate folosi dispozitivul.
Dispozitivele pot fi fizice (de exemplu, unităț i de disc) sau virtuale / abstracte (de exemplu, fiș iere, partiț ii ș i
Discuri RAM).
Programe de sistem
O colecț ie de programe care oferă un mediu convenabil pentru dezvoltarea ș i executarea programelor
(în afară de OS) sunt numite programe de sistem sau utilitare de sistem. Nu face parte din nucleu sau din comandă
interpreț i.
Programele de sistem pot fi împărț ite în cinci categorii:
[Link] fi ș ierelor - programe pentru a crea, ș terge, copia, redenumi, imprima, lista ș i, în general
manipulează fiș iere ș i directoare.
2. Informa ț ii despre statut - Utilitare pentru a verifica data, ora, numărul de utilizatori, procesele care rulează,
înregistrare de date, etc. Registrii sistemului sunt folosiț i pentru a stoca ș i a rechema informaț ii de configurare pentru
aplicaț ii particulare.
[Link] fi ș ierului - de exemplu, editoarele de text ș i alte instrumente care pot schimba con ț inutul fi ș ierului.
[Link] pentru limbaje de programare - De exemplu, compilatoare, interlinkere, debuggere, profilere, asamblatoare,
managementul arhivelor bibliotecilor, interpreț i pentru limbile comune ș i suport pentru make.
5. Încărcarea ș i execu ț ia programului - încărcătoare, încărcătoare dinamice, încărcătoare de suprapunere etc., precum ș i
debuggeri interactivi.
[Link] - Programe pentru furnizarea conectivită ț ii între procese ș i utilizatori,
inclusiv email, browsere web, loginuri la distanț ă, transferuri de fiș iere ș i execuț ie de comenzi la distanț ă.
Mecanisme ș i Politici
Politicile determină ce trebuie făcut. Mecanismele determină cum trebuie făcut.
implementat.
Exemplu: în cronometru, numărător ș i numărător descrescător este mecanismul ș i decide cum
timpul pe care trebuie să-l stabilim sunt politicile.
Politicile se schimbă în timp. În cel mai rău caz, fiecare schimbare a politicii ar necesita o
schimbare în mecanismul de bază.
Dacă sunt separate ș i aplicate corespunzător, schimbările de politică pot fi ajustate uș or fără a re-
scrierea codului, doar prin ajustarea parametrilor sau posibil încărcarea de noi date /
fiș iere de configurare.
Implementare
În mod tradiț ional, sistemele de operare au fost scrise în limbaj de asamblare.
În ultimii ani, sistemele de operare sunt scrise în C sau C++. Secț iunile critice de cod sunt încă scrise în
limbaj de asamblare.
Primul sistem de operare care nu a fost scris în limbaj de asamblare a fost Programul de Control Principal
(MCP).
Avantajele utilizării unui limbaj de nivel superior pentru implementarea sistemelor de operare sunt:
Codul poate fi scris mai repede, mai compact, uș or de portat pe alte sisteme ș i este mai uș or de
înț elege ș i depanează.
Singurele dezavantaje ale implementării unui sistem de operare într-o limbaj de programare de nivel înalt sunt
viteza redusă ș i cerinț ele de stocare crescute.
Structură simplă
Multe sisteme de operare nu au structuri bine definite. Ele au început ca fiind mici, simple, ș i
sisteme limitate ș i apoi au crescut dincolo de domeniul lor original.
MS-DOS – scris pentru a oferi cea mai mare funcț ionalitate în cel mai mic spaț iu, fără a fi împărț it în module. Deș i
MS-DOS are o structură, interfeț ele ș i nivelurile sale de funcț ionalitate nu sunt bine separate.
Abordare stratificată
Sistemul de operare este împărț it în mai multe straturi (niveluri), fiecare construit peste straturile inferioare.
stratul de bază (stratul 0) este hardware-ul; cel mai înalt (stratul N) este interfaț a utilizatorului.
Cu modularitate, straturile sunt selectate astfel încât fiecare foloseș te funcț ii (operaț ii) ș i servicii doar de niveluri inferioare-
nivel straturi
Sistemul de operare UNIX constă din două părț i separabile: nucleul ș i programele de sistem. Nucleul este ș i el mai departe
separat într-o serie de interfeț e ș i drivere de dispozitiv. Kernelul oferă sistemul de fiș iere, CPU
programarea, gestionarea memoriei ș i alte funcț ii ale sistemului de operare prin apeluri de sistem.
Abordare stratificată
Sistemul de operare este împărț it în mai multe straturi (niveluri). Fiecare strat se sprijină pe stratul de dedesubt.
se bazează pe serviciile furnizate de următoarea strat inferior.
Stratul de bază (stratul 0) este hardware-ul, iar stratul de sus este interfaț a utilizatorului.
O strat tipic, constă dintr-o structură de date ș i rutine care pot fi invocate de niveluri superioare
strat.
Avantajul abordării pe straturi este simplitatea construcț iei ș i a depanării.
The layers are selected so that each uses functions and services of only lower-level layers. So
simplifică depanarea ș i verificarea sistemului.
The layers are debugged one by one from the lowest and if any layer doesn’t work, then error is due
numai la acel strat, deoarece straturile inferioare sunt deja de-bugate. Astfel, designul ș i implementarea sunt
simplificat.
A layer need not know how its lower level layers are implemented. Thus, hides the operations from
straturi superioare.
Microkerneluri
Ideea de bază din spatele microkernel-urilor este de a elimina toate serviciile non-esenț iale din kernel.
astfel făcând nucleul cât mai mic ș i eficient posibil.
Serviciile eliminate sunt implementate ca aplicaț ii de sistem.
Cele mai multe microkernel-uri oferă gestionarea de bază a proceselor ș i a memoriei, precum ș i transmiterea mesajelor.
între alte servicii.
Avantajul microkernel - Expansiunea sistemului poate fi, de asemenea, mai uș oară, deoarece implică doar adăugarea de mai multe
aplicaț ii de sistem, nu reconstruirea unui nou kernel.
Mach a fost primul ș i cel mai cunoscut microkernel, ș i acum formează o componentă majoră a Mac
OSX
Dezavantajul microkernelului este că suferă de o reducere a performanț ei din cauza creș terii sistemului
funcț ia de suprasarcină.
Structura MAC OS X
Module
Dezvoltarea modernă a sistemelor de operare este orientată pe obiect, având un nucleu de bază relativ mic ș i un set de module.
care poate fi legat dinamic.
Fiecare componentă de bază este separată
Fiecare componentă comunică cu celelalte prin interfeț e cunoscute. Fiecare poate fi încărcat după cum este necesar în nucleu.
În general, similar cu straturile, dar cu mai multă flexibilitate
Maș inile virtuale au apărut pentru prima dată ca sistem de operare VM pentru mainframe-urile IBM în 1972
Beneficii
Capabil de a împărtăș i acelaș i hardware ș i de a rula mai multe medii de execuț ie diferite (OS).
Sistemul gazdă este protejat de maș inile virtuale ș i maș inile virtuale sunt protejate.
de la unul la altul. Un virus în sistemul de operare gazdă va corupe acel sistem de operare, dar nu va afecta celălalt gazdă.
sisteme ș i sisteme gazdă.
Chiar dacă maşinile virtuale sunt separate una de cealaltă, resursele software pot fi
împărț it între ei. Două moduri de a împărț i resursele software pentru comunicare sunt: a) Împărtăș irea unui
sistem de fiș iere volum (parte a memoriei). b) Pentru a dezvolta o reț ea de comunicare virtuală pentru
comunicaț i între maș inile virtuale.
Sistemul de operare rulează pe ș i controlează întreaga maș ină. Prin urmare, sistemul actual
trebuie oprit ș i scos din uz în timp ce se fac ș i se testează modificările. Această perioadă este
numit în mod obiș nuit timpul de dezvoltare a sistemului. În maș inile virtuale, această problemă este eliminată.
Programele utilizatorului sunt executate într-o maș ină virtuală, iar dezvoltarea sistemului se face în
o altă mediu.
Mai multe sisteme de operare pot rula simultan pe sistemul dezvoltatorului. Aceasta ajută la rapiditate
portarea ș i testarea codului programatorilor în medii diferite.
Consolidarea sistemului – două sau mai multe sisteme sunt făcute să funcț ioneze într-un singur sistem.
Simulatie–
Aici, sistemul gazdă are o arhitectură de sistem, iar sistemul oaspete este compilat în
arhitectură diferită. Programele sistemului gazdă compilate pot fi rulate într-un emulator care
traduc fiecare instrucț iune a programului oaspete în setul de instrucț iuni native al sistemului gazdă.
Paravirtualizare
Aceasta îi prezintă oaspetelui un sistem care este similar, dar nu identic cu cel preferat de oaspete.
sistemul. Oaspeț ii trebuie modificaț i pentru a rula pe hardware-ul paravirtualizat.
Exemple
VMware
VMware rulează ca o aplicaț ie pe un sistem de operare gazdă, cum ar fi Windows sau Linux ș i permite
acest sistem gazdă pentru a rula în mod simultan mai multe sisteme de operare guest diferite ca independente
maș ini virtuale.
În scenariul de mai jos, Linux rulează ca sistem de operare gazdă; FreeBSD, Windows NT ș i
Windows XP rulează ca sisteme de operare gazdă. Stratul de virtualizare este inima
VMware, deoarece abstractizează hardware-ul fizic în ma ș ini virtuale izolate care rulează ca gazde
sisteme de operare. Fiecare maș ină virtuală are propriul său CPU virtual, memorie, unităț i de disc, reț ea
interfeț e ș i aș a mai departe.
ÎNCEPEREA SISTEMULUI
Sistemul de operare trebuie să fie pus la dispoziț ia hardware-ului pentru ca hardware-ul să poată să-l pornească.
Un mic fragment de cod – încărcător de bootstrap, localizează nucleul, îl încarcă în memorie ș i îl porneș te
Sometimes two-step process whereboot blockat fixed location loads bootstrap loader
Când alimentarea este iniț ializată în sistem, execuț ia începe de la o locaț ie de memorie fixă Firmware utilizat pentru a deț ine
codul iniț ial de boot
GESTIONAREA PROCESELOR
Processes Concept
Un sistem de operare execută o varietate de programe: Sistem de tip batch - lucrări, Sisteme de partajare a timpului - utilizatori
termenii programe sau sarcini job ș i proces pot fi folosiț i aproape interschimbabil
Un proces este un program în execuț ie; execuț ia procesului trebuie să progreseze într-o manieră secvenț ială. Un proces
include: contorul de program stivă, secț iunea de date
Procesul
Memoria procesului este împărț ită în patru secț iuni
Stiva este folosită pentru a stoca variabile locale, funcț ii
parametrii, valorile de returnare ale funcț iei, adresa de returnare
etc.
Heaps-ul este folosit pentru alocarea dinamică a memoriei.
Secț iunea de date stochează variabile globale ș i statice.
The text section comprises the compiled program
cod.
Reț ineț i că există un spaț iu liber între stivă ș i
heap. Când stiva este plină, aceasta creș te în jos ș i când
stiva este plină, creș te în sus
Starea procesului
Pe măsură ce un proces se execută, îș i schimbă starea. Un proces are 5 stări. Fiecare proces poate fi într-una dintre
următoarele state–
Bloc de Control al Procesului
Pentru fiecare proces există un Bloc de Control al Procesului (PCB), care stochează informaț iile specifice procesului
informaț ie.
Starea procesului - Starea procesului poate fi nouă, pregătită, în execuț ie, în aș teptare etc.
Counterul de program – Counterul indică adresa următoarei instrucț iuni care urmează să fie executată pentru
this process.
Registrele CPU - Registrele variază în număr ș i tip, în funcț ie de arhitectura computerului.
Acestea includ acumulatoare, registre index, pointeri de stivă ș i registre de uz general. Împreună
cu contorul de programe, aceste informaț ii de stare trebuie salvate atunci când apare o întrerupere, pentru a permite
procesul să continue corect mai departe.
Informa ț ii despre programarea CPU - Aceste informa ț ii includ o prioritate a procesului, pointeri către
cozile de programare ș i orice alte parametrii de programare.
Informaț ii de gestionare a memoriei – Aceasta include informaț ii precum valoarea bazei
ș i registrele de limită, tabelele de pagini sau tabelele de segmente.
Informaț ii contabile – Aceste informaț ii includ cantitatea de CPU ș i timpul real utilizat,
limite de timp, numere de cont, numere de muncă sau de proces, ș i aș a mai departe.
Informa ț ii de stare I/O – Aceste informa ț ii includ lista dispozitivelor I/O alocate la
proces, o listă de fiș iere deschise ș i aș a mai departe.
PCB-ul serveș te pur ș i simplu ca un depozit pentru orice informaț ie care poate varia de la un proces la altul.
Planificarea proceselor
Obiectivul multiprogramării este de a avea un proces care să ruleze în permanen ț ă, pentru a
maximize utilizarea CPU.
Obiectivul împărț irii timpului este de a comuta CPU-ul între procese atât de frecvent încât utilizatorii
poate interacț iona cu fiecare program în timp ce rulează.
Pentru a îndeplini aceste obiective, programatorul de procese selectează un proces disponibil (posibil din
un set de mai multe procese disponibile) pentru executarea programului pe CPU.
Obiectivul principal al programării proceselor este de a menț ine CPU-ul ocupat în permanenț ă.
Un nou proces este initial pus în coada de aș teptare. Aș teaptă în coada de aș teptare până când este selectat pentru
execuț ie ș i i se oferă CPU-ul.
Odată ce procesul a fost alocat CPU-ului ș i este în execuț ie, unul dintre mai multe evenimente ar putea apărea:
The process could issue an I/O request, and then be placed in an I/O queue.
Procesul ar putea crea un nou subproces ș i aș tepta terminarea acestuia.
Procesul ar putea fi înlăturat cu forț a de pe CPU, ca urmare a unei întreruperi, ș i să fie pus
înapoi în coada de aș teptare.
În primele două cazuri, procesul se schimbă în cele din urmă din starea de aș teptare în starea de pregătire, ș i
apoi este readus în coada de pregătire.
Un proces continuă acest ciclu până când se termină, moment în care este eliminat din toate cozi.
Planificatori
Planificatorii sunt software care selectează un program disponibil pentru a fi atribuit CPU-ului.
1. Un programator pe termen lung sau programator de locuri de muncă - selectează locuri de muncă din piscina de locuri de muncă (din memoria secundară
Un sistem de programare eficient va selecta un amestec bun de procese legate de CPU ș i I/O.
procesele legate.
Dacă programatorul selectează mai multe procese legate de I/O, atunci coada I/O va fi plină ș i coada de pregătire.
va fi gol.
Dacă planificatorul selectează un proces mai intens pe CPU, atunci coada de pregătire va fi plină ș i coada de I/O.
va fi gol.
Comutare de context
Sarcina de a schimba un CPU de la un proces la alt proces se numeș te schimbare de context.
Când CPU-ul trece la un alt proces, sistemul trebuie să salveze starea vechiului proces ș i
încarcă starea salvată pentru noul proces printr-o comutare de context
Contextul unui proces este reprezentat în PCB
Timpul de schimbare a contextului este un overhead; sistemul nu efectuează lucrări utile în timpul schimbării.
dependent de suportul hardware
Pe sistemele Solaris tipice, procesul din vârful ierarhiei este procesul 'sched' cu PID de
0.
Procesul 'sched' creează mai multe procese copii - init, pageout ș i fsflush. Pageout ș i
fsflush este responsabil pentru gestionarea memoriei ș i a sistemelor de fiș iere.
Procesul init cu un PID de 1 serveș te ca proces părinte pentru toate procesele utilizatorului.
Un proces va necesita anumite resurse (timp de CPU, memorie, fiș iere, dispozitive I/O) pentru a-ș i îndeplini
sarcină.
Când un proces creează un subproces, subprocesul poate fi capabil să obț ină resursele sale în două
moduri
direct din sistemul de operare.
Subprocesul poate prelua resursele procesului părinte.
Resursa poate fi preluată de la părinte în două moduri–
Părintele poate fi nevoit să îș i împartă resursele între copiii săi
Împărț iț i resursele între mai mulț i copii.
Există două opț iuni pentru procesul părinte după crearea copilului:
Aș teptaț i ca procesul copil să se încheie ș i apoi continuaț i execuț ia. Părintele face o
apel de sistem wait()
Fugiț i în paralel cu copilul, continuând să executaț i fără a aș tepta.
Două posibilităț i pentru spaț iul de adrese al copilului în raport cu părinte:
Procesul copil este un duplicat al procesului părinte (are acelaș i program ș i date)
ca părinte).
Procesul copil a încărcat un nou program.
exemplu UNIX
apelul fork sistem creează un nou proces
apelul execsystem utilizat după un fork pentru a înlocui spaț iul de memorie al procesului cu unul nou
program
Crearea proceselor
Exemplu Windows
în Windows. Procesele sunt create în API-ul Win32 folosind funcț ia CreateProcess ()
. which is similar to fork ()
Două parametrii trecu ț i la CreateProcess() sunt instan ț e ale STARTUPINFO ș i
Structuri PROCESS_INFORMATION.
STARTUPINFO specifică multe proprietă ț i ale noului proces, cum ar fi dimensiunea ferestrei ș i
#include <stdio.h>
#include <windows.h>
int main(VOID)
{
STARTUPINFO si;
INFORMAȚ II_PROCESS pi;
}
II alocă memorie
ZeroMemory(&si, sizeof(si));
[Link] = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
II creează proces copil
dacă (!CreateProcess(NULL, II foloseș te linia de comandă
"C:\WINDOWS\system32\[Link]", II linia de comandă
NULL, nu moș tenesc manș a de proces
{
}
NULL, Eu nu moș tenesc mânerul firului
FALS, dezactivez moș tenirea manegerului
0, II fără semne de creare
NULL, II folosesc blocul de mediu al părintelui
NULL, II foloseș te directorul existent al părintelui
&si,
&pi))
fprintf(stderr, "Crearea procesului a eș uat");
return -1;
Părintele II va aș tepta ca copilul să termine
Aș teaptăUnSingurObiect([Link], INFINIT;
printf("Copil complet");
II închide manerele
ÎnchideHandle([Link]);
ÎnchideMâna([Link]);
2. Încetarea Procesului
Un proces se încheie când îș i finalizează ultima instrucț iune ș i solicită sistemului de operare
sistem pentru a-l ș terge, folosind apelul de sistem exit( ).
Toate resursele atribuite procesului, cum ar fi memoria, fiș ierele deschise ș i buffer-ele I/O, sunt
dezecalificat de sistemul de operare.
Un proces poate cauza încheierea unui alt proces prin utilizarea unei apel de sistem adecvat.
Procesul părinte poate termina procesele sale copil prin cunoaș terea PID-ului copilului.
Un părinte poate suspenda executarea copiilor dintr-o varietate de motive, cum ar fi:
Copilul a depăș it utilizarea resurselor care i-au fost alocate.
Sarcina atribuită copilului nu mai este necesară.
Părintele iese, iar sistemul de operare termină toț i copiii. Acesta este
numită terminare în cascadă.
Notă: Procesele care încearcă să se termine, dar nu pot pentru că părintele lor nu este
aș teptându-i sunt numiț i zombi. Acestea sunt în cele din urmă moș tenite de init ca ș i orfani ș i
lichidat. (Shell-urile UNIX moderne nu produc atât de multe orfane ș i zombi ca versiunile mai vechi
sisteme utilizate pentru.
2. Util pentru trimiterea unui bloc mare de date Util pentru trimiterea de date mici.
3. Apelul de sistem este folosit doar pentru a crea partajat. Apelul de sistem este folosit în timpul fiecărei citiri ș i scrieri
memorie operaț iune.
4. Mesajul este trimis mai repede, deoarece nu există Mesajul este comunicat încet.
apeluri de sistem
Sisteme cu memorie partajată
O regiune de memorie partajată este creată în interiorul spa ț iului de adrese al unui proces, care trebuie să
comunica. Alte procese care au nevoie să comunice folosesc această memorie partajată.
Procesul ar trebui să aibă grijă ca cele două procese să nu scrie datele în memoria partajată la
aceeaș i vreme.
Consideraț i o problemă Producător-Consumator. Un proces de producător produce informaț ii care sunt
consumat de un proces de consum. De exemplu, un compilator poate produce cod de asamblare, care este
consumat de un asamblor. Asamblorul, la rândul său, poate produce module obiect, care sunt
consumat de încărcător.
O soluț ie la problema producer-consumer foloseș te memorie partajată, unde un tampon de articole care
poate fi umplut de producător ș i golit de consumator, este disponibil într-o zonă de memorie care
este partajat de procesele producător ș i consumator.
Două tipuri de tamponi pot fi folosiț i
bufferul neobstruc ț ionat nu impune nicio limită practică asupra dimensiunii bufferului
bufferul limitat presupune că există o dimensiune fixă a buffer-ului
Bufferul partajat este implementat ca un tablou circular cu două puncte logice: in ș i out.
variabila indică următoarea poziț ie liberă în buffer; out indică prima poziț ie plină în
buffer. Bufferul este gol când in == out; bufferul este plin când ((in + 1) % DIMENSIUNE_BUFFER) ==
afară
#define DIMENSIUNE_BUFFER 10
typedef struct
{
...
}
element tampon[DIMENSIUNE_TAMPON];
int in = 0;
int out = 0;
Procesul de producător are o variabilă locală nextProduced în care se află noul element care urmează să fie produs.
stocat. Procesul consumator are o variabilă locală next Consumed în care itemul de a fi
consumat este stocat. Acest plan permite cel mult BUFFER_SIZE - 1 elemente în buffer în aceeaș i
timp.
Procesul de producț ie
în timp ce (adevărat) {
/* Produce un articol */
în timp ce (((in = (in + 1) % DIMENSIUNE_BUFFER count) == out); /* nu face nimic -- nu sunt buffere libere */
buffer[in] = articol;
in = (in + 1) % DIMENSIUNE BUFFER;
}
Procesul de consumator
în timp ce (adevărat)
{
în timp ce (în == în afară); // nu face nimic -- nimic de consumat
// elimină un element din buffer
item = buffer[out];
out = (out + 1) % DIMENSIUNE BUFFER;
returnează itemul;
}
mai multe metode pentru a implementa logic un link ș i operaț iile send 0 ș i receive():
Comunicare directă sau indirectă
Comunicare sincronă sau asincronă
Buffering automată sau explicită
Următoarele probleme sunt legate de fiecare dintre aceș ti factori
1. Denumire
Procesele care doresc să comunice trebuie să aibă o modalitate de a se referi la celelalte. Ele pot folosi fie referinț e directe, fie
comunicare indirectă.
i. Comunicare directă - fiecare proces care doreș te să comunice trebuie să numească în mod explicit
destinatar sau expeditor al
send(P, mesaj)–trimite un mesaj procesului P
receive(Q, mesaj) – primeș te un mesaj de la procesul Q
Proprietăț ile link-ului de comunicare utilizat în acest sistem
oLinks sunt stabilite automat
Un link este asociat cu exact o pereche de procese care comunică între fiecare pereche.
există exact un link
Legătura poate fi unidirec ț ională, dar de obicei este bidirec ț ională.
Această schemă manifestă simetrie în adresare; adică, atât procesul de trimitere, cât ș i cel de recepț ie
procesul trebuie să numească celălalt pentru a comunica.
osend(P, mesaj) - Trimite un mesaj procesului P.
oreceive (id, message) - Primi ț i un mesaj de la orice proces; variabila id este setată la
numele procesului prin care a avut loc comunicarea.
ii. Comunicare indirectă-
oMesajele sunt direc ț ionate ș i primite din cutiile po ș tale (de asemenea, denumite por ț i) Fiecare
cutia poș tală are un ID unic.
Procesele pot comunica doar dacă partajează o cutie po ș tală Proprietă ț i ale linkului de comunicare
oLink stabilit doar dacă procesele împărtă ș esc o cutie po ș tală comună Un link poate fi asociat cu
multe procese
Fiecare pereche de procese poate împărtă ș i mai multe linkuri de comunicare. Linkul poate fi unidirec ț ional.
sau bidirecț ional
Operaț iuni
Acum să presupunem că procesele P1, P2 ș i P3 împărtăș esc toate căsuț a poș tală A. Procesul P1 trimite un mesaj către
A, în timp ce atât P2 cât ș i P3 execută un receive() de la A. Care proces va primi mesajul
trimis de P1? Răspunsul depinde de care dintre următoarele metode alegem
Permite asocierea unui link cu cel mult două procese.
Permite ț i cel mult un singur proces la un moment dat să execute o opera ț iune de primire 0.
Permite ț i sistemului să selecteze arbitrar care proces va primi mesajul (adică,
fie P2, fie P3, dar nu ambele, vor primi mesajul.
O cutie poș tală poate fi deț inută fie de un proces, fie de sistemul de operare. Dacă cutia poș tală este
deț inut de un proces, atunci distingem între proprietar ș i utilizator
Deoarece fiecare cutie poș tală are un proprietar unic, nu poate exista nicio confuzie cu privire la care proces
ar trebui să primească un mesaj trimis la această căsuț ă poș tală.
O cutie poș tală care este deț inută de sistemul de operare are o existenț ă proprie. Este
independent ș i nu este legat de un anumit proces.
Sistemul de operare trebuie apoi să ofere un mecanism care permite unui proces să facă
următoarea:
Creează o nouă cutie po ș tală.
Trimite ț i ș i primi ț i mesaje prin intermediul căsu ț ei po ș tale.
Ș terge un mailbox.
2. Sincronizare
Transmisia mesajelor poate fi fie blocantă, fie neblocantă
Blocatul este considerat sincron
Blocarea trimiterii blochează expeditorul până când mesajul este primit
Blocat primire a avut blocat receptorul până când un mesaj este disponibil. Non-blocant este
considerată asincronă
Trimiterea non-blocantă permite expeditorului să trimită mesajul ș i să continue.
Recepț ia non-blocantă permite receptorului să primească un mesaj valid sau null
3. Buffering
Coada de mesaje ataș ată la link; implementată în una din cele trei moduri
O coadă de capacitate zero are capacitate 0 mesaje. Astfel, legătura nu poate avea mesaje.
aș teptând în el. În acest caz, expeditorul trebuie să blocheze până când destinatarul primeș te mesajul.
Capacitate limitată Coada are lungime finită n; astfel, cel mult n mesaje pot rezida în ea.
Dacă coada nu este plină atunci când se trimite un mesaj nou, mesajul este plasat în coadă ș i
expeditorul poate continua execuț ia fără a aș tepta. Capacitatea legăturii este finită, totuș i. Dacă
linkul este plin, expeditorul trebuie să se blocheze până când există spaț iu disponibil în coadă.
Capacitate nelimitată – Lungimea cozii este poten ț ial infinită; astfel, orice număr de
mesajele pot aș tepta în el. Expeditorul nu blochează niciodată
Întrebări
{"text":"1) Define ț i un sistem de operare? Care este punctul de vedere al sistemului asupra unui sistem de operare?"}