SHPORA.net :: PDA

Login:
регистрация

Main
FAQ

гуманитарные науки
естественные науки
математические науки
технические науки
Search:
Title: | Body:

d.Apel,sis.write

Sintaxa apelului sistem write este:
^număr= write(fd, buffer, contor);
unde semnificaŢia variabilelor număr, fd, buffer, contor este cea prezentată în descrierea apelului read.^Algoritmul pentru scrierea unui fişier regulat este similar celui de citire. Dacă fişierul nu conŢine un bloc corespunzător offsetului la care trebuie efectuată scrierea, atunci nucleul alocă un nou bloc folosind algoritmul alloc şi înscrie numărul blocului în poziŢia corespunzătoare a tabelei de conŢinut din inod. Dacă offsetul corespunde unui bloc de indirectare, nucleul va trebui să aloce un număr corespunzător de blocuri ce vor fi utilizate ca blocuri de indirectare şi blocuri de date. Pe durata operaŢiei de scriere inodul este blocat, deoarece nucleul poate schimba inodul când alocă blocuri noi. PermiŢându-se altor procese accesul la fişier s-ar putea corupe inodul dacă mai multe procese ar aloca simultan blocuri pentru acelaşi offset. Dacă câmpul din inod ce conŢine dimensiunea fişierului a fost modificat, la încheierea operaŢiei de scriere nucleul îl actualizează. ^Să presupunem că un proces scrie într-un fişier octetul cu numărul 10.240, care este totodată octetul cu cel mai mare număr de ordine. Când accesează octetul (folosind algoritmul bmap), nucleul determină că lipseşte blocul de date şi cel de indirectare corespunzătoare acelui octet. Astfel, el alocă un bloc disc ce va fi utilizat ca bloc de indirectare şi scrie numărul blocului în inodul din memorie. Apoi, alocă un bloc disc ce va fi utilizat ca bloc de date şi scrie numărul blocului în prima poziŢie a blocului de indirectare anterior alocat.
Scrierea se face întru-un ciclu intern, asemănător algoritmului read. Pe durata unei iteraŢii nucleul va scrie un singur bloc disc. ïn acest sens, va determina dacă va scrie înteg blocul sau numai o parte din el. Dacă scie doar o parte, va trebui mai întâi să citească blocul de pe disc, pentru a conserva datele ce nu se vor modifica. Citirea nu mai este necesară în cazul scrierii întregului bloc, deoarece se va modifica tot conŢinutul său. Nucleul utilizează scrierea întârziată a blocurilor pe disc (delayed write, vezi 3.4), păstrându-le în cache cât mai mult timp posibil, pentru a oferi şi altor procese posibilitatea de a le scrie sau citi fără a mai executa operaŢii de I/O cu discul.