Decisions: Microkernels, module design, etc.
Posted: Sun Dec 25, 2005 8:41 am
HELLO AGAIN MT!!!
I've begun work again on Drake(OS) and am now in the process of decision making, and design. I have several questions that are open for opinions and suggestions.
Some assumptions to be made: I divide things into two sections. On the top is kernel land, where a central module is loaded. All other modules are dynamically linked to it. In userland, you have services, and another "kernel" which all usermode modules connect to.
Some theory: if i have a module for all services (eg. HD, FD, and CD), and for some reason the hard drive service fails, does this bring down the system. The issue is this is not exactly a true microkernel design (according to the OSfaq and several sheets floating around the net; it just dynamically loads modules), so the modules become part of the kernel. If the system can restart the service (eg. reset all of it's values to their inital values, and begin exeacution anew), i can see how to avert disaster, but that is in theory
I also like the idea of being able to remove modules at run-time at any arbitary time. For instance, a TCP/IP module could only be usefull when running web servics (or network in general), and thus is just taking memory and CPU when not used. I read alot about removal being bad practice and all, but if you notified the service/module first, I'd assume the safety to be complete.
So for some questions regarding it all:
PS. Sorry if i blabber on about nothing
I've begun work again on Drake(OS) and am now in the process of decision making, and design. I have several questions that are open for opinions and suggestions.
Some assumptions to be made: I divide things into two sections. On the top is kernel land, where a central module is loaded. All other modules are dynamically linked to it. In userland, you have services, and another "kernel" which all usermode modules connect to.
Some theory: if i have a module for all services (eg. HD, FD, and CD), and for some reason the hard drive service fails, does this bring down the system. The issue is this is not exactly a true microkernel design (according to the OSfaq and several sheets floating around the net; it just dynamically loads modules), so the modules become part of the kernel. If the system can restart the service (eg. reset all of it's values to their inital values, and begin exeacution anew), i can see how to avert disaster, but that is in theory
I also like the idea of being able to remove modules at run-time at any arbitary time. For instance, a TCP/IP module could only be usefull when running web servics (or network in general), and thus is just taking memory and CPU when not used. I read alot about removal being bad practice and all, but if you notified the service/module first, I'd assume the safety to be complete.
So for some questions regarding it all:
- Am I completely wrong with my theories?
- If this is all good and all, any recommendations to make this more of a TRUE microkernel?
- I've been reading on these "exokernels", but I'm "iffy" on their ideas. How much do you believe outside a kernel qualifies as exo?
- I'm very interested in being able to write all this in C++, and one of the major design goals is 100% object oriented interface (in programming AND userland interfaces). Is this feasable/desirable to people besides me?
PS. Sorry if i blabber on about nothing