b.Alg breada
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.