Supporting shared memory
The memory manager should support shared memory, and virtual memory eventually. It may be used by applications (for example, to exchange data efficiently between processes) and other subsystems (perhaps to exchange data between application and kernel).
As a subsystem, the memory manager will provide implementations of Subsystem_SwitchIn and Subsystem_SwitchOut so that it can swap a process's memory in just before it regains CPU control.
Other kernel modules should be able to claim their own unswitched mapping for portions of application memory, so that they can directly write into or read from application buffers without having to switch the application in. When the buffer is sufficiently processed, the module can signal to unblock the application.