SHPORA.net :: PDA

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

Main
FAQ

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

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.