My OS Development Plans
Posted: Tue Aug 09, 2005 4:56 pm
I'm planning to write a sort of a hybrid OS, somewhere between DOS, Minix, and Linux. I currently call it JOS1 (because my name is James) although it will eventually have a "real" name if I can think of one. (I can't do like Linus and Linux, because Jamesux sounds like "James sux" which of course won't do. Any ideas for an OS name would be appreciated, as I'm not very creative in that area.)
For what it's worth, here's how I plan to do things:
1.I plan to start with protected mode, paging, etc. A good OS needs these things. I'll then do memory management, RAM disks, etc. Then I'll reprogram the PIC and setup IDT tables. I'll write a PIT driver for multitasking, which is next.
2.I'll next get basic multitasking working. This might seem strange, but no matter how I do it I'll get chicken-and-egg syndrome. So I do multi-tasking, with static test tasks linked directly into the kernel (sort of like unit-testing, I guess).
That way I can test the multi-tasking, and IPC and process sychronization (probably semaphores).
3.Next I make a basic console driver. With keyboard and VGA, I can write a basic commandline with some built-in commands. This will be temporary, as the commandline will eventually be a separate process (not part of the kernel), but until there's a disk driver it has to be part of the kernel.
4.Writing parallel and serial port drivers wil be easy, and will open up new possibilities (such as debugging, printing, etc.)
It will not take very long either, yet these are important things to write, so writing them early on will make it easier to write more complex things without having to worry about those.
5.Now I'll write a floppy disk driver. We need to be able to access the disk somehow, and the sooner the better.
I'll also write a driver for the FAT12 filesystem (of course, eventually my OS will support many other filesystems, but for now I just need to support one, and this simple and easy-to-program filesystem will do).
Now that I'm finally able to load programs off the disk, I'll rewrite the multitasking and general system calls to account for this.
6.Now I'll write a real commandline, with some built-in commands and the ability to load programs off the disk. I'll also write a simple interpreter for shell scripts, but nothing fancy at this point. I will probably write a parser for things like I/O redirection and pipes (Unix-style).
7.I will now work on all the other things I need to work on: HDD (IDE, SCSI, etc.), Network Cards, other filesystems, mouse support, sound card support, and eventually, SVGA. At some point I will write a simple GUI to make some tasks easier and more intuitive, but like linux and unlike windows, the GUI will never be "the real operating system." However, I will later make a real GUI, after I have made virtually everything else.
What do you all think? Good, bad, what? Any ideas?
For what it's worth, here's how I plan to do things:
1.I plan to start with protected mode, paging, etc. A good OS needs these things. I'll then do memory management, RAM disks, etc. Then I'll reprogram the PIC and setup IDT tables. I'll write a PIT driver for multitasking, which is next.
2.I'll next get basic multitasking working. This might seem strange, but no matter how I do it I'll get chicken-and-egg syndrome. So I do multi-tasking, with static test tasks linked directly into the kernel (sort of like unit-testing, I guess).
That way I can test the multi-tasking, and IPC and process sychronization (probably semaphores).
3.Next I make a basic console driver. With keyboard and VGA, I can write a basic commandline with some built-in commands. This will be temporary, as the commandline will eventually be a separate process (not part of the kernel), but until there's a disk driver it has to be part of the kernel.
4.Writing parallel and serial port drivers wil be easy, and will open up new possibilities (such as debugging, printing, etc.)
It will not take very long either, yet these are important things to write, so writing them early on will make it easier to write more complex things without having to worry about those.
5.Now I'll write a floppy disk driver. We need to be able to access the disk somehow, and the sooner the better.
I'll also write a driver for the FAT12 filesystem (of course, eventually my OS will support many other filesystems, but for now I just need to support one, and this simple and easy-to-program filesystem will do).
Now that I'm finally able to load programs off the disk, I'll rewrite the multitasking and general system calls to account for this.
6.Now I'll write a real commandline, with some built-in commands and the ability to load programs off the disk. I'll also write a simple interpreter for shell scripts, but nothing fancy at this point. I will probably write a parser for things like I/O redirection and pipes (Unix-style).
7.I will now work on all the other things I need to work on: HDD (IDE, SCSI, etc.), Network Cards, other filesystems, mouse support, sound card support, and eventually, SVGA. At some point I will write a simple GUI to make some tasks easier and more intuitive, but like linux and unlike windows, the GUI will never be "the real operating system." However, I will later make a real GUI, after I have made virtually everything else.
What do you all think? Good, bad, what? Any ideas?