Developing a Multithreaded Kernel From Scratch!
What you’ll learn
- How to create a kernel from scratch
- How to create a multi-tasking kernel
- How to handle malicious or problematic programs in your operating system. Terminating them if they misbehave.
- How memory works in computers
- The difference between kernel land, user land and the protection rings that make up modern computing
- Kernel design patterns used by the Linux kernel its self
- You will learn all about virtual memory and how to map virtual addresses to physical addresses
- You will learn how to make the kernel understand processes and tasks
- You will learn how to load ELF files
- You will learn how to debug disassembled machine code
- You will learn how to debug your kernel in an emulator with GDB.
Requirements
- You must know the C programming language
- It is wise have some basic knowledge in assembly language
- You should have a Linux operating system, free to install from the internet (We use Ubuntu in this course)
Description
This course is designed to teach you how to create your very own multitasking operating system and kernel from scratch. It is assumed you have no experience in programming kernels and you are taught from the ground up.
Real Mode Development Developing a Multithreaded
Real mode is a legacy mode in all Intel processors that causes the processor to start in a legacy state, it performs like the old 8086 Intel processors did back in the way. Developing a Multithreaded Developing a Multithreaded
In the “Real Mode Development” section of the course we start by learning about the boot process and how memory works, we then move on to creating our very own boot loader that we test on our real machine! This boot loader will output a simple “Hello World!” message to the screen and we write this boot loader in purely assembly language. Developing a Multithreaded
In this section we also read a sector(512 bytes) from the hard disk and learn all about interrupts in real mode and how to create them.
This section gives you a nice taster into kernel development, without over whelming you with information. You are taught the basics and enough about the legacy processors to be able to move forward to more modern kernel development further into this course.
Protected Mode Development
In this section we create a 32 bit multi-tasking kernel that has the FAT16 filesystem. Our kernel will use Intel’s built in memory protection and security mechanisms that allow us to instruct the processor to protect our kernel and prevent user programs from damaging it.
This section is very in depth, you are taught all about paging and virtual memory. We take advantage of clever instructions in Intel processors to allow all processes to share the same memory addresses, this is known as memory virtualization. We map memory addresses to point to different physical memory addresses to create the illusion that every process that is running is loaded at the same address. This is a very common technique in kernel development and is also how swap files work (Those files that are used to compensate for when you run out of usable RAM).
We create our own virtual filesystem layer that uses a design that is similar to the Linux kernel. This clever abstraction that will be taught to you was inspired by the instructors knowledge of writing Linux kernel drivers in his past. Developing a Multithreaded
Who this course is for:
- Beginner kernel developers who want to learn how to create kernels