Linux: Modular != Microkernel
Linux: Modular != Microkernel
Someone edited the OS-FAQ yesterday, namely the pages Monolithic Kernel and Microkernel, to the effect of claiming that a modular kernel (e.g., Linux) is the same thing as a microkernel.
While there's no doubt in my mind that this is a misconception (and I've back-edited the FAQ to reflect that), I thought I'd at least be open to discussion by creating this forum thread. (Just in case that mysterious 139.168.192.220 does follow the forum. )
While there's no doubt in my mind that this is a misconception (and I've back-edited the FAQ to reflect that), I thought I'd at least be open to discussion by creating this forum thread. (Just in case that mysterious 139.168.192.220 does follow the forum. )
Every good solution is obvious once you've found it.
Re:Linux: Modular != Microkernel
Unfortunately we are all having more and more problems with wikis...
This kind of mistakes are not so bad when pages are regularly checked. But I hate this new wiki spamming.
Maybe it will be a good idea to have user registration. It shouldn't stop people from contributing, and it will allow minimal security checks. Furthermore you'd be able to explain to somebody its mistakes.
Just some thought that went through my brain ;D
INeo
This kind of mistakes are not so bad when pages are regularly checked. But I hate this new wiki spamming.
Maybe it will be a good idea to have user registration. It shouldn't stop people from contributing, and it will allow minimal security checks. Furthermore you'd be able to explain to somebody its mistakes.
Just some thought that went through my brain ;D
INeo
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:Linux: Modular != Microkernel
I don't think it's a nuisance: guest come and add knowledge, community check the new information and edit if needed. And locking strategic pages seems to have blocked spammers in the sandbox atm.
Re:Linux: Modular != Microkernel
Some parts of it makes sense. Why not let the first (or two first) parts be?
I am referring to:
PS: i am on to him...
I am referring to:
Anything wrong with that?Building all device drivers into the kernel will (eventually) result in a huge kernel where most of it is unused. To get around this often the kernel is distributed as source code that the user is expected to compile for their computer. In this way code can be added or removed using conditional code, resulting in a kernel that is customized for the specific computer.
While this method can give the best possible performance it also restricts the potential number of users and uses of the OS , as a lot of computer users aren't programmers and don't know how to compile, etc. It can also make the OS's installation process messy and over-complicated.
PS: i am on to him...
OrgName: Asia Pacific Network Information Centre
OrgID: APNIC
Address: PO Box 2131
City: Milton
StateProv: QLD
PostalCode: 4064
Country: AU
ReferralServer: whois://whois.apnic.net
Re:Linux: Modular != Microkernel
Well, not exactly wrong. I'll add my reasoning:
The original author, in my opinion (and not meaning to be hostile) lumped together faulty knowledge about the nature of monolithic / microkernels with faulty knowledge of "Free Software" motives.
The pros and cons of shipping your OS as source or not are subject for a different Wiki page that has nothing to do with macro vs. micro. The fact that a single kernel binary including drivers for everything isn't that good an idea should be blatantly obvious.
And if my editing was a bit too ruthless and my wording above a bit too aggressive, I apologize - I'm in an awful hurry these days.
Should be obvious.bubach wrote: Building all device drivers into the kernel will (eventually) result in a huge kernel where most of it is unused.
The Linux kernel is distributed as source because 1) it's GPL, and 2) lacking any defined ABI so you have to re-compile your driver modules with every new kernel version. That's a completey different can of fish (which stinks IMNSHO), and hasn't much to do with the kernel design. Windows is also mostly monolithic, but has a fixed ABI so it needn't be shipped as source.To get around this often the kernel is distributed as source code that the user is expected to compile for their computer.
You can do the same without shipping as source and requiring recompiles.In this way code can be added or removed using conditional code, resulting in a kernel that is customized for the specific computer.
While the result of a self-compile kernel are described correctly, it doesn't have anything to do with the kernel being monolithic in design.While this method can give the best possible performance it also restricts the potential number of users and uses of the OS , as a lot of computer users aren't programmers and don't know how to compile, etc. It can also make the OS's installation process messy and over-complicated.
The original author, in my opinion (and not meaning to be hostile) lumped together faulty knowledge about the nature of monolithic / microkernels with faulty knowledge of "Free Software" motives.
The pros and cons of shipping your OS as source or not are subject for a different Wiki page that has nothing to do with macro vs. micro. The fact that a single kernel binary including drivers for everything isn't that good an idea should be blatantly obvious.
And if my editing was a bit too ruthless and my wording above a bit too aggressive, I apologize - I'm in an awful hurry these days.
Every good solution is obvious once you've found it.
Re:Linux: Modular != Microkernel
Hi,
When I added to these wiki pages my intent was not malicious in any way. Over the last month or more I've been watching new OS developers (those the wiki would be most useful for) in several messages boards. They tend to start with making the boot code load a kernel, then they build keyboard and basic video into this kernel, then add floppy and/or IDE/ATA hard drive code in, usually followed by FAT file system code and/or a CLI and/or a GUI. You see how this progresses? One huge binary containing everything without any forethought or planning.
My intention was (and may still be) to extend those wiki entries and then create a "What should I think about before I start coding" page that promotes becoming familiar with both the tools and the architecture that the OS will use, and also references those pages (and some of the other pages on memory management, multi-tasking, etc) so that new developers think about what features their OS will have. It is an attempt to prevent the "I want to do brain surgery, how do I use a knife?" type questions and to encourage decent design and planning stages to the (typically very sloppy or completely lacking) design process that seems to me to be increasingly common.
I agree that "Building all device drivers into the kernel will (eventually) result in a huge kernel where most of it is unused." should be obvious, and definately is for most of the regulars here, but most of the regulars here don't have any need for the wiki pages on kernel types. For the people that do need these wiki pages I don't think the statement is obvious.
The performance benefits of compiling code specifically for a certain computer aren't restricted to the kernel either - see the Gentoo project where people (including me) compile everything from the boot code up specifically for their computer in a (not necessarily sensible) attempt to squeeze every last cycle out of all code.
[message split due to size]
When I added to these wiki pages my intent was not malicious in any way. Over the last month or more I've been watching new OS developers (those the wiki would be most useful for) in several messages boards. They tend to start with making the boot code load a kernel, then they build keyboard and basic video into this kernel, then add floppy and/or IDE/ATA hard drive code in, usually followed by FAT file system code and/or a CLI and/or a GUI. You see how this progresses? One huge binary containing everything without any forethought or planning.
My intention was (and may still be) to extend those wiki entries and then create a "What should I think about before I start coding" page that promotes becoming familiar with both the tools and the architecture that the OS will use, and also references those pages (and some of the other pages on memory management, multi-tasking, etc) so that new developers think about what features their OS will have. It is an attempt to prevent the "I want to do brain surgery, how do I use a knife?" type questions and to encourage decent design and planning stages to the (typically very sloppy or completely lacking) design process that seems to me to be increasingly common.
I agree that "Building all device drivers into the kernel will (eventually) result in a huge kernel where most of it is unused." should be obvious, and definately is for most of the regulars here, but most of the regulars here don't have any need for the wiki pages on kernel types. For the people that do need these wiki pages I don't think the statement is obvious.
Do you honestly believe this (for any type of kernel)? Think about removing all the "if(computer_supports_X) then <something> else <something else>" code. Consider PAE, global pages, FPU native exceptions, INVLPG, FXSAVE, etc, and processor specific optimizations (like "Is a series of ADD instructions faster than LEA?"), unrolling loops to the size of the L1/instruction trace cache, etc. This is just the CPU, there's the hardware side of things too - is it an 80486 without PCI, is it a newer computer without ISA, is there a USB bus, are there IO APICs, SMP, NUMA, etc. I guess it is possible - you'd just need to distribute thousands of pre-compiled kernels to do it.You can do the same without shipping as source and requiring recompiles.In this way code can be added or removed using conditional code, resulting in a kernel that is customized for the specific computer.
The performance benefits of compiling code specifically for a certain computer aren't restricted to the kernel either - see the Gentoo project where people (including me) compile everything from the boot code up specifically for their computer in a (not necessarily sensible) attempt to squeeze every last cycle out of all code.
[message split due to size]
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
Re:Linux: Modular != Microkernel
[continued]
For me there's the concept of "pure monolithic" where all system software is built directly into the kernel's binary (including http/ftp servers, cron, CLI/GUI, etc). There's also a "pure micro-kernel" design where everything except memory manager primitives, scheduling primitives, I/O primitives and IPC runs in user space. It's likely that I was thinking of the "pure monolithic" concept rather than the broad undefinable idea of "monolithic" in general.
Perhaps we should define what qualities makes an OS monolithic and what doesn't (other than marketting hype).
For example, the current version of Linux has daemons running in user space in addition to the modules, which to me makes it about 75% monolithic and 25% micro-kernel. Earlier versions of Linux didn't support modules at all (I'd say they were 90% monolithic). My own "micro-kernel" has kernel modules which are much like Linux's modules, but there are (currently) only 3 specific kernel modules (user interface, virtual file system and device manager - no device drivers). IMO this makes my kernel about 90% micro-kernel and 10% monolithic.
It's got nothing to do with what code is running at CPL=0 and what isn't - the MMURTL OS is a micro-kernel, but it only uses CPL=0. The Amiga computers had a few micro-kernel OSs, but those computers didn't even support privilege levels.
Perhaps it's something to do with which part of the address space device drivers run? For windows 95/98 device drivers run in their own part of the address space, not within the kernel's part of the address space and not within process space either. For windows XP and NT there's a hardware abstraction layer and (AFAIK) device drivers run at CPL=3. For DOS there's not too much difference between a device driver, a TSR and a normal executable file (but a large number of devices are supported by BIOS/ROM code, which is also outside of the kernel). IMHO this is all far too messed up to be definitive.
IMHO the only definitive definition of "monolithic" that is possible is my definition of "pure monolithic". This is why I added comments suggesting that most OS's are a combination of both.
Cheers,
Brendan
That's an understandable comment - I should have elaborated further.While the result of a self-compile kernel are described correctly, it doesn't have anything to do with the kernel being monolithic in design.While this method can give the best possible performance it also restricts the potential number of users and uses of the OS, as a lot of computer users aren't programmers and don't know how to compile, etc. It can also make the OS's installation process messy and over-complicated.
For me there's the concept of "pure monolithic" where all system software is built directly into the kernel's binary (including http/ftp servers, cron, CLI/GUI, etc). There's also a "pure micro-kernel" design where everything except memory manager primitives, scheduling primitives, I/O primitives and IPC runs in user space. It's likely that I was thinking of the "pure monolithic" concept rather than the broad undefinable idea of "monolithic" in general.
Perhaps we should define what qualities makes an OS monolithic and what doesn't (other than marketting hype).
For example, the current version of Linux has daemons running in user space in addition to the modules, which to me makes it about 75% monolithic and 25% micro-kernel. Earlier versions of Linux didn't support modules at all (I'd say they were 90% monolithic). My own "micro-kernel" has kernel modules which are much like Linux's modules, but there are (currently) only 3 specific kernel modules (user interface, virtual file system and device manager - no device drivers). IMO this makes my kernel about 90% micro-kernel and 10% monolithic.
It's got nothing to do with what code is running at CPL=0 and what isn't - the MMURTL OS is a micro-kernel, but it only uses CPL=0. The Amiga computers had a few micro-kernel OSs, but those computers didn't even support privilege levels.
Perhaps it's something to do with which part of the address space device drivers run? For windows 95/98 device drivers run in their own part of the address space, not within the kernel's part of the address space and not within process space either. For windows XP and NT there's a hardware abstraction layer and (AFAIK) device drivers run at CPL=3. For DOS there's not too much difference between a device driver, a TSR and a normal executable file (but a large number of devices are supported by BIOS/ROM code, which is also outside of the kernel). IMHO this is all far too messed up to be definitive.
IMHO the only definitive definition of "monolithic" that is possible is my definition of "pure monolithic". This is why I added comments suggesting that most OS's are a combination of both.
Cheers,
Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
Re:Linux: Modular != Microkernel
Hi,
Quite frankly I am a bit annoyed that someone has deleted what I wrote rather than adding their own comments - to me deleting content is worse than a minor technical inaccuracy.
Cheers,
Brendan
There was no attempt to harm the wiki's content or to advertise (which is unusual for me as I have a tendancy to write "my OS does X like Y" ). Nor have I (now or ever) attempted to hide my actions. I even put my name in the "Sign in" box before I clicked "edit" but the wiki ignored it.ineo wrote: Unfortunately we are all having more and more problems with wikis...
This kind of mistakes are not so bad when pages are regularly checked. But I hate this new wiki spamming.
Maybe it will be a good idea to have user registration. It shouldn't stop people from contributing, and it will allow minimal security checks. Furthermore you'd be able to explain to somebody its mistakes.
Quite frankly I am a bit annoyed that someone has deleted what I wrote rather than adding their own comments - to me deleting content is worse than a minor technical inaccuracy.
Cheers,
Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
- Colonel Kernel
- Member
- Posts: 1437
- Joined: Tue Oct 17, 2006 6:06 pm
- Location: Vancouver, BC, Canada
- Contact:
Re:Linux: Modular != Microkernel
I agree. Next time, I think it would be wise to just move disputed content to its own new page rather than simply delete it. I think it's useful to discuss source vs. binary distribution of OSes, although I agree that this is not a micro vs. monolithic issue.Brendan wrote: I agree that "Building all device drivers into the kernel will (eventually) result in a huge kernel where most of it is unused." should be obvious, and definately is for most of the regulars here, but most of the regulars here don't have any need for the wiki pages on kernel types. For the people that do need these wiki pages I don't think the statement is obvious.
I was pretty sure that all Win9x drivers ran in the kernel's address space, except maybe real-mode drivers that run in V8086 mode. Do you have a source for this...?Perhaps it's something to do with which part of the address space device drivers run? For windows 95/98 device drivers run in their own part of the address space, not within the kernel's part of the address space and not within process space either.
Nope. The HAL is just a library of functions that do machine-specific things. It encapsulates details like whether the kernel is MP or UP, whether it uses the PIC or APIC, etc. Kernel-mode drivers run at CPL=0, in the address space of the kernel. NT is not a microkernel IMO.For windows XP and NT there's a hardware abstraction layer and (AFAIK) device drivers run at CPL=3.
Top three reasons why my OS project died:
- Too much overtime at work
- Got married
- My brain got stuck in an infinite loop while trying to design the memory manager
Re:Linux: Modular != Microkernel
My message was just about the way wikis are functionning. I think it great to have a place to share knowledge, but if the worst can be done with it, it will !
It is so easy to spam wikis... I see more and more polluted wikis. This one seems fine, but how long will it take before it becames a classical phpwiki victim. That's why I find it useful to force authentication.
However my post was offtopic, I was not speaking of this particular page. Contributors may make mistakes, or may have different point of views.
It was just my thought about the wikis. I think it's gonna change. When you speak of "forced" authentication with a wiki developer, he says you are stupid. I understand their point of view, but I know spammers...
I am glad this wiki exists. Keep good work
INeo
It is so easy to spam wikis... I see more and more polluted wikis. This one seems fine, but how long will it take before it becames a classical phpwiki victim. That's why I find it useful to force authentication.
However my post was offtopic, I was not speaking of this particular page. Contributors may make mistakes, or may have different point of views.
It was just my thought about the wikis. I think it's gonna change. When you speak of "forced" authentication with a wiki developer, he says you are stupid. I understand their point of view, but I know spammers...
I am glad this wiki exists. Keep good work
INeo
Re:Linux: Modular != Microkernel
Hi,
Regarding Microsoft OS's I've looked around since and I couldn't find any reference to exactly where any version of windows puts device drivers in linear memory. I did find a microsoft page (http://msdn.microsoft.com/library/defau ... _space.asp) that says "system DLL's" are between 0x80000000 and 0xBFFFFFFF, and "low-level system code" goes from 0xC0000000 to 0xFFFFFFFF. It doesn't say if part of either of these larger areas is used specifically for device drivers or not. This page also claims that both areas are writeable by any process and gives a warning about catastrophic consequences? - I find that remarkably crappy design if it's correct.
Stangely enough I also found a page claiming that "In addition to VxDs, Windows 3.x/95 supports non-privileged (ring-3) Communication and Printer drivers. These are typically given .DRV file extensions." (from http://www.cs.uu.nl/wais/html/na-dir/wi ... g/vxd.html).
Cheers,
Brendan
My knowledge of Microsoft OS's is fairly limited. I just assumed and didn't bother checking as exact details weren't too relevant to the context it was used - I was trying to show the difficulty that is involved with a definitive definition of "monolithic kernel". For example "An OS kernel that is entirely self contained and does not call in additional drivers or modules as needed." (from http://www.techweb.com/encyclopedia/def ... thickernel). This implies that Linux isn't a monolithic kernel. I don't agree with this definition (I'd call it a "pure monolithic kernel" rather than just a "monolithic kernel").Colonel Kernel wrote:I was pretty sure that all Win9x drivers ran in the kernel's address space, except maybe real-mode drivers that run in V8086 mode. Do you have a source for this...?
Regarding Microsoft OS's I've looked around since and I couldn't find any reference to exactly where any version of windows puts device drivers in linear memory. I did find a microsoft page (http://msdn.microsoft.com/library/defau ... _space.asp) that says "system DLL's" are between 0x80000000 and 0xBFFFFFFF, and "low-level system code" goes from 0xC0000000 to 0xFFFFFFFF. It doesn't say if part of either of these larger areas is used specifically for device drivers or not. This page also claims that both areas are writeable by any process and gives a warning about catastrophic consequences? - I find that remarkably crappy design if it's correct.
Stangely enough I also found a page claiming that "In addition to VxDs, Windows 3.x/95 supports non-privileged (ring-3) Communication and Printer drivers. These are typically given .DRV file extensions." (from http://www.cs.uu.nl/wais/html/na-dir/wi ... g/vxd.html).
Cheers,
Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
- Colonel Kernel
- Member
- Posts: 1437
- Joined: Tue Oct 17, 2006 6:06 pm
- Location: Vancouver, BC, Canada
- Contact:
Re:Linux: Modular != Microkernel
Yep, Win9x was quite a monstrosity. I think the "system DLLs" refer to user-mode things like the Win32 API (kernel, GDI, and user).Brendan wrote:I did find a microsoft page (http://msdn.microsoft.com/library/defau ... _space.asp) that says "system DLL's" are between 0x80000000 and 0xBFFFFFFF, and "low-level system code" goes from 0xC0000000 to 0xFFFFFFFF. It doesn't say if part of either of these larger areas is used specifically for device drivers or not. This page also claims that both areas are writeable by any process and gives a warning about catastrophic consequences? - I find that remarkably crappy design if it's correct.
Not that unusual... NT also has user-mode drivers for similar things, but AFAIK they need kernel-mode counterparts that actually do the I/O.Stangely enough I also found a page claiming that "In addition to VxDs, Windows 3.x/95 supports non-privileged (ring-3) Communication and Printer drivers. These are typically given .DRV file extensions." (from http://www.cs.uu.nl/wais/html/na-dir/wi ... g/vxd.html).
Top three reasons why my OS project died:
- Too much overtime at work
- Got married
- My brain got stuck in an infinite loop while trying to design the memory manager
Re:Linux: Modular != Microkernel
Hi there,
sorry but I'm (again :-[ ) without a working system (re-installing as we speak), and typing hunched over this temporary laptop "solution" is a pain, so I'll keep it short, and elaborate later.
Brendan, your effort to get rid of the brain surgery / knife questions (very nice metaphor there!) is appreciated. I'd recommend one of the pages in the "Basic Information" chapter for that, probably "Beginner Mistakes".
And I didn't "throw out" anything - you'd be right to be annoyed if I did. The Wiki keeps a history of edits; you can always get the diff here and here, respectively.
I just felt that the concept of monolithic / microkernel was misinterpreted in those two edits, and the message they were meant to convey would be better off in "Beginner Mistakes".
I probably shouldn't edit the Wiki when in a hurry, or I'd probably have pushed the edits to that page myself. If you don't feel like it, Brendan, wait till Monday and I'll restore your message myself (hopefully having a functional system again by then).
Again, sorry if I did offend you. (Where's that machine that turns days into 48-hour length?) :-\
sorry but I'm (again :-[ ) without a working system (re-installing as we speak), and typing hunched over this temporary laptop "solution" is a pain, so I'll keep it short, and elaborate later.
Brendan, your effort to get rid of the brain surgery / knife questions (very nice metaphor there!) is appreciated. I'd recommend one of the pages in the "Basic Information" chapter for that, probably "Beginner Mistakes".
And I didn't "throw out" anything - you'd be right to be annoyed if I did. The Wiki keeps a history of edits; you can always get the diff here and here, respectively.
I just felt that the concept of monolithic / microkernel was misinterpreted in those two edits, and the message they were meant to convey would be better off in "Beginner Mistakes".
I probably shouldn't edit the Wiki when in a hurry, or I'd probably have pushed the edits to that page myself. If you don't feel like it, Brendan, wait till Monday and I'll restore your message myself (hopefully having a functional system again by then).
Again, sorry if I did offend you. (Where's that machine that turns days into 48-hour length?) :-\
Every good solution is obvious once you've found it.
Re:Linux: Modular != Microkernel
Hi,
I was wondering if you'd mind editing the draft version, and perhaps adding it to the wiki somewhere?
I've changed the "monolithic kernel" page again, so the distinction between "monolithic" and "pure monolithic" is much clearer. I hope it's ok.
Cheers,
Brendan
I've prepared a draft version of it and attached it to this message. I was thinking of perhaps adding it to the main page under "Basic Information", between "introduction" and "Beginner Mistakes".Solar wrote:Brendan, your effort to get rid of the brain surgery / knife questions (very nice metaphor there!) is appreciated. I'd recommend one of the pages in the "Basic Information" chapter for that, probably "Beginner Mistakes".
I was wondering if you'd mind editing the draft version, and perhaps adding it to the wiki somewhere?
Ahhh - my mistake .
I've changed the "monolithic kernel" page again, so the distinction between "monolithic" and "pure monolithic" is much clearer. I hope it's ok.
It's called caffeine, and trust me it doesn't work as well as it could. I woke early on Friday morning, went to work, came home, read boards, played games and messed with my OS. At around 4 in the morning (after being awake for some 23 hours) I saw the first 2 messages here and preceeded to over-react somewhat :-\. Anyway I ended up going to sleep at 2 on Saturday afternoon, slept for 12 hours and woke at 4 this morning, thereby completing my 48 hour day...Solar wrote:Again, sorry if I did offend you. (Where's that machine that turns days into 48-hour length?) :-\
Cheers,
Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
- Colonel Kernel
- Member
- Posts: 1437
- Joined: Tue Oct 17, 2006 6:06 pm
- Location: Vancouver, BC, Canada
- Contact:
Re:Linux: Modular != Microkernel
Instead of using the terms "monolithic" and "pure monolithic", what about "macrokernel" and "monolithic", respectively?
There seems to be some disagreement out there about what exactly a "macrokernel" is, but at least MS has always been pretty consistent when defining this term:
http://www.microsoft.com/technet/archiv ... nelwp.mspx
What do you think?
There seems to be some disagreement out there about what exactly a "macrokernel" is, but at least MS has always been pretty consistent when defining this term:
http://www.microsoft.com/technet/archiv ... nelwp.mspx
I think by this definition, recent versions of the Linux kernel would qualify as macrokernels (modular) rather than monolithic (big code soup w/ everything compiled in).A microkernel, on the other hand, is the name given to the core portion of a modern, modular operating system. Microkernel operating systems are based on two fundamental principles. The most basic principle is one of modularity, encapsulation, and data hiding. In this aspect of the design, there is one and only one portion of the operating system that has system-wide responsibility for a particular function. All other parts of the operating system (as well as applications, naturally) access that function through a well-defined interface. There is no duplication of function and no "back doors" to critical data structures; all access to system data structures is through software interfaces. This approach makes it possible to upgrade or replace entire modules within the system without disturbing the remainder. A secondary principal of the microkernel design, related to the first but focused more on the implementation strategy, is that large portions of the operating system which traditionally run entirely in the kernel or privileged mode of the microprocessor can now be executed in user or application mode, with only the microkernel itself, along with a relatively small amount of hardware device-specific code, executing in kernel mode.
Operating systems that follow both of these principles are often called pure microkernel systems. Operating systems that follow the first principle only?strict modularity and strong encapsulation?but not the second, are sometimes called modifiedmicrokernel or macrokernel operating systems.
What do you think?
Top three reasons why my OS project died:
- Too much overtime at work
- Got married
- My brain got stuck in an infinite loop while trying to design the memory manager