SHPORA.net :: PDA

Login:
регистрация

Main
FAQ

гуманитарные науки
естественные науки
математические науки
технические науки
Search:
Title: | Body:

b.ALG.getblk sc3,4,5

În al treilea scenariu din algoritmul getblk, nucleul trebuie de asemenea să aloce un buffer din FLB. Totuşi, el descoperå că bufferul pe care l-a luat din FLB a fost marcat "delayed write" (scriere întârziată), astfel că trebuie să scrie conţinutul bufferului pe disc înainte de a-l folosi. Nucleul începe o operaţie de scriere asincronă pe disc şi încearcă să aloce un alt buffer din FLB.Când scrierea asincronă se încheie, nucleul eliberează bufferul şi-l plasează la capul FLB (conform politicii ?cel mai puţin recent utilizat?).
În al patrulea scenariu (figura 3.9), nucleul, care acţionează în contul procesului A, nu găseşte blocul disc în lista hq corespunzătoare, astfel că încearcă să aloce un buffer nou din FLB (ca în scenariul al doilea). Totuşi, nu este disponibil nici un buffer în lista bufferelor libere, aşa că procesul A se pune în açteptare până când un alt proces execută algoritmul brelse, eliberând un buffer.Când nucleul planifică pentru execuţie procesul A, trebuie să caute din nou blocul în lista hq. El nu poate aloca imediat un buffer din FLB deoarece este posibil ca unul din procesele care aşteaptau un buffer liber să aloce blocul ales de procesul A.Procesul A eventual va elibera bufferul şi va observa că bufferul este solicitat de alte procese. El trezeçte toate procesele care aşteaptă pe evenimentul "bufferul devine liber", incluzând aici şi procesul B. Când nucleul planifică din nou procesul B, acesta trebuie să verifice dacă bufferul este liber. Un alt proces, C, ce aşteaptă acelaşi buffer, este planificat de nucleu să ruleze înaintea procesului B. Dar procesul C se pune în aşteptare, bufferul rămânând blocat. Din această cauză procesul B trebuie să verifice dacă într-adevăr bufferul este liber.Procesul B trebuie să mai verifice şi dacă bufferul conţine blocul disc pe care l-a cerut iniţial, deoarece procesul C putea să aloce bufferul unui alt bloc, ca în scenariul 2. Când se execută procesul B, acesta verifică dacă bufferul este cel aşteptat, iar în caz negativ este necesar să caute din nou blocul. Dacă ar urma să aloce automat un buffer din FLB, s-ar scăpa din vedere posibilitatea ca un alt proces să fi alocat deja un buffer pentru acel bloc.În final, procesul B va găsi blocul, posibil alocând un nou buffer din FLB conform scenariului al doilea.