cfenollosa_os-tutorial/README.md
2014-09-29 11:51:49 +02:00

58 lines
2.0 KiB
Markdown

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](http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)
and the [OSDev wiki](http://wiki.osdev.org/), I'll try to make short step-by-step READMEs and
code samples for anybody to follow.
I will not explain the theory. Google is your friend.
Theory is already covered by thousands of PDFs from Universities
and the Wikipedia.
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.