SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

c.Alg bwrite

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ă.