uKernel Paging Management
Posted: Sun Dec 02, 2007 4:47 pm
I'm doing Computer Science, and I'm still alive.
Anyway, I've long since given up on my original idea of a microkernel based on portal IPC. It just doesn't create a useful environment for application development.
However, I read up on Plan 9 from Bell Labs, and consider it an extremely elegant OS. I'd like to write a micro-kernel to act as a Plan-9-like "server multiplexer" using 9P2000. File-related system calls get translated by the kernel into 9P2000 messages (or messages in a slightly modified protocol, see below), which the kernel then sends to actual servers. Servers, however are implemented as portals - with absolutely fixed protocols (ie: parameter and return-value passing conventions) made only for receiving 9P requests and returning responses - instead of processes that perform complicated, standard asynchronous message-passing.
I want it to be a micro-kernel so that it can scale up or down, from embedded devices like smart-phones to huge servers in corporate data-centers. This way, users could construct a computer system tailored to their needs by linking various desired devices running this system and having them authenticate with one another.
However, a micro-kernel always has the trouble of how to handle virtual memory. Many simply don't support it, but I don't believe a modern general-purpose operating system can really go without it. I liked how L4 handled the problem by providing a mechanism for user-space to handle its own damn paging, but that complicated the IPC APIs beyond the point of usefulness.
Can anyone think of a good virtual memory mechanism for a microkernel that doesn't complicate the APIs that way? The best I've been able to think of is adding a mechanism for sending single pages that would look and work like the rendezvous call from Plan 9.
Anyway, I've long since given up on my original idea of a microkernel based on portal IPC. It just doesn't create a useful environment for application development.
However, I read up on Plan 9 from Bell Labs, and consider it an extremely elegant OS. I'd like to write a micro-kernel to act as a Plan-9-like "server multiplexer" using 9P2000. File-related system calls get translated by the kernel into 9P2000 messages (or messages in a slightly modified protocol, see below), which the kernel then sends to actual servers. Servers, however are implemented as portals - with absolutely fixed protocols (ie: parameter and return-value passing conventions) made only for receiving 9P requests and returning responses - instead of processes that perform complicated, standard asynchronous message-passing.
I want it to be a micro-kernel so that it can scale up or down, from embedded devices like smart-phones to huge servers in corporate data-centers. This way, users could construct a computer system tailored to their needs by linking various desired devices running this system and having them authenticate with one another.
However, a micro-kernel always has the trouble of how to handle virtual memory. Many simply don't support it, but I don't believe a modern general-purpose operating system can really go without it. I liked how L4 handled the problem by providing a mechanism for user-space to handle its own damn paging, but that complicated the IPC APIs beyond the point of usefulness.
Can anyone think of a good virtual memory mechanism for a microkernel that doesn't complicate the APIs that way? The best I've been able to think of is adding a mechanism for sending single pages that would look and work like the rendezvous call from Plan 9.