Suggestions
Last updated
Last updated
We suggest the following initial order of implementation:
Frame table (see section ).
Change process.c
to use your frame table allocator.
Do not implement swapping yet. If you run out of frames, fail the allocator or panic the kernel.
After this step, your kernel should still pass all the project 2 test cases.
Supplemental page table and page fault handler (see section).
Change process.c
to record the necessary information in the supplemental page table when loading an executable and setting up its stack.
Implement loading of code and data segments in the page fault handler.
For now, consider only valid accesses.
After this step, your kernel should pass all of the project 2 functionality test cases, but only some of the robustness tests.
From here, you can implement page reclamation on process exit.
The next step is to implement eviction (see section ).
Initially you could choose the page to evict randomly.
At this point, you need to consider how to manage accessed and dirty bits and aliasing of user and kernel pages.
Synchronization is also a concern: how do you deal with it if process A faults on a page whose frame process B is in the process of evicting?
Finally, implement a eviction strategy such as the clock algorithm.