• Support automatic growth of the stack part of the process address space in the event that the stack fills the space allocated to it. You will need to decide on a way for your kernel to detect that the stack needs to grow, and on a mechanism for expanding the address space.
  • Support a general shared-memory facility using SharedMemOpen and SharedMemClose (as defined in syscall.h). For example, this allows two or more processes to request a chunk of shared memory of a specified size. Note that this can also be used to implement dynamic memory allocation by choosing a name that has a low probability of being guessed.
  • Provide support for automatic sharing of read-only code pages between address spaces. That is, if the same program is loaded into more than one process' address space, any pages that hold program code should not appear more than once in physical memory. To simplify the problem, assume that programs with the same name will use the same executable, and that the executable will not change.