You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Process Scheduling<br />
algorithm swapper /* swap in swapped out processes,<br />
* swap out o<strong>the</strong>r processes to make room */<br />
input: none<br />
output: none<br />
{<br />
loop:<br />
for (all swapped out processes that are ready to run)<br />
pick process swapped out longest;<br />
if (no such process)<br />
{<br />
sleep (event must swap in);<br />
goto loop;<br />
}<br />
if (enough room in main memory for process)<br />
{<br />
swap process in;<br />
goto loop;<br />
}<br />
for (all processes loaded in main memory, not zombie and not locked in memory)<br />
{<br />
if (<strong>the</strong>re is a sleeping process)<br />
choose process such that priority + residence time<br />
is numerically highest;<br />
else /* no sleeping processes */<br />
choose process such that residence time + nice<br />
is numerically highest;<br />
}<br />
if (chosen process not sleeping or residency requirements not satisfied)<br />
sleep (event must swap process in);<br />
else<br />
swap out process;<br />
goto loop;<br />
}<br />
Figure 60. Algorithm<br />
for Swapper<br />
No "ready-to-run" processes exist on swap device: swapper goes to sleep<br />
Swapper finds an eligible process to swap in but system does not contain enough memory: swapper attempts to<br />
swap ano<strong>the</strong>r process out.<br />
Zombie processes do not get swapped out, <strong>the</strong>y do not take up any physical memory.<br />
The kernel swaps out sleeping processes ra<strong>the</strong>r than II ready-to-run II processes, <strong>the</strong>y have a greater chance of<br />
being scheduled soon.<br />
A "ready-to-run" process must be core resident for at least 2 seconds before being swapped out, and a process to be<br />
swapped in must have been swapped out for at least seconds.<br />
The swapper awakens<br />
- once a second by <strong>the</strong> clock<br />
- if ano<strong>the</strong>r process goes to sleep<br />
The swapper swaps out a process based on its<br />
- priority<br />
- memory residence time<br />
- nice value<br />
Swap out groups of processes only if <strong>the</strong>y provide enough memory for <strong>the</strong> incoming process.<br />
If <strong>the</strong> swapper sleeps because it could not find enough memory to swap in a process, searches again for a process to<br />
swap in although it had previously chosen one. O<strong>the</strong>r swapped processes have awakened in <strong>the</strong> meantime.<br />
If <strong>the</strong> swapper attempts to swap out a process but cannot find space on <strong>the</strong> swap device, a system deadlock could<br />
arise if:<br />
- all processes in main memory are asleep<br />
- all "ready-to-run" processes are swapped out<br />
- <strong>the</strong>re is no room on <strong>the</strong> swap device for new processes<br />
- <strong>the</strong>re is no room in main memory for incoming processes.<br />
178