Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


SISTEME DE OPERARE

calculatoare



+ Font mai mare | - Font mai mic



SISTEME DE OPERARE

Un sistem de calcul fara software-ul sau este inutil. Software-ul exploateaza universalitatea sistemului, asigurandu-i potentialul necesar rezolvarii problemelor. Sistemul de calcul, prin intermediul software-ului sau, poate de exemplu, sa faciliteze scrierea unei scrisori, sa recunoasca forme, sa prevada timpul, sa stocheze sau sa imprime imagini, sa corecteze erori de ortografie, sa realizeze simplificarea unei expresii algebrice, optimizarea conceptiei unui circuit electronic, simularea comportamentului unor subansamble pentru diverse tipuri de masini etc.



De-a lungul timpului software-urile au evoluat in mai multe directii:

a)      software-uri de aplicatie, care servesc la rezolvarea unor probleme specifice, pot fi scrise de utilizator, sau sunt elaborate de catre firme specializate, cum este cazul programelor de utilitate generala: procesoare de texte, software-uri de gestiune si contabilitate, pentru conceptia asistata de calculator, software-uri didactice etc.

b)      software-uri utilitare, care ofera ajutor pentru dezvoltarea aplicatiilor, cum ar fi: compilatoarele, asambloarele, linkeditoarele, programele incarcatoare si depanatoare etc., cuprinzand de asemenea instrumente grafice si de comunicare.

Sistemul de operare operating sistem este un produs software care coordoneaza ansamblul tuturor activitatilor sistemului de calcul, asigura gestiunea eficienta a resurselor sale si faciliteaza munca utilizatorilor prin preluarea unor sarcini complicate cum ar fi, de exemplu, controlul perifericelor sau stocarea si gestiunea fisierelor.

Sistemul de operare permite interactiunea directa intre om si sistemul de calcul, oferind in acest sens o interfata convenabila si organizand prelucrarea si stocarea programelor si datelor.

Sarcinile sistemelor de operare s-au amplificat de-a lungul timpului si astfel, volumul sau a crescut considerabil, necesitand eforturi deosebite pentru programare. Un sistem de operare modern este constituit din sute de mii, chiar milioane de instructiuni, solicitand utilizarea limbajelor de programare evoluate adaptate scrierii acestui gen de software.

Pentru a reliefa importanta deosebita a sistemului de operare, in lumea informaticii se spune adesea ca 'un elefant este un soricel impreuna cu sistemul sau de operare'.

1 Evolutie si caracteristici

Calculatoarele primei generatii erau lipsite de sistem de operare, erau programate in binar, programele erau incarcate in memorie, executate si puse la punct de la pupitrul de comanda.

Chiar si dupa aparitia limbajului de asamblare procedura de utilizare a sistemului de calcul era aceeasi, fiecare utilizator era stapan unic asupra masinii pe toata durata de executie a programului sau care putea sa fie foarte mare.

Etapele evolutiei unui sistem de operare corespund introducerii unor noi dispozitive capabile sa amelioreze performantele sistemului de calcul.

Evolutia sistemelor de operare cuprinde urmatoarele etape:

a)      Monitorul sau executivul anilor '60 este precursorul sistemelor de operare moderne. El este un program insarcinat cu asigurarea bunei desfasurari a operatiilor prin secventializarea actiunilor utilizatorilor si continuitatea operatiilor;

b)      Sisteme pe loturi sau trenuri de lucrari batch , sunt sisteme monoutilizator aparute la sfarsitul anilor '50, o data cu introducerea primelor sisteme pe tranzistoare si dotate cu benzi magnetice, care asigurau succesiunea mai rapida a informatiilor. Programarea era in plin avant datorita aparitiei limbajului Fortran. Separarea operatiilor de intrare/iesire de cele de prelucrare se realizeaza prin utilizarea unui calculator auxiliar. Joburile, prezentate operatorului sub forma de pachete de cartele perforate sunt recopiate pe banda magnetica de catre calculatorul auxiliar. Banda, continand un lot de lucrari se constituie ca intrare pentru calculatorul principal care executa actiunile in ordinea prezentarii, iar rezultatele se scriu de asemenea pe banda pentru a putea fi imprimate in continuare de catre calculatorul auxiliar;

c)      Independenta intrarilor/iesirilor este un deziderat atins la mijlocul anilor '50, si care se materializeaza prin realizarea urmatoarelor dispozitive:

unitati de discuri si tambururi magnetice la un pret abordabil, care ofera un acces aleator si capacitati de memorare importante;

unitati de canal si sistemul de intreruperi, care elimina dependenta intrarilor/iesirilor de prelucrari;

Joburile sunt citite si stocate pe disc in fisiere (spooling), si sunt utilizate de catre monitor in momentul executiei, acesta putand alege ordinea de executie pe baza unor criterii de exploatare care se prezinta sub forma unui sistem de prioritati. Monitorul este dotat in acest sens cu un nou modul, planificatorul scheduler , care asigura planificarea lucrului.

d)        Multiprogramarea. Un sistem de calcul este multiprogramat daca mai multe programe sunt incarcate in memorie in scopul partajarii CPU-ului, asigurandu-se exploatarea mai eficienta a sistemului de calcul prin eliminarea perioadei de asteptare a unitatilor de prelucrare in timpul operatiilor de intrare/iesire. Sistemul de operare va contine un nou modul, alocatorul, care asigura gestiunea CPU tinand cont de sistemul de prioritati gestionat de catre planificator, dar poate decide de asemenea intreruperea unei executii prelungite fara sa astepte o operatie de intrare-iesire in vederea unei partajari echitabile a CPU-ului. Multiprogramarea ridica un anumit numar de probleme, de exemplu:

realizarea partajarii unitatii de prelucrare intre mai multe programe si salvarea contextului (starea de executie) pentru fiecare program;

gestiunea memoriei centrale incat sa permita incarcarea unui numar ridicat de programe intr-un spatiu limitat;

gestiunea intrarilor/iesirilor pentru diversele programe, asigurand transferul de date intre memorie si unitatile periferice si impiedicand sistemul sa 'amestece' informatiile specifice programelor diferite;

protejarea programelor si a datelor stocate in memoria centrala si pe disc, eventualele erori putand avea consecinte grave asupra derularii operatiilor;

e)      Sistemele in timp partajat time-sharing , numite de asemenea multiacces sau multiutilizator, sunt o varianta a sistemelor multiprogramate in care timpul CPU este distribuit in mici transe egale unui mare numar de utilizatori interactivi, conectati la sistem. Sistemele actuale combina prelucrarile batch si time-sharing. intr-un sistem in timp partajat, orice job lansat de la un terminal poate fi direct controlat de catre utilizator, care are posibilitatea, de exemplu, sa decida corectarea erorilor, recompilarea si relansarea in executie. Acest mod de exploatare este adaptat in special fazei de punere la punct a unui program, in timp ce modul batch este utilizat in general pentru aplicatii care vizeaza activitati de productie si pentru alte sarcini interactive.

Caracteristicile sistemelor de operare pentru sistemele multiprogramate vizeaza urmatoarele aspecte:

a)      Exploatarea resurselor este o sarcina fundamentala a sistemului de operare care asigura:

paralelismul intre diverse activitati in vederea cresterii performantelor sistemului de calcul. Notiunea de procese paralele si concurente faciliteaza intelegerea functionarii unui sistem de calcul multiprogramat;

partajarea resurselor si a informatiilor este asigurata prin gestiunea diferitelor unitati functionale ale sistemului (CPU, memorie centrala si auxiliara, dispozitive de intrare/iesire), permitand acccesul simultan la datele comune (baze de date, fisiere etc.) si la anumite programe (utilitare, biblioteci etc.);

interdependenta intre functiunile sistemului de operare si celelalte functiuni, deoarece nu exista o distinctie neta intre acestea, de exemplu, compilatorul si editorul de texte sunt considerate ca programe utilitare, iar in sistemul Unix, programul de gestiune a fisierelor este tratat ca o aplicatie oarecare;

nedeterminismul operatiilor care vizeaza caracteristica de comportament a sistemelor de operare. Daca la nivelul unei aplicatii, executii repetate cu aceleasi date produc intotdeauna aceleasi rezultate, sistemul de operare trebuie sa reactioneze la situatii nereproductibile, la evenimente aleatoare, ca de exemplu, intreruperi generate de dispozitive de intrare/iesire, transferuri de date repetate ca urmare a erorilor detectate in urma verificarilor de paritate, incidente in functionare etc.

b)      Virtualizarea sistemului prezinta utilizatorului, prin intermediul limbajului de comanda, o masina virtuala mai usor de programat decat cea reala. Limbajul de comanda furnizeaza modalitatea de a comunica sistemului, prin formularea de cereri, toate informatiile necesare diferitelor etape de lucru. Desi exista o oarecare asemanare intre limbajele de comanda si cele de programare in sensul formularii unor fraze care specifica intr-un mod neambiguu actiuni de executat, totusi, instructiunile unui limbaj evoluat de programare sunt in mod normal executate de catre CPU dupa ce au fost traduse de catre compilator, in timp ce comenzile unui limbaj de comanda sunt interpretate de catre sistemul de operare. Masina virtuala prezentata, 'ascunde' utilizatorului toate detaliile privind, de exemplu, o operatie de intrare/iesire sau o manipulare de fisiere;

c)      Dispozitivele esentiale pentru sisteme multiprogramate, ca de exemplu, canale de intrare/iesire, sistemul de intreruperi, memoriile auxiliare (unitatile de disc) si terminalele interactive, la care se adauga alte dispozitive, de exemplu, pentru protectia programelor si a datelor, pentru relocarea dinamica a programelor sau pentru gestiunea memoriei virtuale stau la baza oricarui sistem de operare modern;

d)      Masina cu doua stari:

starea supervizor, rezervata sistemului de operare;

starea utilizator, in care intra programele de aplicatie.

Aceasta conceptie permite dotarea sistemului de calcul cu un set instructiuni de baza, executabile in cele doua stari, si cateva instructiuni suplimentare, numite instructiuni privilegiate, executabile numai in mod supervizor. Starea sistemului este specificata prin pozitionarea unui indicator accesibil pentru modificare doar sistemului de operare (de exemplu, un bit al registrului de stare).

in anumite situatii, indicatorul de stare trece automat in starea supervizor, de exemplu in cazul unei intreruperi sau in caz de eroare, sau in general, ca urmare a unui eveniment care necesita interventia sistemului.

Interfata intre cele doua stari este asigurata prin existenta unei instructiuni neprivilegiate, numita cerere a supervizorului.

e)      Program, procesor, proces. Un program este o secventa statica de instructiuni. Un procesor executa instructiunile unui program. Un proces este o actiune, o secventa de operatii care se deruleaza pentru realizarea unei sarcini determinate, pe scurt, este un program in executie.

2 Structura unui sistem de operare modern

Examinand functiunile unui sistem de operare modern, se poate aprecia ca acesta se bazeaza pe un model structurat pe nivele, de exemplu, sistemul de gestiune a fisierelor face apel la sistemul de gestiune a intrarilor/iesirilor, care la randul sau, utilizeaza modulul de prelucrare a intreruperilor etc.

Se poate realiza un model de sistem de operare bazat pe o suprapunere de nivele functionale, nivelele inferioare fiind in interactiune directa cu hardware-ul, iar cele superioare servesc interfetei cu utilizatorul. Fiecare nivel utilizeaza functiuni definite de catre nivelele inferioare, iar aceasta abordare este asemanatoare cu cea adoptata pentru definirea nivelelor functionale privind protocoalele de comunicare intr-o retea de calculatoare (modelul ISO-OSI).

Figura urmatoare prezinta structura unui sistem de operare conform modelului expus, din care se desprinde ideea complexitatii sistemului de operare.

utilizatori

programe de

interfata utilizator aplicatie ale

interpretor de comenzi utilizatorilor

si

planificarea lucrului programe de

servicii

gestiunea fisierelor - compilatoare

- linkeditoare

gestiunea intrarilor/iesirilor - editor de texte

.

gestiunea memoriei centrale


nucleu sistem de operare


gestiunea gestiunea gestiunea

proceselor intreruperilor CPU


hardware

Nucleul sistemului de operare

Functiunile principale ale nucleului kernel sunt urmatoarele:

a)      alocarea CPU;

b)      gestiunea intreruperilor;

c)      gestiunea proceselor.

Nucleul este singura componenta a SO in intregime rezidenta in memoria centrala. Functiunile sale implica interventii frecvente si rapide. Din aceste considerente, si datorita ocuparii permanente a unei parti din memorie, codificarea nucleului trebuie realizata cu mare atentie si optimizata.

Este intr-adevar nivelul cel mai solicitat al sistemului, codificat adesea in limbaj de asamblare, restul sistemului fiind codificat in limbaj de programare evoluat orientat sistem (C, Pascal concurent, Modula-2).

Alocare CPU

Alocatorul (dispecerul) este responsabil cu repartizarea timpului disponibil unitatii de prelucrare (sau unitatilor de prelucrare in cazul arhitecturilor multiprocesor) intre diferite procese.

Sarcina sa implica gestiunea unui fir de asteptare, unde procesele care sunt gata sa utilizeze CPU sunt clasate in ordinea prioritatii. Prioritatea este atribuita de planificator in functie de urgenta prelucrarii si resursele solicitate si este modificata dinamic pe baza timpului de asteptare intre doua executii partiale. Dispecerul aloca CPU procesului care se gaseste in capul cozii in momentul in care CPU devine disponibil.

Dispecerul trebuie de asemenea sa salveze starea (contextul) procesului a carui executie s-a intrerupt si trebuie sa furnizeze CPU-ului elementele de context (echipament) ale procesului desemnat ca succesor.

Pentru salvarea informatiilor privind starea proceselor, se asociaza fiecarui proces o zona de memorie continand toate informatiile esentiale ca: identificator, paritate, context, statut (de exemplu activ, daca este stapan al CPU; gata de executie, daca este incarcat in memorie si dispune de toate resursele, fara CPU; in asteptare, daca este pe disc in asteptarea posesiei perifericelor si spatiului de memorie necesare; suspendat, daca executia sa a fost intrerupta; terminat, daca procesul si-a realizat sarcinile si executia sa a luat sfarsit), necesitatile in resurse etc.

Acest bloc de informatii se numeste vector de stare, sau descriptor, sau imaginea procesului. Acesti descriptori sunt regrupati intr-o structura de date si pot fi accesati printr-un pointer pornind de la o tabela centrala. Aceasta structura este accesibila programelor nucleului.

Dispecerul este solicitat in toate cazurile in care trebuie schimbat procesul stapan al CPU. De exemplu cand procesul executant declanseaza o operatie de intrare/iesire, sau cand o intrerupere de ceas semnaleaza ca transa de timp alocata este epuizata si trebuie suspendata executia, atunci trebuie atribuit CPU unui alt proces.

Dispecerul va fi de asemenea activ cand o intrerupere externa modifica starea procesului stapan al CPU, sau il face pe moment inoperant (de exemplu tratarea unei erori).

Gestiunea proceselor Un proces (task) este un calcul care poate fi executat concurent sau in paralel cu alte calcule. El este o abstractizare a procesorului, fiind considerat ca un program in executie.

Existenta unui proces este conditionata de existenta a trei factori:

a)      o procedura (un set de instructiuni) care trebuie executata;

b)      un procesor care sa poata executa aceste instructiuni;

c)      un mediu (memorie, periferice) asupra caruia sa actioneze procesorul conform celor precizate in procedura.

Programare paralela si concurenta

Caracteristic programarii paralele este faptul ca procesele paralele nu sunt conditionate unul de celalalt, nu colaboreaza intre ele, executia unuia dintre ele nu este in nici un moment dependenta de rezultatele partiale ale celuilalt.

Spunem ca avem de-a face cu programare concurenta atunci cand procesele paralele se interconditioneaza reciproc.

intr-un sistem de calcul (SC), paralelismul proceselor trebuie inteles astfel:

Daca Ii si Ij sunt momentele de inceput a doua procese Pi si Pj, iar Hi si Hj sunt momentele lor de sfarsit, Pi si Pj sunt executate concurent daca max (Ii, Ij) £ min (Hi, Hj).

Definitia 1 Executie paralela

Despre doua instructiuni succesive S1 si S2 spunem ca pot fi executate in paralel, daca efectul lor asupra mediului este acelasi, indiferent daca mai intai se executa complet S1 si apoi S2, sau se executa complet S2 si apoi S1, sau executia uneia incepe pana nu s-a terminat executia celeilalte.

Exemplul 1: Un program citeste de la doua periferice diferite pe a si b, dupa care tipareste suma lor c. S1 si S2 se pot executa in paralel.

S1: read (a);

S2: read (b);

S3: c : a+b;

S4: write (c);

Definitia 2 Graf de precedenta

Un graf aciclic (X, U) este graf de precedenta asociat unui program, daca X este multimea instructiunilor programului, iar multimea arcelor U este formata din perechi (Si, Sj) pentru care Si precede Sj.

Exemple de grafuri de precedenta si neprecedenta:

S1 S2 S1 S1


S3 S2 S3

S4 S4 S2

S5 S6

S7 S3

Grafuri de precedenta Graf de neprecedenta

Conditii de paralelism

Notam R (Si) multimea tuturor variabilelor referite in instructiunea Si fara a fi modificate;

Notam W (Si) multimea tuturor variabilelor referite si modificate in instructiunea Si;

Teorema 1 (Bernstein)

Doua instructiuni S1 si S2 se pot executa in paralel daca si numai daca:

a)      R (S1) W (S2) Æ

b)      W (S1) R (S2) Æ

c)      W (S1) W (S2) Æ

in cazul grafurilor de precedenta prezentate anterior, R (S1) Æ R (S2) Æ; W (S1) ; W (S2) , deci concurenta este posibila, dar S2 si S3 nu pot fi executate concurent deoarece W(S2) W(S3) ¹ Æ

Mecanisme de specificare a concurentei

Grafurile de precedenta sunt un model matematic pentru concurenta, dar nu pot fi utilizate direct pentru a descrie concurenta in limbajele de programare.

Constructiile FORK, JOIN, QUIT

Instructiunea FORK are sintaxa: FORK eticheta; si provoaca executia concurenta a doua secvente de program, deci creaza doua procese paralele. Instructiunile primului proces incep la eticheta eticheta, iar pentru al doilea proces instructiunile sunt cele care urmeaza dupa FORK.

Instructiunea JOIN are sintaxa: JOIN nr, eticheta si are rolul de a recombina nr procese, toate terminate. Dupa ce a fost executata a nr-a oara, se trece la instructiunea cu eticheta eticheta. Variabila nr indica numarul de procese paralele care mai sunt de asteptat in vederea reunirii.

Instructiunea QUIT are sintaxa: QUIT si are ca efect terminarea procesului care o executa (de obicei insoteste pe JOIN).

Prezentam descrierea FORK-JOIN-QUIT pentru grafurile de precedenta din figura anterioara:

nr : S1;

FORK L1; nr :

read(a); FORK L1;

goto L2; S2;

L1: read (b); S4;

L2: JOIN nr, L3; FORK L2;

QUIT; S5;

L3: c: a+b; goto L3;

write (c) L2: S6;

goto L3;

L1: S3;

L3: JOIN nr, L4;

QUIT;

L7: S7;

Mecanismul PARBEGIN-PAREND

O astfel de constructie are forma: S0; PARBEGIN S1 ½S2½ ½Sn PAREND; Sn+1; si corespunde grafului de precedenta urmator:


S0


S1 S2 Sn


Sn+1

Deci instructiunile S1, S2, , Sn sunt lansate in executie simultan si sunt executate concurent. Prezentam descrierea grafurilor de precedenta din figura anterioara cu PARBEGIN-PAREND.

S1:

PARBEGIN

begin

PARBEGIN    S2;

read (a); S4;

read (b); PARBEGIN

PAREND S5;

c := a+ b; S6;

write (c); PAREND

end;

S3;

PAREND

S7;

Prezentam in continuare un exemplu de copiere a unui fisier F intr-un fisier G, situat pe un suport diferit, folosind instructiuni concurente:

type

articol record . . . end;

var

F, G: file of articol;

w, r: articol;

begin

reset (F);

rewrite (G);

read (F, r);

while not eof (F) do

begin

w: r;

PARBEGIN

read (F, r);

write (G, w);

PAREND;

end;

write (G,r);

close (F);

close (G);

end.

Conceptul de semafor

Un semafor s este o pereche (v (s), c (s)), unde v (s) este valoarea semaforului (valoarea initiala v0 (s)), iar c (s) o coada de asteptare care contine pointeri la procesele care asteapta la semaforul s. Pentru gestiunea semafoarelor se definesc doua operatii primitive: WAIT si SIGNAL.


WAIT(s) apelat de procesul A : SIGNAL(s) apelat de procesul A:

v (s): v (s) -1; v (s): v (s) + 1;

if v (s) < 0 then begin if v (s) < 0 then begin

Trece A in asteptare; c (s) > B;

c(s) < A; Se extrage din coada B;

Trece control la dispecer;    Trece control la dispecer;

end end

else     else

Se trece controlul la A;    Se trece controlul la A;

Deci operatia SIGNAL (s) incrementeaza semaforul s cu o unitate, iar WAIT (s) decrementeaza s cu o unitate daca s este pozitiv.

Elemente de programare paralela si concurenta

Problemele programarii paralele se refera la:

a)      intelegerea programului care utilizeaza aceasta tehnica;

b)      depanarea programelor si demonstrarea corectitudinii;

c)      identificarea activitatilor paralelizabile.

Exemplu de calcul al unei radacini pentru ecuatia de gradul al doilea: x : (-b) + sqrt (b * b - 4 * a * c) / (a * a).

Calculul, efectuat pe o masina secventiala comporta 9 operatii elementare (sa zicem 9 unitati de timp), iar daca se dispune de un sistem care admite prelucrarea paralela atunci calculul dureaza 6 unitati de timp:


1 b * b 1 PARBEGIN

2 4 * a r1 : - b

3 (4 * a) * c r2 : b * b

4 (b * b) - (4 * a * c) r3 : 4 * a

5 sqrt (b * b - 4 * a * c) r4 : 2 * a

6 - b PAREND

7 (- b) + sqrt (b * b - 4 * a * c) 2 r5 : r3 * c;

8 2 * a 3 r5 : r2 - r5;

9 (- b) + sqrt (b*b - 4*a*c)/ (2*a) 4 r5 : sqrt (r5);

5 r5 : r1 + r5

6 x : r5 / r4;

Sectiune critica, resursa critica, excludere mutuala

Problema sectiunii critice consta in aceea ca doua sau mai multe procese concurente incearca sa modifice o aceeasi variabila, de un numar neprecizat de ori:


PARBEGIN

P1: . . . v : v + 1; . . .

P2: . . . v : v + 1; . . .

PAREND

Vom spune ca portiunea de program prezentata, v : v + 1 este o sectiune critica, deoarece nu este permis ca ea sa fie executata simultan de cele doua procese. Analog, vom spune ca variabila v este o resursa critica, deoarece nu poate fi accesata simultan de mai multe procese. Procesele P1 si P2 se exclud reciproc, deoarece au acces exclusiv la sectiunea si la resursa critica.

Folosirea semafoarelor rezolva complet si elegant problema sectiunii critice, fiind necesar un singur semafor s care se numeste semafor de excludere mutuala.

var s:semafor;

v0 (s):

PARBEGIN

P1: repeat

WAIT (s);

sectiune critica;

SIGNAL (s);

rest program1

until false

P2: repeat

WAIT (s);

sectiune critica;

SIGNAL (s);

rest program2

until false

PAREND

Sincronizarea proceselor

Operatia de sincronizare a doua procese se enunta astfel: Un proces P1 nu poate trece de un anumit punct A decat dupa ce un alt proces P2 ajunge intr-un punct B. Prin intermediul semafoarelor, procesul P1 va astepta in punctul A, prin operatia WAIT (s), pana cand procesul P2 va efectua in punctul B operatia SIGNAL (s).


var s:semafor;

v0 (s) :

PARBEGIN

P1: repeat . . . A: WAIT (s); . . . until false;

P2: repeat . . . B: SIGNAL (s) . . . until false;

PAREND

Prezentam in continuare cateva aplicatii ale sincronizarii proceselor:

Problema producatorului si consumatorului

Sa presupunem ca exista unul sau mai multe procese numite producatoare, si unul sau mai multe procese consumatoare (de exemplu conceptele de pipe si spooling). Transmiterea informatiilor de la producatori la consumatori se efectueaza prin intermediul unui buffer cu n intrari pentru n articole. Problema consta in a dirija cele doua tipuri de procese astfel ca:

a)      sa existe acces exclusiv la buffer (semaforul exclus);

b)      consumatorii sa astepte cand bufferul este gol (semaforul plin);

c)      producatorii sa astepte cand bufferul este plin (semaforul gol).


Var plin, gol, exclus: semafor;

v0 (plin) :

v0 (gol) : n;

v0 (exclus) :

PARBEGIN

Producator: repeat

produce articol;

WAIT (gol);

WAIT (exclus);

depune articol in buffer;

SIGNAL (exclus);

SIGNAL (plin);

until false;

Consumator: repeat

WAIT (plin);

WAIT (exclus);

extrage articol din buffer;

SIGNAL (exclus);

SIGNAL (gol);

consuma articol;

until false

PAREND

Problema impasului

Problema impasului se manifesta in urmatoarea situatie cand ambele procese sunt blocate.

var x,y: semafor;

v0 (x) :

v0 (y) :

PARBEGIN

A: . . . WAIT (x); . . . WAIT (y);

B: . . . WAIT (y); . . . WAIT (x);

PAREND

Impasul este o stare foarte grava care poate duce la blocarea sistemului de operare sau la distrugerea unor procese.

Modelarea matematica a impasului

Sa consideram n procese si m tipuri de resurse. Un proces oarecare va fi notat cu litera i si i I , iar o resursa oarecare cu litera j, si j I

Notam cu x j cantitatea din resursa j existenta in sistem;

Notam cu c i, j (t) cantitatea din resursa j ceruta de procesul i la momentul t;

Notam cu a i, j (t) cantitatea din resursa j alocata procesului i la momentul t;

Notam cu r j (t) cantitatea din resursa j care mai este libera la momentul t;

Definitie 3 Stare realizabila

Numim stare realizabila a alocarii resurselor la momentul t, daca au loc conditiile:

c i, j (t) £ x j i, j;

a i, j (t) £ c i, j (t), i, j;

a 1, j (t) + a 2, j (t) + + a n, j (t) £ x j i, j;

Problemele impasului si rezolvarea lor

a)      Iesirea din impas se rezolva de regula adoptand urmatoarele strategii:

reincarcarea sistemului de operare;

alegerea unui proces 'victima' care este distrus;

crearea unui punct de reluare, care este o fotografie a memoriei pentru procesul 'victima' si pentru procesele cu care colaboreaza;

b)      Detectarea unui impas daca sistemul poseda un mecanism de prevenire a impasului (de exemplu, detectarea ciclurilor in graful de alocare a resurselor);

c)      Prevenirea impasului se face prin urnmatoarele metode:

Metoda 1: 'totul sau nimic'. Procesul cere resurse in momentul incarcarii, iar SO intocmeste graful alocarii resurselor;

Metoda a 2-a: cererea de resurse intr-o anumita ordine, prin numerotarea resurselor;

Metoda a 3-a: alocare si suspendare controlata.

Gestiunea intreruperilor

intreruperile sunt constituite dintr-un ansamblu de rutine, fiecare dintre ele fiind activata la aparitia unui semnal fizic de intrerupere.

Sarcina modulului de gestiune a intreruperilor este determinarea sursei intreruperii si activarea rutinei (procedurii) de serviciu sau de raspuns corespunzatoare.

Am vazut ce este un program in limbaj masina. Putem presupune ca executia unei instructiuni masina nu poate fi intrerupta.

Prin starea unui program la un moment dat, notata prescurtat PSW Program Status Word intelegem o pereche formata din:

a)      adresa urmatoarei instructiuni de executat;

b)      continutul registrelor masina la terminarea ultimei instructiuni.

Fiecare sursa posibila a unei intreruperi are asociata o locatie fixa de memorie. in aceasta locatie se afla o adresa care indica locul din memorie la care se gaseste o secventa de instructiuni, numita handler, care deserveste intreruperea respectiva.

La aparitia semnalului de intrerupere, dupa ce instructiunea masina in curs s-a executat, se deruleaza in aceasta ordine, urmatoarele activitati:

a)      se salveaza intr-o zona de memorie (in stiva, sau o zona prestabilita) PSW-ul programului in curs de desfasurare;

b)      se restaureaza PSW al handlerului asociat intreruperii;

c)      handlerul executa actiunile necesare deservirii intreruperii;

d)      se salveaza, numai daca este necesara corelarea a doua actiuni succesive ale aceluiasi handler, PSW al handlerului;

e)      se restaureaza PSW al programului care a fost intrerupt.

Printre intreruperile care trebuie tratate la acest nivel se includ intreruperile interne, provocate, de exemplu, de detectarea unei erori sau printr-o actiune care solicita trecerea in starea supervizor, ca si toate intreruperile externe.

Ca exemplu de actiune care cauzeaza trecerea in starea supervizor se poate cita cazul unui utilizator care incearca sa execute o instructiune privilegiata sau cauta sa acceseze o informatie protejata etc.

Daca intreruperea implica o schimbare de alocare a procesorului, acest modul al nucleului va activa dispecerul.

Gestiunea memoriei centrale

Programele au nevoie de memorie pentru executia lor (pentru stocarea instructiunilor si datelor). Numai instructiunile stocate in memoria centrala pot fi executate de CPU.

Daca sistemul de calcul (SC) este exploatat in monoprogramare, problema se reduce la partajarea memoriei intre programul de aplicatie de executat si partea sistemului de operare rezidenta in memorie, care ocupa in mod normal o zona de adrese pornind de la adresa 0, care se numeste adesea partea de jos a memoriei.

Daca sistemul ocupa zona de adrese de la 0 la N, programul utilizator va avea la dispozitie spatiul de adrese de la N + 1 la extremitatea superioara a memoriei.

Daca programul utilizator are o talie mai mare decat spatiul disponibil, programatorul trebuie sa 'decupeze' programul in module care sa se poata succede in zona de memorie pusa la dispozitia lor.

Sistemul nu este in mod obligatoriu stocat in memoria RAM, in anumite cazuri se prefera utilizarea unei memorii ROM separate, pentru ratiuni de protectie si nevolatilitate.

Memoria centrala este o resursa costisitoare si deci ea este limitata si constituie un element critic al performantei unui calculator.

Dimensiunea (talia) memoriilor a crescut considerabil, o data cu adoptarea memoriilor electronice, dar si talia programelor a urmat o tendinta asemanatoare.

Spatiul de memorie trebuie gestionat eficient, iar al doilea nivel al SO este asigura partajarea memoriei intre mai multe procese in asteptare.

Partitii cu talie fixa

Ideea cea mai simpla de partitionare a memoriei ca ea sa poata contine un numar maxim de programe consta in 'decuparea' memoriei fizice disponibile in partitii fixe, dar nu obligatoriu de talie identica, fixate la generarea sistemului.

Aceste partitii fiind fixate in avans si o data pentru totdeauna, alocarea lor prezinta cateva probleme:

a)      trebuie gestionate mai multe cozi de procese in asteptare, sortand procesele in functie de talia lor;

b)      se produce o oarecare risipa de memorie, deoarece nu poate fi prevazuta talia joburilor de executat si rareori se va gasi un proces a carui talie sa corespunda unei partitii prestabilite.

Partitii cu talie variabila

Inevitabila risipa de memorie a sistemelor cu partitii fixe conduce la conceptia partitiilor adaptabile taliei programelor, numite partitii cu talie variabila.

Figura urmatoare ilustreaza aceasta idee care rezolva problema numai in faza initiala de incarcare a programelor.


zona sistem zona sistem zona sistem


program A program A program A


program B program C


program C program C program D


program D program D program F


program E program G


program F program F


program G program G


incarcare    Dupa un anu- Rearanjare

initiala    mit timp de prin relocare

functionare dinamica

Daca unul sau mai multe programe isi termina executia, apar zone de memorie neocupate, deci ar fi de dorit sa se ofere posibilitatea deplasarii programelor in memorie. in acest sens, sistemul, din cand in cand suspenda executia programelor si efectueaza o compactare a spatiului de memorie care permite rearanjarea memoriei ramase si crearea de spatiu pentru programele in asteptare.

Pentru a realiza aceasta operatie de reasezare sau compactare este necesara o tehnica de deplasare corecta a programelor incat acestea sa-si poata continua executia. Aceasta tehnica se numeste relocare (realocare), sau translatare dinamica si este realizata cu ajutorul registrelor de baza si a dispozitivului de calcul al adresei efective in momentul executiei.

Adresa efectiva = adresa de baza + adresa inceputului de program

Relocarea dinamica a spatiului de adrese poate fi realizata deplasand programul si modificand continutul registrului de baza asociat, iar executia se va efectua corect, adresele fiind calculate la executie, in functie de adresa continuta in registrul de baza.

Translatarea dinamica si protectia

in sistemele multiprogramate trebuie protejat fiecare program contra eventualelor greseli ale altor programe, greseli susceptibile de a periclita executia corecta a unui program prin posibilitatea de a patrunde in zona sa de memorie.

in principiu, este suficienta verificarea ca orice adresa calculata in timpul executiei unui program sa fie interna intervalului de adrese alocate programului respectiv.

Aceasta verificare se realizeaza cu ajutorul unui dispozitiv special care compara adresa efectiv calculata cu adresele extreme ale zonei alocate programului, stocate in registre 'borna' sau marginite (este necesar un singur registru marginit, deoarece adresa primei locatii de memorie este stocata in registrul de baza).

Pentru a gasi adresa referita se calculeaza adresa efectiva    AE = baza + dep si se testeaza daca baza £ AE £ sup

Numai SO are dreptul sa modifice continutul registrelor de baza si al celor marginite, ceea ce implica instructiuni privilegiate care nu pot fi executate decat in mod supervizor, iar daca un program face referire la o adresa din exteriorul bornelor sale, dispozitivul de verificare genereaza o intrerupere alertand SO.

Figura urmatoare prezinta aceste mecanisme.


memorie

baza baza registru de baza

adresa referita dep deplasament

program in raport cu B


sup sup registru marginit

(lim. superioara)


Pentru relocarea dinamica a memoriei si partajarea mai multor procese se utilizeaza dispozitivele urmatoare:

a)      registru de baza;

b)      registru marginit;

c)      dispozitiv de calcul al adresei efective pentru orice referinta la memorie;

d)      dispozitiv de verificare a apartenentei adresei efective la zona de memorie a procesului.

Datorita acestor dispozitive, SO poate decide deplasarea unui program si poate efectua din cand in cand o reasezare a memoriei. Procesele care devin temporar inactive pot fi puse in asteptare pe disc si inlocuite in memorie de alte procese (swapping).

Principalele limite ale acestei tehnici sunt:

a)      timp deloc neglijabil petrecut cu reasezarea;

b)      necesitatea alocarii de spatiu contiguu de memorie, conditie dificil de satisfacut.

in evolutia conceptuala a sistemelor de gestiune a memoriei, etapa urmatoare consta in a cauta metode de fragmentare a programelor si memoriei, astfel incat un program sa poata fi incarcat in zone necontigue de memorie.

Segmentarea

Segmentarea consta in divizarea unui program in module sau segmente, fiecare segment corespunzand unei entitati logice cum ar fi o procedura sau un bloc de date, independenta de alte segmente.

Sistemul de operare se ocupa de plasarea in memorie a segmentelor necesare executiei programelor gata sa utilizeze CPU. Sistemul de operare trebuie sa stie unde sunt stocate diferitele segmente, si pentru aceasta el organizeaza si gestioneaza un ansamblu de tabele de segmente, cate o tabela pentru fiecare program, continand adresele de incarcare ale segmentelor programului respectiv.

Adresa este structurata si contine 2 campuri:

a)      numarul segmentului;

b)      deplasamentul in cadrul segmentului.

Memorie

Spatiul de memorie Tabela de

al programului segmente 50K

(in memorie)

70K

Segment 1 Numar Pozitie 95K

1 50K

0 120K

Segment 2

2 95K 130K

145K

Segment 3 3 130K

15 155K

4 155K 165K

Segment 4

Calculul adresei efective este realizat ca de obicei cu ajutorul unui dispozitiv special, adaugand offsetul adresei de incarcare a segmentului care este stocat in tabele de segmente.

Protectia poate fi asigurata la nivelul tabelei de segmente adaugandu-i talia fiecarui segment sau ultima adresa a segmentului.

Notiunea de memorie virtuala

Ideea de memorie virtuala este simpla, eleganta si consta in a trata diferentiat adresele referentiate prin program (adrese virtuale) si adresele memoriei fizice (adrese reale).

Multimea adreselor virtuale este independenta de implementarea programului in memoria fizica, este vorba deci de un spatiu de memorie virtual (care nu exista), dar poate fi utilizat de catre programator ca model de memorie centrala la dispozitia sa.

Totul se petrece ca si cand utilizatorul ar avea acces la o memorie avand 2n locatii, n fiind numarul de biti pentru adresele programului.

Acest numar n poate fi mult mai mare decat numarul m care reprezinta talia memoriei fizice. O tabela de corespondenta numita tabela de pagini sau topografie de memorie, gestionata de catre SO pune in corespondenta cele doua spatii de adrese, iar un dispozitiv special asigura transformarea unei adrese virtuale in adresa fizica.

Spatiul virtual de adrese, care rezulta de regula din linkeditarea programului este gestionat de SO, care este obligat sa utilizeze memorii auxiliare (discuri, tambururi, memorii de sprijin etc), ca extensii ale memoriei centrale.

Conceptul de memorie virtuala dezvoltat in perioada anilor '60 a facut obiectul mai multor proiecte de cercetare, iar cea mai mare parte a calculatoarele anilor '70 erau dotate cu memorie virtuala.

Realizarea conceptului de memorie virtuala se bazeaza pe tehnica paginarii.

Paginare

Conceptul de paginare consta in a decupa cele doua spatii de adrese in pagini de aceeasi talie (1024 sau 2048 cuvinte) si de a evidentia un mecanism de transfer de pagini intre memoria virtuala si cea reala.

in orice moment, un program gata de executie va avea plasate in memorie cateva copii ale paginilor sale virtuale, alese in mod corespunzator pentru a permite executiei sale sa avanseze.

SO trebuie sa rezolve cateva probleme importante:

a)      daca o anumita pagina se gaseste deja in memorie si unde;

b)      cum se convertesc adresele virtuale ale programului in adrese reale;

c)      ce pagina va fi inlocuita pentru a face loc alteia;

d)      cum se poate sti daca pagina evacuata din memorie a fost modificata si trebuie deci recopiata in memoria auxiliara.

Tabela paginilor

Tabela paginilor constituie mecanismul esential care face sa corespunda fiecarei pagini virtuale o serie de informatii, actualizate de catre sistem. Un bit indicator specifica prezenta (sau absenta) paginii in memoria principala.

Daca pagina este in memoria principala, numarul paginii reale este inscris in tabela.

Un alt bit indica daca pagina a fost modificata in timpul executiei.

Mecanismul de transformare a adreselor este urmatorul: campul de adresa este divizat in doua parti:

a)      numarul de pagina, singurul element care se modifica;

b)      pozitia in cadrul paginii.

Tabela paginilor contine de asemenea biti de protectie specificand un anumit nivel al protectiei (protejare in citire, scriere, executie etc.).

Tabela paginilor ofera de asemenea protectia informatiilor in sensul apartenentei adreselor la domeniul alocat paginii respective.

Paginarea la cerere

Aceasta metoda de gestiune a memoriei consta in incarcarea unei pagini din memoria virtuala numai daca ea a fost referita.

Spatiul de lucru

O alternativa a paginarii la cerere consta in a plasa in memorie a unui mic numar de pagini oportun selectionate, acest ansamblu de pagini numindu-se spatiu de lucru.

Paginare si segmentare

Anumite arhitecturi permit combinarea segmentarii cu paginarea. Spatiul adreselor virtuale este segmentat si segmentele sunt decupate in pagini. Structura adresei trebuie sa prevada atunci trei campuri:

a)      numarul segmentului ;

b)      numarul paginii in cadrul segmentului;

c)      deplasamentul in pagina.

Segmentarea fiind o divizare logica a spatiului de adrese al programului, este sarcina programatorului sa defineasca segmentele. Paginarea este realizata prin intermediul hardware-ului si a sistemului de operare, ea este deci transparenta pentru utilizator.

Paginarea SO

SO este un program chiar daca el nu este chiar ca toate celelalte (instructiuni privilegiate, mod supervizor etc.), iar cea mai mare parte a SO este supusa paginarii, deoarece, datorita taliei sale el nu poate fi stocat in intregime in memoria principala. Fac exceptie de la aceasta regula nucleul si o parte a programelor de gestiune a memoriei si intrarile/iesirile.

Programele de serviciu sunt de asemenea paginate. Ca regula generala, programele care se executa intr-un sistem multiprogramat modern nu au decat cateva pagini in memoria centrala.

Tendintele actuale sunt pe de o parte de a trata majoritatea functiunilor sistemului de operare ca procese utilizator si pe de alta parte de a profita de microelectronica si de a incredinta hardware-ului sau microprogramarii sarcinile frecvente.

Organizarea intrarilor/iesirilor

Intrarile/iesirile constituie domeniul cel mai delicat in conceptia si realizarea unui sistem de operare. Importanta lor este fundamentala, dar orice generalizare devine dificila prin marea varietate de a unitatilor periferice si a procedurilor de intrare/iesire utilizate in sistemele de calcul actuale.

Dificultatile se refera atat la aspectele materiale cat mai ales la necesitatea de a asigura o gestiune optimala a resurselor sistemului precum si simplificarea sarcinii utilizatorilor acestuia.

Iata cateva aspecte ale problemelor care se ridica:

a)      diversitatea functionala a unitatilor periferice: imprimante laser, unitati de discuri magnetice si optice, cartuse magnetice etc.

b)      enorma diferenta de viteza intre unitatile periferice: de la cateva caractere pe secunda ale tastaturii sau terminalului, la cateva milioane de caractere transferate intr-o secunda de catre o unitate de discuri;

c)      diversitatea de codificare si structurare a informatiilor transferate: ASCII, EBCDIC, binar, cuvinte, octeti, blocuri;

d)      diferenta intre metodele de acces ale unitatilor: acces secvential sau aleator, adresaj complet diferit pentru unitatile de banda, discuri sau mari memorii de arhivare;

e)      diferenta intre conditiile de partajare a perifericelor: o unitate de discuri sau ecranul terminalului pot fi utilizate in acelasi timp de catre mai multe procese, in timp ce o imprimanta nu poate fi partajata decat in timp si numai pentru job-uri intregi;

f)        marea diversitate a conditiilor de eroare: eroare de paritate, imprimanta fara hartie, eroare de pozitionare a unui cap de citire/scriere pe disc, unitate deconectata, eroare de adresare sau de format etc.;

g)      complexitatea sistemelor de legatura intre periferice si unitatea centrala: DMA, canale, bus, unitati de comanda, unitati de telecomunicatii etc.;

h)      gradul inalt de paralelism al operatiilor

i)        necesitatea protejarii utilizatorilor: 'ascunderea' anumitor detalii legate de operatiile de intrare/iesire;

j)        necesitatea de a asigura independenta programelor fata de tipul perifericelor utilizate.

Pentru realizarea acestor deziderate, sistemul de operare incearca sa trateze toate perifericele de o maniera uniforma (periferce virtuale, codificare interna a caracterelor etc.), incredintand toate prelucrarile particulare modulelor specializate, numite gestionari de unitati periferce device handlers, drivers

Ca structura interna, acest nivel al sistemului de operare care se ocupa cu gestiunea intrarilor/iesirilor, se poate detalia pe subnivele, astfel:

a)      proceduri standard (programe de biblioteca) utilizate de catre aplicatii si continand cereri catre supervizor;

b)      un software de intrare/iesire independent de unitatile periferice;

c)      drivere, comandand fiecare unitate in detaliu;

d)      programe de serviciu ale intreruperilor, actionand in colaborare cu functiunile nucleului.

Utilizatorul dispune de un set de instructiuni de intrare/iesire virtuale, spre deosebire de instructiunile de intrare/iesire masina, specifice sistemului de operare.

Instructiunile de intrare/iesire virtuale se prezinta intr-un limbaj de programare evoluat sub forma unui apel de procedura sistem (read, write, print etc), cu argumentele necesare de apel (nume variabile sau fisier, talie, format, unitate logica etc.).

Aceste instructiuni sun inlocuite prin procedurile sistem corespunzatoare in timpul fazei de compilare.

Exista de asemenea probleme de protectie la nivelul intrarilor/iesirilor. in acest context, sistemul de operare verifica corectitudinea convertirii adreselor virtuale in adrese reale in momentul initializarii, impiedicand modificarea acestora inaintea terminarii operatiei de intrare/iesire.

Fisiere si gestiunea fisierelor. SGF.

Gestiunea fisierelor este serviciul cel mai vizibil oferit utilizatorului de catre un SO. Cea mai interesanta situatie apare atunci cand memorarea se face pe suport magnetic, cu accent pe suportul disc, cel mai convenabil tip de suport magnetic.

Gestiunea fisierelor privita de utilizator

Un volum poate fi o rola de banda, un ansamblu formand un disc de masa, un disc cartus, un disc flexibil (discheta).

in cadrul unui volum, informatiile sunt grupate de catre SO la indicatia utilizatorului in ansambluri distincte numite fisiere.

Utilizatorul are acces prin programele sale la o (mica) entitate din cadrul unui fisier, cunoscuta sub numele de articol. Putem spune ca un articol este o subdiviziune a unui fisier care are un inteles de sine statator.

Informatiile dintr-un articol sunt de regula grupate in subdiviziuni numite campuri sau atribute. Fiecare camp sau atribut are in fisier o anumita valoare. O pereche (atribut, valoare) o vom numi cheie. O cheie unica se numeste index de articol.

Lungimea de reprezentare a unui articol poate fi constanta pentru toate articolele sau poate sa varieze de la un articol la altul, deci putem avea articole de format fix sau variabil.

Sistemul de gestiune a fisierelor (SGF) este un ansamblu de rutine de legatura intre utilizatori si componenta sistemului de intrare/iesire la nivel fizic pentru operarea cu fisiere. Utilizatorul are la dispozitie o serie de operatii primitive pe care le poate solicita SGF-ului pentru serviciile dorite.

Conceptul de fisier abstract

Se poate defini un fisier ca o functie f: N T, unde N este multimea numerelor naturale iar T multimea valorilor posibile pentru un tip de data deja definit. Pentru tipurile de date obisnuite (integer, char, real) avem de-a face cu un fisier obisnuit.

Prin f (i) notam multimea valorilor campurilor articolului al i-lea din fisier.

Daca tipul de data este la randul sau un tip fisier, avem de-a face cu o baza de date.

Principalele operatii asupra unui fisier notat f, presupunand ca inaintea efectuarii operatiei, fisierul are n articole, sunt urmatoarele:

a)      Citirea (Read) articolului k inseamna obtinerea valorii f (k);

b)      Scrierea (Write) inseamna adaugarea unui nou articol la fisier. Deci fisierul f cu n articole se transforma in fisierul f' cu n +1 articole definite astfel:

f' (i) = f (i) , i I

f' (n + 1) = x, unde x este valoarea articolului adaugat.

c) Inserarea (Insert) unui nou articol cu valoarea x, dupa articolul cu numarul de ordine k inseamna obtinerea unui nou fisier f' cu n + 1 articole:

f' (i) = f (i) , i I

f' (k + 1) = x;

f' (i + 1) = f (i) , i I

Se observa ca scrierea este echivalenta cu inserarea la sfarsitul fisierului iar inserarea dupa pozitia 0 inseamna adaugare la inceputul fisierului.

d) }tergerea (Delete) articolului k inseamna obtinerea unui nou fisier f':

f' (i) = f (i) , i I

f' (i - 1) = f (i) , i I

e) Modificarea (Modify, Update, Replace) articolului k cu un altul de valoare x inseamna obtinerea fisierului f' tot cu n articole, astfel:

f' (i) = f (i) , i I

f' (k) = x;

f' (i) = f (i) , i I

Tipuri de acces la articole

a)      Accesul secvential la un articol f (i) presupune i - 1 accese in ordine, la articolele cu numerele de ordine 1, 2, , i - 1.

b)      Accesul direct random access presupune existenta unui mecanism de obtinere a articolului cautat fara a parcurge secvential toate articolele care-l preced. Mecanismul de acces este de doua feluri:

acesul direct prin numar de pozitie (adresa) are loc atunci cand i se furnizeaza SGF-ului o valoare i si acesta returneaza f (i) (acces relativ);

acces direct prin continut, are loc atunci cand i se furnizeaza SGF-ului o cheie (a, v) si acesta returneaza acel articol i pentru care f (i). a = v.

Clasificarea fisierelor

a)      Dupa lungimea unui aricol:

fisiere cu articole de format fix;

fisiere cu articole de format variabil.

b)      Dupa posibilitatea de afisare sau tiparire:

fisiere text al caror continut poate fi afisat pe ecran sau la imprimanta;

fisiere binare, formate din siruri de octeti consecutivi, fara nici-o semnificatie pentru afisare.

c)      Dupa suportul pe care este rezident fisierul

fisiere pe disc magnetic;

fisiere pe banda magnetica;

fisiere pe imprimanta;

fisiere tastatura;

fisiere pe ecran;

fisiere pe plotter, digitizor;

fisiere pe cartele perforate;

fisiere pe banda de hartie perforata.

d)      Dupa modurile de acces

fisiere secventiale;

fisiere in acces direct:

i)        acces direct prin adresa;

ii)      acces direct prin continut:

secvential-indexat;

selectiv;

multilista;

B - arbore;

Referirea unui fisier

Utilizatorul se refera la un fisier in conformitate cu anumite reguli sintactice impuse de catre SO. in general, referirea la un fisier se face printr-un sir de caractere, diferite de spatiu. }irul de referinta contine 5 zone, plasate de la stanga la dreapta, astfel:


Periferic : Cale Nume . Tip ; Versiune

Periferic indica numele perifericului suport al fisierului, impus de sistemul de operare.

Cale desemneaza subdirectorul din cadrul discului unde se afla fisierul cautat.

Nume este o succesiune de litere si cifre date de creatorul fisierului.

Tip sau extensie a numelui este data tot de utilizator si ea reflecta continutul fisierului.

Versiune este o notiune specifica unui anumit SO si diferentiaza mai multe versiuni ale aceluiasi fisier.

Actiunile SGF la nivel de articol

a)      citire pentru suporturile disc, banda magnetica, cartele, tastatura, digitizor;

b)      scriere pentru suporturile disc, banda magnetica, ecran, imprimanta, plotter;

c)      inserare, stergere, modificare, pentru suporturile de tip disc.

Actiunile SGF la nivel de fisier

a)      functiile de deschidere si inchidere (open, close). Open este operatia de deschidere si contine actiunile SGF desfasurate inaintea primului acces la fisier, iar close (inchidere) dupa ultimul acces.

b)      alte operatii globale:

crearea unui fisier;

stergerea unui fisier;

copierea unui fisier in alt fisier;

schimbarea numelui unui fisier (redenumire, mutare);

listarea unui fisier;

concatenarea mai multor fisiere;

compararea a doua fisiere;

fuzionarea a doua sau mai multe fisiere;

sortarea (ordonarea) articolelor unui fisier;

operatii de filtrare a unui fisier.

Descriptorul de fisier este un articol special care contine informatiile de descriere ale unui fisier. Locul sau de memorare este in directorul fisierului.

Apar 4 grupe de informatii:

a)      identificarea fisierului (N, I), unde N este numele simbolic al fisierului (specificatorul de fisier fara periferic), iar I este un numar prin care descriptorul este reperat pe disc) in mod direct;

b)      adresele fizice ocupate de fisier;

c)      controlul accesului la fisier;

d)      informatii de organizare calendaristice.

Pentru controlul accesului la fisiere se utilizeaza o matrice de control al accesului unde a (i, j) = 1 daca utilizatorul i are drept de acces la fisierul j, si 0 in rest.

Clase de utilizatori:

a)      proprietar: cel care creaza fisierul si stabileste drepturi de acces la fisier;

b)      utilizatori specificati: nominalizati de proprietar, cu statut special in raport cu fisierul;

c)      grup sau proiect: care pot folosi impreuna un fisier;

d)      public: restul utilizatorilor.

Moduri de organizare a fisierelor

a)      organizare secventiala;

b)      fisiere in acces direct prin pozitie;

c)      fisiere in acces direct prin continut;

d)      fisiere inverse: pe langa fisierul de baza se creaza in mod automat un fisier invers care contine pentru fiecare cheie specificata, adresele disc la care se afla articolele care contin cheia respectiva. Daca n1, n2, , np sunt numerele de articole care contin cheile 1, 2, , p, iar aij adresa articolului j cu cheia i, atunci, daca j ¹ k, aij ¹ aik i.

e)      fisiere multilista: se definesc atribute si valori cheie. SGF ataseaza fiecarei chei un pointer catre articolul urmator care contine aceeasi cheie. Exista atatea liste cate chei sunt. Fiecare articol participa la c liste, unde c este numarul de scrieri ale articolului, adica numarul de aparitii ale valorii unei chei. Se creaza o zona cu cheile fisierului si adresele primelor articole (fisierul director). Avem ca :

daca j ¹ k atunci aij ¹ aik i;

daca i ¹ k atunci aij ¹ akj , care apare de c ori.

f) fisiere secvential-indexate: articolele sunt scrise pe suport in acces secvential si plasate in ordinea crescatoare a valorilor indexului, rezulta ca se creaza o tabela de indecsi care are o parte principala si o parte de depasire. Exista trei nivele pentru tabelele de indecsi:

nivelul 3: fisier, contine atatea intrari cate volume sunt utilizate;

nivelul 2: volum, contine atatea intrari cati cilindri sunt in volum;

nivelul 1: cilindru, contine atatea intrari cate pagini sunt in cilindrul respectiv.

g)      fisiere selective: au functia de regasire materializata printr-un calcul al CPU, numita functie de randomizare    f : Articolele care au aceeasi valoare pentru functie se numesc sinonime.

h)      fisiere organizate in B - arbori regulari. Fiecare nod este prevazut cu m casute (pentru m chei unice). in fiecare nod pot fi maxim m si minim m div 2 chei. inainte de prima cheie, intre 2 chei si dupa ultima cheie sunt pointeri spre noduri subordonate.

Actiunile SGF la nivel de suport disc

SGF are trei sarcini principale:

a)      sistem de regasire a fisierelor pe disc;

b)      evidenta spatiului neutilizat pe disc;

c)      utilizarea acestui spatiu pentru crearea sau extinderea fisierelor.

Sisteme de cataloage (directoare)

Sunt tabele care contin fisierele existente si informatii necesare accesului la aceste fisiere. Fiecare intrare in director contine un descriptor de fisier. Principalele operatii asupra cataloagelor sunt urmatoarele: cautare, inserare, stergere, listare, salvare/restaurare etc.

Integritatea informatiilor

Deoarece utilizatorul depinde de sistemul de fisiere pentru tot ceea ce vizeaza aspecte legate de lucrul cu datele sale, este esential ca sistemul sa fie dotat cu mecanisme de salvare a informatiilor permitand eventual reconstituirea fisierelor pierdute intr-un accident software sau hardware. Printre metodele comune utilizate in acest sens, sunt urmatoarele:

a)      salvare completa backup , care permite recopierea pe banda magnetica a fisierelor disc, o data la doua sau trei zile. in caz de accident, se pot reconstitui fisierele care existau in momentul ultimului backup;

b)      salvare incrementala, care permite recopierea doar a informatiilor modificate dupa ultimul backup. Aceasta abordare permite reducerea frecventei backup-urilor masive (de exemplu, o data pe saptamana sau pe luna). in cazul reconstructiei fisierelor, procedurile de lucru sunt mai complexe;

c)      dublarea sistematica a fisierelor disc, care consta in a pastra intotdeauna doua copii ale fiecarui fisier pe doua unitati de disc diferite. Aceasta metoda necesita mai putine interventii din partea operatorilor, dar implica dublarea spatiului disc disponibil.

Servere de fisiere

O abordare moderna a gestiunii fisierelor, foarte la moda datorita avantului informaticii distribuite, consta in a incredinta unui calculator independent intreaga gestiune a fisierelor specifice unei comunitati de utilizatori conectati la o retea locala. Un astfel de calculator se numeste server de fisiere. in aceasta arhitectura, partea majora a spatiului disc este concentrata in jurul serverului, celelalte calculatoare din retea nu au nevoie de capacitate disc locala pentru fisierele lor.

O alta realizare recenta, datorata integrarii tot mai pronuntate a calculatoarelor si a retelelor este aceea a sistemelor de fisiere dispersate intr-o retea. Utilizatorul unui astfel de sistem nu stie si nu are nevoie sa stie in care calculator sunt stocate fisierele sale. Sistemul se ocupa de aceste aspecte, astfel: in momentul in care o cerere de acces este adresata sistemului de fisiere, acesta determina pozitia fisierului cautat si, utilizand serviciile retelei, pune la dispozitia solicitantului o copie a fisierului respectiv.

Alocarea resurselor

intr-un mod general, definim o resursa ca fiind un element necesar unui procesor pentru a asigura executia sa in bune conditiuni.

Resursele materiale ale unui sistem informatic (CPU, memorii, dispozitive de intrare/iesire etc.), sunt disponibile in cantitate limitata si trebuie sa fie partajate intre diferite procese.

Produsele software si fisierele, in masura in care acestea pot fi partajate, fac de asemenea parte dintre resursele pe care sistemul trebuie sa le gestioneze.

Mecanismele de alocare ale unei resurse particulare sunt realizate pe diferitele nivele ale sistemului de operare. De exemplu, dispecerul decide daca alocarea CPU si alocarea unui fisier al unui proces este implementata la nivelul gestiunii fisierelor.

Strategia de repartizare si de alocare a resurselor trebuie sa fie determinata global, pentru tot sistemul. La nivelul sistemului, se iau decizii in legatura cu planificarea globala a activitatii, se decide, de exemplu, crearea de noi procese, sau asteptarea, pe baza resurselor disponibile, nivelul de prioritate al unui job.

Obiectivele acestui nivel al sistemului pot fi rezumate astfel:

a)      asigurarea unei bune utilizari a resurselor: contabilizarea si furnizarea de statistici asupra resurselor principale;

b)      crearea de noi procese si atribuirea unui nivel de prioritate corespunzator: se permite fiecarui proces existent in sistem sa obtina resursele necesare in limite de timp rezonabile;

c)      excluderea mutuala a proceselor care solicita aceeasi resursa nepartajabila si si evitarea situatiilor de blocare (asteptare fara sfarsit a unei resurse de catre mai multe procese).

Procesul sistem care se ocupa de toate aceste probleme se numeste planificator scheduler . Planificatorul determina ordinea de executie a job-urilor lansate de utilizatori, el alege momentul pentru lansarea unei executii si refuza accesul unui utilizator interactiv daca numarul de utilizatori conectati poate conduce la o degradare inacceptabila a timpului de raspuns. Scopul planificatorului este de a asigura o exploatare echilibrata si in consecinta un serviciu satisfacator pentru toti utilizatorii.

Interfata utilizator-sistem

Interfata intre utilizator si sistemul de operare se efectueaza prin intermediul unui limbaj, numit limbaj de comanda. Natura acestui limbaj depinde de sistemul considerat.

Sistemele batch sunt dotate cu un limbaj relativ suplu si puternic, permitand utilizatorului sa specifice in avans succesiunea prelucrarilor de realizat, tinand cont de toate alternativele posibile.

Sistemele interactive ofera interfete mai simple prin care utilizatorul poate urmari derularea job-ului sau si decide succesiunea operatiilor pe masura ce se prezinta situatiile posibile.

in majoritatea sistemelor contemporane, modurile de lucru batch si multiacces coexista, iar limbajul de comanda este adaptat in mod corespunzator.

Tendinta actuala este de a simplifica sarcina utilizatorului, propunandu-i un repertoar de comenzi usor de utilizat. Aceste comenzi se exprima sub forma cuvintelor cheie (Login, Logout, Edit, Fortran, Run, File, Copy, Help etc.), urmate de anumiti parametri. Este de asemenea normala procedura de lucru prin care se realizeaza prescurtarea comenzilor (de exemplu, fl in loc de file list) sau regruparea acestora in fisiere executabile, un fel de macro-comenzi, de exemplu, se poate inlocui secventa Compile, Link, Load, Run prin procedura Execute.

Directivele pe care utilizatorul le furnizeaza sistemului cu ajutorul limbajului de comanda sunt interpretate de catre interpretorul de comenzi command interpreter . Acesta citeste comenzile provenind de la terminal si dupa interpretarea acestora realizeaza serviciile solicitate. Deoarece este vorba despre un dialog, sistemul trebuie sa semnaleze faptul ca el 'asculta' si este gata sa primeasca instructiunile utilizatorului, raspunzand comenzilor si comunicand disponibilitatea sa prin afisarea pe ecran a unui caracter special prompt , invitand utilizatorul de a formula noi cereri.

Comenzile trimise catre sistem sunt o forma de cereri la supervizor sistem calls , cu deosebirea ca, in loc sa provina dintr-un program sau dintr-o procedura de biblioteca, aceste comenzi sunt comunicate direct sistemului de catre utilizator.

Majoritatea limbajelor de comanda reflecta structura interna a sistemului de operare, neputand fi schimbate decat cu mare greutate. Totusi, in cazul sistemului Unix, interfata constituita prin interpretorul de comenzi, numita shell, poate fi modificata sau chiar inlocuita de catre utilizator, care poate sa comunice astfel cu sistemul intr-un limbaj convenabil ales.

Shell-ul interpreteaza comenzile provenind de la un terminal sau de la un fisier shell script si poseda structuri de control puternice, permitand executia conditionata sau repetata a unei succesiuni de comenzi.

Cu abordarea shell, este usor de a combina proceduri existente si diverse elemente de programare; adesea se utilizeaza shell-ul pentru a se evita scrierea de noi programe.

Interfata utilizator grafica

Pana la debutul anilor '80, toate interfetele utilizator erau bazate pe limbaje de comanda ca shell-ul sistemului Unix. Pentru fiecare actiune de efectuat, utilizatorul trebuia sa cunoasca si sa tasteze numele comenzii.

in laboratoarele Xerox Park, a fost elaborat un nou tip de interfata, si anume interfata grafica GUI: Graphical User Interface , bazata pe utilizarea unui ecran grafic in locul unui ecran alfanumeric.

Au aparut noi concepte, principalele fiind acelea de ferestre, pictograme, meniuri care defileaza, mouse etc.

Acest tip de interfata a devenit la moda prin intermediul familiei Macintosh elaborata de firma Apple.

La ora actuala, majoritatea sistemelor de calcul utilizeaza interfete utilizator grafice.

Introducerea grafismului in interfetele utilizator a revolutionat lumea informaticii, in principal prin aceea ca permite publicului larg sa utilizeze calculatoarele prin imagine, fara a cunoaste un jargon specific.

Dupa revolutia imaginii se estimeaza ca va veni revolutia sunetului, recunoasterea vocala din cadrul interfetelor om-masina.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2287
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved