Ready4Dis wrote: In my micro kernel, trusted drivers are loaded with more access than users (in the cases that require it)... in my monolithic kernel, drivers are dynamically linked against my kernel in kernel space if they are trusted... I still fail to see any difference. In both of my kernels I need to trust a driver to do what it should and give it access that it needs. My DMA code for my micro and mono are (going to be) 100% identical besides the calling convention which is abstracted away in a library.
I think I have identified the Layne's Law[1] issue at the root of this disagreement. Strictly speaking, both of these would be considered hybrid kernels by the definitions used by most of the people here. As classically defined, a monolithic kernel has all drivers and other system components linked into a single executable prior to operating, while a microkernel (again, following the strict definition) has all non-kernel system components (including drivers) running as unprivileged user processes (they also usually do not allow for sharing memory except in the IPC system, and only allow processes to communicate through message passing regardless of privilege[2], so sharing the DMA space would violate the system model). Dynamically loading drivers into kernel space and giving partial system privileges to user processes are defining characteristics of two different approaches to writing hybrid kernels.
To be fair, hardly anyone writes strictly monolithic or strictly microkernel systems any more, but defining our terms in a way that everyone can agree on them is both difficult and important.
1) Layne's Law:
Most forum debates boil down to disagreements over how you define your terms.
2) Indeed, a classic microkernel doesn't even have system calls in the strict sense, but passes system service requests as messages as well. Historically, microkernels were associated mainly with systems lacking hardware memory management (e.g., AmigaOS on the 68000 models), and often with CPUs that had no separation of privileges, such as the 8088[3] (Minix v.1 and v.2, early versions of Qnx) and the 6809 (OS-9). Limiting the interface between processes was a key objective under such systems.
3. Before any one asks: no, MS-DOS was not a microkernel. Monotasking operating systems, particularly those which don't have a kernel
per se, are (under strict terminology) described as 'executive monitors', specifically resident executives in the case of MS-DOS (since it normally would stay in memory while the user program was running).