Academic Operating System

We are developing an operating system for my personal research and practical education. For the academic purpose, this motivation is similar to MINIX, but we do not focus on theories. Our main objective is to provide knowledges on hardware-related programming. This is one of the most difficult and complex parts when we start the development of operating system from scratch.

The source code is available at the public github repository.

I provide a text book to implement a fundamental operating system step by step. The following checkpoints are the implementation steps. Note well that I sometimes quote specifications and manuals with necessary references (e.g., hyper links) from other documents to provide a self-complete textbook. You may need to refer to official documents to completely understand how your computer and peripheral devices work.

Memo

The development environment is definitely important. Some web sites or books on operating system development use Windows-based environment but I don't prefer that. In this site, we use open source software on a Unix-like system such as BSD, Linux, and Mac OS X.

You may be bothered by the GUI of VirtualBox to launch your virtual machine for testing. In that case, the following command will help you much! As for the other commands, you can find the manual at VBoxManage Manual.

$ VBoxManage startvm <your-os-name>

The following describes the floopy disk geometry.

For floppy disks

| LBA | Sector # | Head # | Cylinder # |
| --- | -------- | ------ | ---------- |
|   0 |        1 |      0 |          0 |
|   1 |        2 |      0 |          0 |
|   . |        . |      . |          . |
|  17 |       18 |      0 |          0 |
|  18 |        1 |      1 |          0 |
|   . |        . |      . |          . |
|  31 |       18 |      1 |          0 |
|  32 |        1 |      0 |          1 |
|   . |        . |      . |          . |

We partition the floppy disk image in this document although floppy disks are basically unpartitioned devices. I think everybody no longer uses floppy disks, so it is more generic for typical block devices such as hard disks and USB flash storages. In FAT12/16, the number of the reserved sectors is recommended to be one because some driver implementations do not check the value. However, the IPL in the first sector is not enough to parse the FAT filesystem, so we cannot place the other program outside of the filesystem. When we use the partition table, we can place this program below (before) the starting sector of the first partition entry.

If you DO prefer Japanese, please let me know... I'll try to translate it.