You're still missing my point... I'm asking why the kernel has to be general-purpose. No OS on the face of this earth is truly general-purpose. They all have some underlying assumptions about the hardware they run on and the types of applications that they will support.gaf wrote:In fact the x86 is meant as a general purpose architecture and you can run a huge variety os apps on it. You've enumerated some of them yourself already and my idea would be to provide programmers with a number of libOS that are specialized for such systems.
Some examples: QNX has scheduling policies in the kernel that make sense for a real-time OS, but not necessarily for a server OS where throughput is paramount. Most desktop OSes were designed for standalone machines before everyone had Internet connectivity, so they are plagued by security problems. Etc....
So, by pushing all policy out of the kernel (including things like how to manage IRQs... I read the Omega0 paper... yikes!) it seems to me that the purpose is to create a completely general purpose kernel (i.e. -- to let apps do whatever they want with the resources that they are given).
To me, this seems like a point at the far end of the spectrum from OSes like Linux, for example. There are a gazillion different versions of Linux out there, each compiled for a particular purpose (server, smartphone/PDA, desktop, etc.). To me, this sounds like bad engineering in the sense that you have to modify source code (or at least re-compile with different options) to adapt the OS to a different environment and set of assumptions. I'm sure you agree. However, from a real-world standpoint, it gets the job done.
An example that's closer to the middle of the spectrum would be QNX. It has a microkernel that works more or less the same way regardless of the hardware that it's running on, but a customer that wants to use it in some custom embedded system is free (AFAIK) to replace the default Process Manager with their own, or at least leave it out. QNX wasn't designed to allow for multiple pagers the way that L4 was, but has enough flexibility in its design to allow for a different pager, or no pager. Unlike Linux, this doesn't require the modification of source code. Unlike L4, this doesn't allow for radical policy changes at run-time either.
So my question is, why go to the other extreme and make the OS adapatable at run-time? Isn't that overkill? I'm asking this independently of the other advantages of exokernels. Why is this degree of flexibility, in and of itself, a good thing?
No one says you can't run different types of applications on systems they're not suited for. You just might not get the performance you expect. I was talking about the roles that OSes tend to play in actual usage, not on any particular limits imposed by the OS.What's the advantage of making it static ? This would mean that you couldn't even run a game on your "desktop" machine because it has a different user-level manager - hardly practical in my opinion..
It's not flexibility that makes an OS fast, it's the avoidance of excessive overhead. If these two things happen to coincide within the exokernel design, then great.Why, if not due to its flexible design, should an exokernel be any faster than a traditional OS ?
But you keep talking about capabilities... If this concept is not inexorably tied to the exokernel design, then why keep bringing it up as an advantage?Security largly depends on the user-space manager design, and if they are monolithic it's not any better either.
Yep, I get that. I think what's missing is a discussion of how the root-manager can later revoke capabilities from the lower-level managers when resource usage becomes unbalanced. Which brings up the question of how much policy is in the root-managers and what these policies might look like. And how well do they work. Sigma0 for example seems pretty useless to me from a policy point of view. The top-level pagers under sigma0 pretty much have to duke it out amongst themselves if they want to rebalance their memory resources.Yep, the kernel sets up a capability that spans the whole device and sends it to a root-manager. The root-manager can then split this capability and pass it on to other lower level managers.
...continued...