16.05.2015 Views

Working with the Unix OS

Working with the Unix OS

Working with the Unix OS

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!