Colonel Kernel wrote:What I mean is, is it necessary to have this mix of different policies on a single machine, swappable at run-time? In the real world, aren't most application mixes pretty predictable based on the role of the machine (controller, desktop, gaming rig, DB server, router, etc.)?
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.
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..
Colonel Kernel wrote:I think in reality the benefits of exokernels are more in the areas of security and performance rather than flexibility and generality...
Why, if not due to its flexibe design, should an exokernel be any faster than a traditional OS ? Security largly depends on the user-space manager design, and if they are monolithic it's not any better either.
Colonel Kernel wrote:Does this mean that the user-space servers have to quarrel negotiate amongst themselves to re-allocate resources of the same type that they share? Or does there have to be a root server for each type of resource (c.f. sigma0)?
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.
Colonel Kernel wrote:Does this mean that each "paging server" actually has its own pager thread for itself, whose pager thread is in turn in a higher-level "paging server"? The fact that pagers are threads sometimes throws me for a loop...
The pager itself will hardly be more than a few megs in size, paging it out therefore doesn't make any sense. You would just take one of the pages it has passed on to its apps which can then also be dirty..
Colonel Kernel wrote:I think I have a better solution though -- have the kernel "tax" process memory for thread creation.
Wouldn't it be easier if the task had to pay the tay right way ? In my opinion the idea requires too much book-keeping (every time a resource in allocated/delocated) just to make sure that the kernel won't run out of memory, but it should nevertheless work. If you just want to prevent DOS attacks, I'd be more practical to require caps for the creation af tasks etc..
JoeKayzA wrote:Assuming that the 'user level pager' is located inside the app (or the libOS) now, I still can't see the benefit of letting it decide which page should be paged out on a low-memory-situation
Well.. finding the right page is what it's all about and there are many ways of trying to do this (working set, LRU approximation, global policy <-> local policy). Apart from that the pager might also decide which app has to evict a page and can thus, for example, spare an important app. Maybe MM just wan't the best example in the first place as it's quite theoretic..
JoeKayzA wrote:Assuming that the user level pager is a process of its own, this still looks like a normal, pure microkernel system to me...maybe we just have a terminology problem?
There's no fundamental difference between microkernels and exokernels, it's a qualitive matter. In a ?kernel the user-space pager would decide about the whole paging policy itself while in an exokernel the pager only decide about the
minimum policy needed and leave the rest to the app.
JoeKayzA wrote:And, yes, when you put fairness and priority issues into the system again, what piece of 'policy' will still remain for the apps?
If you expand the CoyotOS scheme a bit it's roughly how my own scheduler will work
:
- The (root) task manager gets a capability for the whole CPU
- It can then split it up (50%, 50%) and pass the new caps to two lower level schedulers
- Each lower level scheduler can use its cap to create apps which together my only use 50% of the CPU
- Apps can use the cap they got from the schedluer to start threads, the threads may not use more CPU time than the app holds
The mechanism here is the capability system, the policy is to decide who gets how much..
regards,
gaf