c.Alg bwrite

Сделай свою wap-шпаргалку =) попробуй конструктор сайтов http://www.panweb.com/


algoritm bwrite /* scriere bloc */
intrare: buffer;
ie?ire: niciuna;
{
iniюiazг scrierea pe disc;
if (operaюiile de I/O sunt sincrone)
{
sleep (pвnг la terminarea operaюiilor de I/O);
elibereazг bufferul (algoritm brelse);
}
else if (bufferul este marcat pentru scriere оntвrziatг)
marcheazг bufferul sг fie pus оn capul FLB;
}
O scriere оntвrziatг este diferitг de o scriere asincronг. Cвnd are loc o scriere asincronг, nucleul оncepe imediat operaюia cu discul, dar nu a?teaptг ca ea sг se termine. La o scriere оntвrziatг, nucleul amвnг scrierea pe disc cвt se poate de mult, iar apoi, urmвnd al treilea scenariu din algoritmul getblk, marcheazг bufferul ca "vechi" ?i scrie asincron blocul pe disc. La оncheiarea operaюiei, controlerul de disc оntrerupe sistemul ?i elibereazг bufferul (folosind algoritmul brelse) care este pus оn capul FLB, deoarece era marcat "vechi". Din cauza celor douг operaюii de I/O asincrone, citirea blocului оn avans ?i scrierea оntвrziatг, nucleul poate invoca algoritmul brelse dintr-o rutinг de tratare de оntrerupere. Din aceastг cauzг, el trebuie sг blocheze оntreruperile оn orice procedurг care manipuleazг FLB deoarece brelse plaseazг bufferele оn aceastг listг.