SHPORA.net :: PDA | |
Main FAQ ăóìàíèòàđíûć íàóêè ćńòćńòâćííûć íàóêè ìàòćìàòèśćńêèć íàóêè òćőíèśćńêèć íàóêè b.reincarcarea proces Dacă swapper-ul nu găse?te nici un proces de evacuat ?i dacă nici unul dintre procesele care trebuiesc încărcate nu au stat evacuate cel puțin 2 secunde, atunci swapper-ul se pune în a?teptare pe evenimentul: dore?te să încarce un proces în memorie dar nu are loc suficient. Ceasul va trezi swapper-ul la fiecare o secundă. Nucleul treze?te de asemenea swapper-ul dacă un alt proces intră în starea de a?teptare, devenind astfel mai potrivit de a fi evacuat decât procesele examinate anterior de către swapp-er. Dacă swapper-ul evacuează un proces sau dacă se pune în a?teptare pentru că nu poate evacua un proces, el î?i va relua execuția cu începutul algoritmului, încercând să încarce un proces.
--Algoritmul swapper: ^algoritm swapper /*încarcă procesele executate, evacuează alte procese pentru a face loc*/ ^intrare: nici una; ^ie?ire: nici una; { buclă: ^for (toate procesele evacuate care sunt "ready to run") ^alege procesul care a stat cel mai mult evacuat; ^if (nu există asemenea proces) { ^sleep(eveniment: trebuie să încarce); ^salt la buclă; } ^if (este loc suficient pentru proces în memoria principală) { ^încarcă procesul; ^salt la buclă; } /*bucla2 */ ^for (toate procesele încărcate în memoria principală, care nu sunt zombie ?i nu sunt blocate în memorie) { ^if (există un proces în a?teptare ) alege procesul pentru care valoarea prioritate+timp de rezidență este cea mai mare; ^else (nu sunt procese care a?teaptă ) ^alege procesul pentru care valoarea timp de rezidență+nice este cea mai mare: } ^if (procesul ales nu este în a?teptare sau cerințele de rezidență nu sunt satisfăcute ) ^sleep(eveniment : trebuie să incarce un proces); ^else ^evacuează procesul; ^salt la buclă; /*goto buclă 2 */ |