Advanced Operating Systems
M2: A pager
Use your memory manager from M1 to write a simple pager. The pager should allow ELF files to run from the boot file, however rather than having their stack allocated in physical memory, it should just use virtual memory. This should allow you to execute user processes in place, i.e. from the boot image. Note that in general a program can ony be executed in-place once, afterwards global variables may have incorrect values.
Probably the main thing that you should consider here is the layout of your processes address space. Some things you will want to consider is where you place various parts of memory such as the stack, heap and code segments. You may also have some other regions in your process address space, one of these is the UTCBs.
You should also think about if you want to make different ranges of the address space have different permissions, eg: you may want to make code read-only to prevent bugs, or have a guard page at the end of your stack to prevent overflow.
The other, obvious, thing you will want to think about is the type of page table to use. You should take into account the fact that you are going to be running this on a 64-bit machine, so you should have a page table structure that supports large address spaces.
While it is not necessary for this milestone, at some point you will need to support applications with a malloc heap (like brk or mmap). You should take this into account with your design.
The main demonstration here will be to show a user process running with a high stack pointer (> 0x800000).
You should also be able to explain to the tutor how your code works and any design decisions you took.
Last modified: 06 Aug 2004.