Had a couple of thoughts this morning about OS design that I thought that I'd share.
We've discussed the idea of avoiding the Windows "problem" of a) taking 30+ seconds to boot, b) taking 5+ minutes to fully perform startup actions and settle down to near 0% CPU usage and c) trying to Pre-cache as much information as possible, in order to "speed things up".
So, I was thinking about what it would look like to take the "polar opposite" approach, and taking that to the extreme. In other words, what does the OS actually NEED to do during startup? Setup the CPU? Setup the OS memory manager? Load the Kernel into memory? Setup the display? Interrupt handlers? Setup PIC?
Traditionally, you would also do things like setting up a process manager, set up multiple CPUs and APICS, initialize network devices and connections, get IP addresses, load drivers, etc.
But how much could you "put off" until it is actually needed? Could you start up in single threaded mode, with no scheduler, and switch to multi-threaded mode and startup the scheduler if more than one process was started? Could you leave all of the inactive CPUs/cores uninitialized until they are needed? Could you initialize them individually, as needed?
Could you leave, say, 80% of your Kernel on disk until it is needed?
What other things could you delay until absolutely necessary? And what would that OS look like to the user? (Probably a lot like MS-DOS...
)