SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

b.Apel sis.open

Nucleul caută fi?ierul în cadrul sistemului de fi?iere folosind algoritmul namei (vezi figura 5.2). După ce găse?te inodul din memoria internă, se verifică permisiunile de acces la fi?ier, iar dacă acestea sunt corespunzătoare, se alocă o intrare în GFT pentru fi?ierul ce este deschis. O intrare în GFT conȚine: un pointer către inodul fi?ierului deschis, tipul deschiderii fi?ierului (citire ?i/sau scriere), deplasamentul (offsetul) de la care nucleul urmează să execute următoarea citire sau scriere. Nucleul iniȚializează această valoare cu 0 pe durata aplelului open, ceea ce înseamnă că prima citire sau scriere se va face, implicit, de la începutul fi?ierului. De asemenea, un proces poate deschide un fi?ier pentru adăugare, caz în care nucleul va iniȚializa offsetul cu valoarea lungimii fi?ierului. Nucleul alocă o intrare în UFDT, iar valoarea indexului din tabelă corespunzător acestei intrări este descriptorul de fi?ier returnat utilizatorului. Intrarea din UFDT conȚine un pointer către intrarea corespunzătoare din GFT.Să presupunem că un proces execută următorul cod: deschide fi?ierul "/etc/passwd" de două ori, odată doar pentru citire, iar a doua oară pentru citire-scriere, ?i fi?ierul "local" odată, pentru scriere.
^fd1 = open("/etc/passwd", O_RDONLY);
^fd2 = open("local", O_WRONLY);
^fd3 = open("/etc/passwd", O_RDWR);
Fiecare open returnează procesului un descriptor de fişier, iar intrarea corespunzătoare din UFDT pointează către o intrare proprie din GFT, chiar dacă un fişier ("/etc/passwd") este deschis de două ori. Intrările din GFT corespunzătoare aceluiaşi fişier pointează către o singură intrare din IT.
Să presupunem că un al doilea proces execută următorul cod:
fd1=open("/etc/passwd",O_RDONLY);
fd2=open("private",O_RDONLY);