SHPORA.net :: PDA | |
Main FAQ ăóìàíèòàđíûć íàóêè ćńòćńòâćííûć íàóêè ìàòćìàòèśćńêèć íàóêè òćőíèśćńêèć íàóêè b.Alg breada algoritm breada /* citire bloc ?i citire în avans */
intrări: (1) numărul blocului din sistemul de fi?iere pentru citire imediată;(2) numărul blocului din sistemul de fi?iere pentru citire asincronă; ie?ire: buffer cu date din citirea imediată; { if (primul bloc nu este în memoria cache); { obține buffer pentru blocul (1) (algoritm getblk); if (datele din buffer nu sunt valide) inițiază citirea de pe disc; } if (blocul (2) nu este în memoria cache) { obține buffer pentru al doilea bloc (algoritm getblk); if (datele din buffer sunt valide) eliberează bufferul (algoritm brelse); else inițiază citirea de pe disc; } if (blocul (1) era inițial în memoria cache) { cite?te blocul (1) (algoritmul bread); return buffer; } sleep (până când primul buffer alocat conține date valide); return buffer; } Nucleul informează driverul de disc că are un buffer al cărui conținut ar trebui scris, iar driverul planifică blocul pentru operații de I/O. Dacă scrierea este sincronă, procesul apelant se pune în a?teptare până la terminarea operațiilor de I/O, iar la trezire eliberează bufferul. Dacă scrierea este asincronă, nucleul începe scrierea pe disc, dar nu a?teaptă terminarea acesteia. Nucleul va elibera bufferul la terminarea operațiilor I/O. |