Have you ever wondered why it's 'monolithic' and not 'polylithic' ? A real monolithic operating system consists of one piece and if you want to change anything you have to hack the source. Any design that allows more modularity has already some characteristics of a layered-system or a even a bloated ?-kernel.Candy wrote:The use of monolithic in OS kernels does not always imply that it should be a static chunk you can't change without recompile, which is what most people still assume monolithic is.
That's your personal definition and if you use it when designing your operating system I don't mind you building a "monolithic" kernel a bit.Candy wrote:The division between monolithic and microkernel is that a monolithic kernel runs drivers in kernel space, in the reasoning that you can't prevent the system from crashing if the driver is handling irresponsible, so why bother with the extra layer if it's still going to crash. Microkernels are based on the assumption that you can recover from a device or driver crash.
My definition is however that systems can be categorized in monolithic, ?kernel or exokernel by how much flexibility/modularity they provide and to what extend the system policy is defined by the apps rather than the operating system. Whether drivers run in user-space or not is just a detail of the implementation, what really matters is the internal design. How else could you explain that exokernels, which are according to the faq "an attempt to drive the Microkernel concept to the extreme", run all drivers a as part of the operating system in kernel space ?
regards,
gaf