cfenollosa_os-tutorial/README.md
2014-09-30 10:24:32 +02:00

2.2 KiB

os-tutorial

How to create an OS from scratch

I have always wanted to learn how to make an OS from scratch. In college they taught us how to implement advanced features (pagination, semaphores, memory management, etc) but:

  • I never got to start from my own boot sector
  • College is hard so I don't remember most of it.

Inspired by this document and the OSDev wiki, I'll try to make short step-by-step READMEs and code samples for anybody to follow.

The tutorial will be updated about every week, at the same pace that I learn the concepts

I will not explain the theory. Google is your friend. Theory is already covered by thousands of PDFs from Universities and the Wikipedia. The material assumes that you are comfortable with low level computing.

This course is a code tutorial, not a real CS lecture. To make up for the lack of theory, the "lessons" are tiny and may take 5-15 minutes to complete. Each new concept is presented on a new lecture.

How to use this tutorial

First, go through every folder in order. They build on previous code, so if you jump right to folder 08, you may find a lot of stuff which is not related to what folder 08 is about.

To see the increments between "lessons", do a diff between folders.

Each lesson README starts with the concepts you should be familiar with before reading the code.

Second, for each folder, read the README. It is very concise. The only theory is the required to understand the code. Then, look at the code examples. You can try to write them by yourself on a different folder, modify them slightly and play a bit with the code, you know, the usual.

Finally, the code files provided in each folder are the final result. If you want to learn quickly (though not as thoroughly), just read the provided code files.

TL;DR: First read the README on each folder, then decide if you will implement it yourself or just read the provided code files.

Contributing

I'm still learning this. For the moment, please restrict your contributions to fixing possible bugs or improving existing documents. I'm not yet ready to accept enhancements.