a.ALG.getblk sc1,2

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


algoritm getblk
intrări: numărul sistemului de fişiere;
numărul blocului;
ieşire: buffer blocat care poate fi asociat blocului
{
while (bufferul nu este găsit)
{
if (blocul este în listele hq)
{
if (buffer ocupat) /* scenariul 5 */
{
sleep (până bufferul devine liber);
continue; /* salt la while */
}
marchează bufferul ocupat; /* scenariul 1 */
şterge bufferul din FLB;
return buffer;
}
else /* blocul nu este în listele hq */
{
if (nu există buffere în FLB) /* scenariul 4 */{
sleep (până când orice buffer devine liber);
continue; /* salt la while */
}
şterge bufferul din FLB;
if (bufferul marcat pentru scriere întârziată)
{ /* scenariul 3 */
scriere asincronă a bufferului pe disc;
continue; /* salt la while */
}
/* scenariul 2 -- se găseşte un buffer liber */
şterge bufferul din vechea listă hq;
pune bufferul în noua listă hq;
return buffer;
}
}
}
Când citeşte date dintr-un anumit bloc disc, nucleul verifică dacă blocul este în pool. Dacă nu este îi asignează un buffer liber. Când scrie datele unui anumit bloc disc, nucleul verifică dacå blocul este în pool-ul de buffere, iar dacă nu este, asignează un buffer liber pentru acest bloc. Algoritmii pentru citirea şi scrierea blocurilor disc utilizează algoritmul getblk pentru alocarea de buffere din pool.
1. Nucleul găseşte blocul în lista hq, iar bufferul este liber;
2. Nucleul nu găseşte blocul în lista hq, astfel că el alocă un buffer din FLB;
3. Nucleul nu găseşte blocul în lista hq şi încercând să aloce un buffer din FLB (ca în scenariul 2), îl găseşte marcat "delayed write". Nucleul trebuie să scrie acest buffer pe disc şi să aloce alt buffer.
4. Nucleul nu poate găsi blocul în lista hq, iar FLB este goală.
5. Nucleul găseşte blocul în lista hq, dar bufferul este momentan ocupat.