Microkernels. Huh?

Started by
5 comments, last by abdulla 17 years, 10 months ago
Doing a little bit of research on microkernel (self interest really) and I haven't found a clear defintion of microkernels. I've read that monolithic kernels are like Windows. But what's like a microkernel? and what the difference between the two?

Beginner in Game Development?  Read here. And read here.

 

Advertisement
I believe that the main difference is that a micro kernel trys to do as much as possible in user space. For reliability and security, typically at the cost of performance. I doubt there's a definite line between micro and monolithic kernels. Like with CISC and RISC processors. where some "RISC" chips have a larger instruction set than than some "CISC" chips.

wikipeda as a far better description than I could give. But you've probably read that already.

Quote:Original wikipedia article
...
The minimum set of services required in a microkernel seems to be address space management, thread management, inter-process communication, and timer management. Everything else can be done in a user program, although in a minimal microkernel, some user programs may require special privileges to access I/O hardware. A few operating systems approach this ideal, notably QNX and IBM's VM.
...



In reality, you have to put anything that talks to hardware into "the" kernel, to achieve good performance. Thus, pretty much all kernels in practical use for most people (Windows, Linux, BSD, MacOSX, etc) are "monolithic" in that a bunch of device drivers share a single address space.

Note that the version of Mach that MacOSX was based on (through its NeXT heritage) is actually a monolithic kernel; Mach didn't go micro-kernel until version 3.0, and evenso, didn't have very good performance in that mode.

In general, in a micro-kernel, you implement message passing, processes, permissions and memory management in the kernel, and everything else is a separate address space (process). Each process for a device driver would be given permission to read/write the address space for its device only (for memory-mapped devices), thus reducing the chance of one device driver screwing up life for another.

Things like file I/O and disk drivers could also be done using message passing in this model (see where the performance bottlenecks start creeping in? :-)
enum Bool { True, False, FileNotFound };
Quote:Original post by hplus0603
Note that the version of Mach that MacOSX was based on (through its NeXT heritage) is actually a monolithic kernel; Mach didn't go micro-kernel until version 3.0, and evenso, didn't have very good performance in that mode.
I don't suppose you have a linkable source for that info? Not because I don't believe you, but because there are a few people whose face I'd like to shove it into.

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
Quote:Original post by Promit
Quote:Original post by hplus0603
Note that the version of Mach that MacOSX was based on (through its NeXT heritage) is actually a monolithic kernel; Mach didn't go micro-kernel until version 3.0, and evenso, didn't have very good performance in that mode.
I don't suppose you have a linkable source for that info? Not because I don't believe you, but because there are a few people whose face I'd like to shove it into.


XNU on Wikipedia might good a good starting place

And some more info on Kernelthread
wikipedia has a great write up on microkernels and the history thereof.
sig
From wikipedia: "After the acquisition of NeXT by Apple, the Mach component was upgraded to 3."

Most people call XNU a hybrid, unless you're of the pure view, then it's monolithic. But I believe they still retain the ability to move things out of kernel space in the future so it has the ability to be a micro. So call what you wanna call it, just know it's a mutant, but a cute one.

This topic is closed to new replies.

Advertisement