There aren't enough words...

By: Rob Thorpe (, May 9, 2006 2:39 am
Room: Moderated Discussions
Bill Todd ( on 5/9/06 wrote:
>Tzvetan Mikov ( on 5/8/06 wrote:
>>Bill Todd () on 5/8/06 wrote:
>>>Understanding NT's characterization as micro-kernel-related probably requires knowing
>>>something about how it evolved. In the beginning, it had (at least) three distinct
>>>personalities: Windows, POSIX, and OS/2 (IIRC). Each personality (and much of
>>>the graphics system as well) was implemented as a user-space service which applications
>>>needing it accessed via message passing (IRPs are kernel constructs which have nothing
>>>to do with the message-passing facilities being referred to).
>>>Graphics support got inhaled into the kernel proper after performance became an
>>>issue. POSIX and OS/2 support withered and the Windows 'personality' became little
>>>more than a set of user-mode library stub interfaces rather than a separate protected user-mode server.
>>>Even in the beginning NT's kernel contained considerably more than a classic micro
>>>kernel, but it at least had *some* resemblance to one.
>>Although you are factually correct, I disagree with your interpretation. The resemblance
>>you are refering to is not in important aspects of the design - it is like saying
>>that a car resembles a train because they both have windows.
>Hmmm - sounds a bit like blustering to me, and from someone who didn't understand
>the difference between IRPs and messages that may not be surprising.
>The 'sharing of architectural concepts or mechanisms' says nothing about the relative
>importance of doing so - just about some level of commonality in approaches. Nor
>does calling something a 'hybrid' suggest that it's anything close to identical
>to any parent - again, just that it shares some characteristics, to some degree.
>>In my understanding, the personalities (Win32,OS/2,POSIX) are mostly user-mode
>>libraries mapping the calls to the kernel API possibly with the support of some
>>daemons to maintain state.
>Your understanding is incorrect. Support for the original graphics interface,
>for example, was completely contained in the Win32 user-mode environment subsystem
>(which was even called by the POSIX and OS/2 subsystems to perform any grahpics
>activity on their behalf, adding yet another level of user-mode indirection). Only
>in NT 4 and later did graphics support move largely into the kernel and (mostly)
>get called directly there via linked libraries rather than via a subsystem process.
>Also, please explain what you consider the dramatic differences to be between 'daemons
>that maintain shared state' and the user-mode processes of a classic micro-kernel
>implementation. There is indeed a major difference in the *degree and number* of
>kernel activities between NT and a classic mirco kernel (which is why no one called
>NT a micro-kernel implementation per se, but only a 'hybrid'), but they both use
>protected user-mode processes to support functions and state shared between processes
>which in a classic monolithic kernel would instead be supported by kernel-mode code.
>The main *practical* difference between a monolithic kernel and a micro-kernel
>is the ability of the latter to survive problems in one or more of its user-mode
>service processes which would crash the system had the problems occurred in kernel
>code. For some activities this makes a lot of sense (at least if one does not pay
>too high a price in performance obtaining it) - bogus device drivers for random
>ancillary devices come to mind - but for others, such as the main file system, it's
>a bit difficult to imagine the system continuing to run productively if that activity
>dies (and indeed even early NT implementations depended upon the continuing functions
>of the graphics support despite the fact that it was a user-mode process, though
>one could argue that this was an implementation flaw rather than an architectural one).
>In any event, while the fact that NT (even early-on) evicted far less of the code
>from the kernel than it *could* have evicted indeed disqualifies it from being called
>a classic micro-kernel, the fact that it *did* evict *some* such code makes calling
>it a 'hybrid' defensible (even if some might not choose to do so because in their
>estimation more should have been moved to user space).
>Then again, the issue seems like a tempest in a teapot, so I won't bother pursuing it farther.

The problem with this issue is that there aren't enough terms of description. It is most realistic to speak about OS kernel by their complexity and their level of coupling. Even speaking of "micro", "hybrid" and "monolithic" doesn't go far enough.

Taking an OS to look like this:

Hardware interfaces (ie drivers) (layer D)
Allocation of hardware to software (layer K)
Interfaces to user software (layer I)
User software (layer S)

In a classic microkernel hardware interfaces, drivers, layer D, live outside the kernel. Only what I have labelled layer K truely lives in kernel. And then only part of that, since layer K includes filesystems which live can live in userspace.

This kind of perspective allows you to write down clearly how many systems work. (Using F to represent the filesystem)


In kernel User
Linux D, K, F, some of I S, some of I
NT4< D, K, F S, I
NT4> D, K, F, some of I S, some of I
QNX K D, S, I, F
Hurd D, K, some of I S, F, some of I
OSX D, K, F, some of I S, some of I

I'm not too sure I've described the more obscure system accurately. My ranking of OSX is probably controversial. But since the microkernel can't live without the BSD service there is no real sense (speaking of reliability) in saying that the BSD parts live outside the kernel.

Even this ignores loads of other things, SysV Unix for example had a monolithic kernel like Linux. But it was only ~6000 lines long, Linux is nearly a thousand times longer.

Anyway, it certainly isn't clear from the table above which deserve to be called hybrid.

(I predict that Linus will post saying he disagrees with me here. If he's still interested in the topic, probably not after all these years talking about. )
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
Hybrid (micro)kernelsTzvetan Mikov2006/05/08 04:41 PM
  Hybrid (micro)kernelsS. Rao2006/05/08 06:14 PM
  Hybrid (micro)kernelsBill Todd2006/05/08 06:16 PM
    Hybrid (micro)kernelsTzvetan Mikov2006/05/08 07:21 PM
      Hybrid (micro)kernelsnick2006/05/08 07:50 PM
      Hybrid (micro)kernelsBill Todd2006/05/09 01:26 AM
        There aren't enough words...Rob Thorpe2006/05/09 02:39 AM
          There aren't enough words...Tzvetan Mikov2006/05/09 03:10 PM
            There aren't enough words...Rob Thorpe2006/05/15 12:25 AM
        Hybrid (micro)kernelsTzvetan Mikov2006/05/09 11:17 AM
          Hybrid (micro)kernelsBill Todd2006/05/09 04:05 PM
  Hybrid (micro)kernelsrwessel2006/05/08 11:23 PM
    Hybrid kernel, not NTRichard Urich2006/05/09 06:03 AM
      Hybrid kernel, not NT_Arthur2006/05/09 07:06 AM
        Hybrid kernel, not NTRob Thorpe2006/05/09 07:40 AM
          Hybrid kernel, not NT_Arthur2006/05/09 08:30 AM
            Hybrid kernel, not NTRob Thorpe2006/05/09 09:07 AM
              Hybrid kernel, not NT_Arthur2006/05/09 09:36 AM
                Linux vs MacOSX peformance, debunked_Arthur2006/05/18 07:30 AM
                  Linux vs MacOSX peformance, debunkedRob Thorpe2006/05/18 08:19 AM
                    Linux vs MacOSX peformance, debunkedAnonymous2006/05/18 12:31 PM
        Hybrid kernel, not NTLinus Torvalds2006/05/09 08:16 AM
          Hybrid kernel, not NTAndi Kleen2006/05/09 02:32 PM
            Hybrid kernel, not NTmyself2006/05/09 03:24 PM
              Hybrid kernel, not NTmyself2006/05/09 03:41 PM
              Hybrid kernel, not NTBrendan2006/05/09 05:26 PM
                Hybrid kernel, not NTLinus Torvalds2006/05/09 08:06 PM
                  Hybrid kernel, not NTBrendan2006/05/13 01:35 AM
                    Hybrid kernel, not NTnick2006/05/13 04:40 AM
                      Hybrid kernel, not NTBrendan2006/05/13 09:48 AM
                        Hybrid kernel, not NTnick2006/05/13 07:41 PM
                          Hybrid kernel, not NTBrendan2006/05/13 09:51 PM
                            Hybrid kernel, not NTnick2006/05/14 05:57 PM
                              Hybrid kernel, not NTBrendan2006/05/14 10:40 PM
                                Hybrid kernel, not NTnick2006/05/14 11:46 PM
                                  Hybrid kernel, not NTBrendan2006/05/15 04:00 AM
                                    Hybrid kernel, not NTrwessel2006/05/15 07:21 AM
                                      Hybrid kernel, not NTBrendan2006/05/15 08:55 AM
                                        Hybrid kernel, not NTLinus Torvalds2006/05/15 09:49 AM
                                          Hybrid kernel, not NTnick2006/05/15 04:41 PM
                                          Hybrid kernel, not NTtony roth2008/01/31 02:20 PM
                                    Hybrid kernel, not NTnick2006/05/15 06:33 PM
                                      Hybrid kernel, not NTBrendan2006/05/16 01:39 AM
                                        Hybrid kernel, not NTnick2006/05/16 02:53 AM
                                          Hybrid kernel, not NTBrendan2006/05/16 05:37 AM
                  Hybrid kernel, not NTAnonymous2008/05/01 10:31 PM
                    Following the structure of the treeMichael S2008/05/02 04:19 AM
                      Following the structure of the treeDean Kent2008/05/02 05:31 AM
                        Following the structure of the treeMichael S2008/05/02 06:02 AM
                        Following the structure of the treeDavid W. Hess2008/05/02 06:48 AM
                          Following the structure of the treeDean Kent2008/05/02 09:14 AM
                            Following the structure of the treeDavid W. Hess2008/05/02 10:05 AM
                              LOL!Dean Kent2008/05/02 10:33 AM
                              Following the structure of the treeanonymous2008/05/02 03:04 PM
                                Following the structure of the treeDean Kent2008/05/02 07:52 PM
                                Following the structure of the treeFoo_2008/05/03 02:01 AM
                                  Following the structure of the treeDavid W. Hess2008/05/03 06:54 AM
                                    Following the structure of the treeDean Kent2008/05/03 10:06 AM
                                      Following the structure of the treeFoo_2008/05/04 01:06 AM
                                        Following the structure of the treeMichael S2008/05/04 01:22 AM
            Hybrid kernel, not NTLinus Torvalds2006/05/09 05:19 PM
              Microkernel Vs Monolithic KernelKernel_Protector2006/05/09 09:41 PM
                Microkernel Vs Monolithic KernelDavid Kanter2006/05/09 10:30 PM
                  Sigh, Stand back, its slashdotting time. (NT)Anonymous2006/05/09 10:44 PM
                  Microkernel Vs Monolithic Kernelblah2006/05/12 08:58 PM
                  Microkernel Vs Monolithic KernelRob Thorpe2006/05/15 01:41 AM
          Hybrid kernel, not NTAnalGuy2006/05/16 03:10 AM
            Theory versus practiceDavid Kanter2006/05/16 12:55 PM
              Distributed algorithmsRob Thorpe2006/05/17 12:53 AM
              Theory versus practiceHoward Chu2006/05/17 02:54 AM
                Theory versus practiceJS2006/05/17 04:29 AM
          Play online poker, blackjack !!! Gamezonex2007/08/16 01:49 PM
          Hybrid kernel, not NT (NT)atle rene mossik2020/12/12 09:31 AM
  Hybrid (micro)kernelsphilt2006/05/14 09:15 PM
    Hybrid (micro)kernelsLinus Torvalds2006/05/15 08:20 AM
      Hybrid (micro)kernelsLinus Torvalds2006/05/15 11:56 AM
        Hybrid (micro)kernelsRob Thorpe2006/05/16 01:22 AM
          Hybrid (micro)kernelsrwessel2006/05/16 11:23 AM
            Hybrid (micro)kernelsRob Thorpe2006/05/17 12:43 AM
              Hybrid (micro)kernelsrwessel2006/05/17 01:33 AM
                Hybrid (micro)kernelsRob Thorpe2006/05/19 07:51 AM
                  Hybrid (micro)kernelsrwessel2006/05/19 12:27 PM
      Hybrid (micro)kernelstechIperson2006/05/15 01:25 PM
      Hybrid (micro)kernelsmas2006/05/15 05:17 PM
        Hybrid (micro)kernelsLinus Torvalds2006/05/15 05:39 PM
          Hybrid (micro)kernelsColonel Kernel2006/05/15 09:17 PM
            Hybrid (micro)kernelsWink Saville2006/05/15 10:31 PM
              Hybrid (micro)kernelsLinus Torvalds2006/05/16 10:08 AM
                Hybrid (micro)kernelsWink Saville2006/05/16 09:55 PM
          Hybrid (micro)kernelsrwessel2006/05/16 11:31 AM
            Hybrid (micro)kernelsLinus Torvalds2006/05/16 12:00 PM
        Hybrid (micro)kernelsBrendan2006/05/16 01:36 AM
        Hybrid (micro)kernelsPaul Elliott2006/09/03 08:44 AM
          Hybrid (micro)kernelsRob Thorpe2006/09/04 09:25 AM
      Hybrid (micro)kernelsphilt2006/05/16 12:55 AM
        Hybrid (micro)kernelspgerassi2007/08/16 07:41 PM
  Another questionable entry on Wikipedia?Chung Leong2006/05/18 10:33 AM
  Hybrid (micro)kernelsisrael2006/05/20 04:25 AM
    Hybrid (micro)kernelsRob Thorpe2006/05/22 08:35 AM
Reply to this Topic
Body: No Text
How do you spell avocado?