practicality of a real-mode microkernel
Posted: Fri Aug 30, 2019 12:46 am
Hi,
I'm doing some research, and I feel the need to ask some questions on here. But, I would like to make one thing extremely clear, before I begin the post; this is to avoid any possible confusion on the topic:
The goal for my operating system is to be a 16-bit DOS (PC-DOS, MS-DOS, etc) clone, but instead using a microkernel design; nothing more, nothing less. I only say this so that you all know my goals and can better answer my questions.
Now, I am curious: I noticed that most, if not all, of the DOS variants seem to use the monolithic design for their kernels: is it because of the fact that virtually everything is run in real-mode?
To be more specific, is there a reason that they needed to be monolithic? Excluding reasons for performance on systems that were exponentially slower than today's machines, was it not realistic to have some sort of 'executive' subsystem like NT, where there are separate managers for the microkernel, such as a memory manager, I/O manager, etc?
Here is sort of a really big question that I seriously need to ask: Is it because real-mode is non-asynchronous in nature? Because most DOS variants seem to only do one thing at a time. I am speculating that since you don't really need 'base' drivers for the hardware (unless you want to support more than what the PC-BIOS offers, of course), then you are stuck with the IVT, and then system-calls would use these interrupts instead of driver code, making message passing potentially slow. And then the only way to avoid the non-asynchronous IVT, you'd need need write you own 'base' drivers, Correct me if I'm wrong.
I know that you can do (most) protected-mode things in real-mode, I just imagine the non-asynchronous nature of real-mode might make it pretty dang slow, unless done hacks or something...
And I know it's a lot of questions, but thanks a lot for any help!
(PS: One more quick question that I thought of while writing this: can you load your own IDT while in real-mode? I have never found a wiki page taking about this subject, nor have I have any forum posts, or anything elsewhere discussing this. This question actually ties into the above.)
I'm doing some research, and I feel the need to ask some questions on here. But, I would like to make one thing extremely clear, before I begin the post; this is to avoid any possible confusion on the topic:
The goal for my operating system is to be a 16-bit DOS (PC-DOS, MS-DOS, etc) clone, but instead using a microkernel design; nothing more, nothing less. I only say this so that you all know my goals and can better answer my questions.
Now, I am curious: I noticed that most, if not all, of the DOS variants seem to use the monolithic design for their kernels: is it because of the fact that virtually everything is run in real-mode?
To be more specific, is there a reason that they needed to be monolithic? Excluding reasons for performance on systems that were exponentially slower than today's machines, was it not realistic to have some sort of 'executive' subsystem like NT, where there are separate managers for the microkernel, such as a memory manager, I/O manager, etc?
Here is sort of a really big question that I seriously need to ask: Is it because real-mode is non-asynchronous in nature? Because most DOS variants seem to only do one thing at a time. I am speculating that since you don't really need 'base' drivers for the hardware (unless you want to support more than what the PC-BIOS offers, of course), then you are stuck with the IVT, and then system-calls would use these interrupts instead of driver code, making message passing potentially slow. And then the only way to avoid the non-asynchronous IVT, you'd need need write you own 'base' drivers, Correct me if I'm wrong.
I know that you can do (most) protected-mode things in real-mode, I just imagine the non-asynchronous nature of real-mode might make it pretty dang slow, unless done hacks or something...
And I know it's a lot of questions, but thanks a lot for any help!
(PS: One more quick question that I thought of while writing this: can you load your own IDT while in real-mode? I have never found a wiki page taking about this subject, nor have I have any forum posts, or anything elsewhere discussing this. This question actually ties into the above.)