NYCU, Operating System Capstone, Spring 2021
===========================================================
This course aims to introduce the design and implementation of operating system kernels.
You'll learn both concept and implementation from a series of labs.
This course uses `Raspberry Pi 3 Model B+ `_ (rpi3 for short)
as the hardware platform.
Students can get their hands dirty on a **Real Machine** instead of an emulator.
Labs
-----
There are 8 + 1 labs in this course.
You'll learn how to **design** a kernel by **implementing** it yourself.
There are 2 types of labels in each lab.
================== ===========================================================================================
``required``       You're required to implement it by the description, they take up major of your scores.
``elective``       You can implement some of them to get a bonus.
================== ===========================================================================================
There is no limitation on which programming language you should use for the labs.
However, there are a lot of things which are language dependent and even compiler dependent.
You need to manage them yourself.
You can check to last year's `course website `_
and `submission repository `_ to see what you might need
to do during this semester.
Yet, the requirements and descriptions may differ this semester.
Grading Policy
---------------
It's allowed and recommended to check others code, but you still need to write it on your own
instead of copy/paste.
TAs validate plagiarism by asking the detail of your implementation.
If you can't elaborate your code clearly, you only get 70% of the score.
Your code may work on an emulator even it's wrong.
Hence, you get 90% of the score if your code works on QEMU but not on real rpi3.
For late hand in, the penalty is 1% per week.
Disclaimer
----------
We're not kernel developers or experienced embedded system developers.
It's common we made mistakes in the description.
If you find any of them, send an issue or PR to `this github repo `_.
.. note::
  This documentation is not self-contained, you can get more information from external references.
..
    chapters tree below
.. toctree::
  :caption: Labs
  :hidden:
  labs/lab0
  labs/lab1
  labs/lab2
  labs/lab3
  labs/lab4
  labs/lab5
  labs/lab6
  labs/lab7
  labs/lab8
.. toctree::
  :caption: Hardware
  :hidden:
  hardware/asm
  hardware/uart
  hardware/mailbox
.. toctree::
  :caption: Miscs
  :hidden:
  external_reference/index