SHPORA.net :: PDA | |
Main FAQ ăóìàíèòàđíûć íàóêè ćńòćńòâćííûć íàóêè ìàòćìàòèśćńêèć íàóêè òćőíèśćńêèć íàóêè b.Apel.sist,read ^algoritm read
^intrări: descriptorul de fi?ier adresa bufferului din spaȚiul de memorie al ^procesului utilizator numărul de octeȚi ce se dore?te a fi citit ^ie?ire: numărul de octeȚi copiaȚi în spaȚiul utilizator { ^găse?te intrarea din GFT corespunzătoare descriptorului de fi?ier; ^verifică drepturile de acces la fi?ier; ^stabile?te parametrii din u area implicaȚi în operaȚia de I/O; /* adresa din spaȚiul utilizator, contorul cu numărul de octeȚi ce trebuie R/W, modul de I/O */ ^găse?te inodul corespunzător din intării din GFT; ^blochează inodul; ^stabile?te offsetul din u area la valoarea existentă în intrarea din GFT ^while (nu s-a ajuns la numărul dorit de octeȚi citiȚi) { ^converte?te offsetul în fi?ier în număr de bloc disc ( algoritm bmap); ^calculează offsetul în bloc, numărul de octeȚi ce vor fi citiȚi; ^if (numărul de octeȚi ce vor fi citiȚi este 0) /* încercare de a citi sfâr?itul fi?ierului */ ^break; /* se iese din ciclu */ ^cite?te blocul;/* algoritmul breada sau bread */ ^copiază datele din bufferul sistem la adresa din spaȚiul utilizator; ^reactualizează câmpurile din u area; /* offsetul în fi?ier, contorul, adresa utilizator */ ^deblochează bufferul; /* blocat în bread */ } ^deblochează inodul; ^actualizează offsetul din GFT pentru următoarea operaȚie de citire; ^return (numărul total de octeȚi citiȚi); } |