CATEGORII DOCUMENTE |
Apelul sistem write - UNIX
Sintaxa apelului sistem write este:
numar= write(fd, buffer, contor);
unde semnificatia variabilelor numar, fd, buffer, contor este cea prezentata in descrierea apelului read.
Algoritmul pentru scrierea unui fisier obisnuit este similar celui de citire. Daca fisierul nu contine un bloc corespunzator deplasamentului la care trebuie efectuata scrierea, atunci nucleul aloca un nou bloc folosind algoritmul alloc si asigneaza numarul blocului in pozitia corespunzatoare a tabelei de cuprins din inod. Daca deplasamentul corespunde unui bloc de indirectare, nucleul va trebui sa aloce un numar corespunzator de blocuri ce vor fi utilizate ca blocuri de indirectare si blocuri de date. Pe durata operatiei de scriere inodul este blocat, deoarece nucleul poate schimba inodul cand aloca blocuri noi.
Permitandu-se altor procese accesul la fisier s-ar putea altera informatiile din inod daca mai multe procese ar aloca simultan blocuri pentru acelasi deplasament. Daca dimensiunea fisierului a fost modificata, la incheierea operatiei de scriere nucleul actualizeaza campul dimensiune fisier din inod.
Sa presupunem ca un proces scrie intr-un fisier octetul cu numarul 10240, care este totodata octetul cu cel mai mare numar de ordine. Cand acceseaza octetul (folosind algoritmul bmap), nucleul determina ca lipseste blocul de date si cel de indirectare corespunzatoare acelui octet. Astfel, el aloca un bloc disc ce va fi utilizat ca bloc de indirectare si scrie numarul blocului in inodul din memorie. Apoi, aloca un bloc disc ce va fi utilizat ca bloc de date si scrie numarul blocului in prima pozitie a blocului de indirectare anterior alocat.
Scrierea se face intru-un ciclu intern, asemanator celui din algoritmul pentru citire. Pe durata unei iteratii nucleul va scrie un singur bloc disc. In acest sens, va determina daca va scrie intregul blocul sau numai o parte din el. Daca scrie doar o parte, va trebui mai intai sa citeasca blocul de pe disc, pentru a conserva datele ce nu se vor modifica. Citirea nu mai este necesara in cazul scrierii intregului bloc, deoarece se va modifica tot continutul sau. Nucleul utilizeaza scrierea intarziata a blocurilor pe disc (delayed write, vezi 3.4), pastrandu-le in cache cat mai mult timp posibil, pentru a oferi si altor procese posibilitatea de a le scrie sau citi fara a mai executa operatii de I/O cu discul.
Folosirea scrierii intarziate este utila in cazul pipe-urilor deoarece un alt proces va citi datele si le va sterge (vezi 5.12), si chiar in cazul fisierelor obisnuite ce sunt create temporar. De exemplu, multe programe cum ar fi cele de posta electronica, editoarele de texte, creeaza fisiere temporare in directorul "/temp", pe care le sterg dupa putin timp. Utilizarea scrierii intarziate, poate reduce numarul de scrieri pe disc pentru fisierele temporare.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1173
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved