Why do people keep repeating the same myths about microkernels? These myths have been proven false but they keep persisting and people keep repeating them.
Microkernels aren't more complex , in fact the whole point behind microkernels is for a more reliable and simpler design overall by separating things into lots of simpler services.
Micro-kernels aren't slower , yes some were slower but that was due to poor design decisions to do with process handling and inter-process communication. There are simple solutions to handling that. If one adopts the simple solution of switching to the IPC destination instead of letting the scheduler treat it like a normal scheduling event , we avoid the slowdown because we avoid the latency of having to wait for two additional scheduler rounds.
When it comes to size, there isn't any significant penalty in either memory usage or lines of code , and memory usage can be smaller due to only having the necessary services and drivers loaded, and loading them on demand.
Micro-kernels require paying attention to process handling , inter-process communication and memory management but you need to pay attention to them anyway since they are exactly the same things you need to pay attention to when it comes to multi-{threaded/process} programs.
Just google either for "Minix" or "Coyotos" (sadly defunct due to the creator taking a job elsewhere) and you'll find plenty of information about microkernels, their advantages and how their challenges are approached.Originally Posted by kraftman
You'll also note that although Minix inspired Linux, Linux did not adopt the same microkernel design. Generally speaking in the past it seems to have added a lot of complexity for little real-world benefit, though as the number of CPU cores continues to increase we may have to switch to a more distributed kernel model to make best use of them.
What are you talking about? Of course they are slower, communicating through message passing will always be slower than communicating through shared memory. It's true that microkernels have worked hard on improving the speed of message passing, like grouping chunks of messages instead of passing them one by one for example. BUT IT IS STILL SLOWER. That's the price you pay for the safety of truly separated processes were if one crashes it won't bring down the system or even any other process, sometimes it's worth that price but again IT'S SLOWER. Microkernels has some undeniable benefits but speed certainly isn't one of them.
Indeed. I was reading about the latest version of Minix yesterday after reading this thread and one thing one article said was that writing to an I/O port through the microkernel only took 500 nanoseconds. Which doesn't sound so bad until you realise that it's typically 1,000-1,500 clock cycles on a modern CPU.
Fortunately it's not something that drivers do often (I'm guessing 90+% of I/O these days is memory mapped) and I/O writes are slow anyway, but it's still a pretty significant amount of time for what would otherwise be a simple instruction in the kernel.
That said, kernel performance probably doesn't matter much in normal desktop use; it's much more important in specialised uses like high-performance web servers where you really don't want to be taking the hit of continually going in and out of user space to send network packets.