MessiahAndrw wrote:What is the threshold before a kernel is considered a microkernel? Placing severs and drivers into their own threads? Placing servers and drivers into their own memory? Running servers and drivers in user mode?
I sort of hinted at an answer in my last post, but to make it more clear: IMO a system is a microkernel if it has all drivers and servers in separate "processes" communicating via IPC. How you implement "processes" is up to you. It could mean separate address spaces using paging, it could mean separate "small spaces" using segmentation, it could mean just a unit of parallelism with no protection whatsoever (like a thread, but with resource ownership and identity), it could mean a software-isolated process that only runs verified type-safe code... It could even be a combination of the above in a single system.
For example, the Process Manager in QNX runs as a separate process. It communicates with other processes via IPC and with the kernel via system calls. However, it also has access to the kernel's address space so it can manipulate the page tables, since it is the memory manager for the entire system. However, despite this sharing of address space QNX is still a microkernel.
I don't know a lot about Amiga OS, but I've heard that it was basically a microkernel with no memory protection. It used message passing and separated all parts of the system into "processes", but all in the same address space.
This debate is like whack-a-mole on this site... it never goes away...