Nytro Posted January 11, 2015 Report Posted January 11, 2015 [h=1]The little book about OS development[/h] [h=1]Contents[/h] 1 Introduction1.1 About the Book1.2 The Reader1.3 Credits, Thanks and Acknowledgements1.4 Changes and Corrections1.5 License[*]2 First Steps2.1 Tools2.1.1 Quick Setup2.1.2 Programming Languages2.1.3 Host Operating System2.1.4 Build System2.1.5 Virtual Machine[*]2.2 Booting2.2.1 BIOS2.2.2 The Bootloader2.2.3 The Operating System[*]2.3 Hello Cafebabe2.3.1 Compiling the Operating System2.3.2 Linking the Kernel2.3.3 Obtaining GRUB2.3.4 Building an ISO Image2.3.5 Running Bochs[*]2.4 Further Reading[*]3 Getting to C3.1 Setting Up a Stack3.2 Calling C Code From Assembly3.2.1 Packing Structs[*]3.3 Compiling C Code[*]3.4 Build Tools[*]3.5 Further Reading[*]4 Output4.1 Interacting with the Hardware4.2 The Framebuffer4.2.1 Writing Text4.2.2 Moving the Cursor4.2.3 The Driver[*]4.3 The Serial Ports4.3.1 Configuring the Serial Port4.3.2 Configuring the Line4.3.3 Configuring the Buffers4.3.4 Configuring the Modem4.3.5 Writing Data to the Serial Port4.3.6 Configuring Bochs4.3.7 The Driver[*]4.4 Further Reading[*]5 Segmentation5.1 Accessing Memory5.2 The Global Descriptor Table (GDT)5.3 Loading the GDT5.4 Further Reading[*]6 Interrupts and Input6.1 Interrupts Handlers6.2 Creating an Entry in the IDT6.3 Handling an Interrupt6.4 Creating a Generic Interrupt Handler6.5 Loading the IDT6.6 Programmable Interrupt Controller (PIC)6.7 Reading Input from the Keyboard6.8 Further Reading[*]7 The Road to User Mode7.1 Loading an External Program7.1.1 GRUB Modules[*]7.2 Executing a Program7.2.1 A Very Simple Program7.2.2 Compiling7.2.3 Finding the Program in Memory7.2.4 Jumping to the Code[*]7.3 The Beginning of User Mode[*]8 A Short Introduction to Virtual Memory8.1 Virtual Memory Through Segmentation?8.2 Further Reading[*]9 Paging9.1 Why Paging?9.2 Paging in x869.2.1 Identity Paging9.2.2 Enabling Paging9.2.3 A Few Details[*]9.3 Paging and the Kernel9.3.1 Reasons to Not Identity Map the Kernel9.3.2 The Virtual Address for the Kernel9.3.3 Placing the Kernel at 0xC00000009.3.4 Higher-half Linker Script9.3.5 Entering the Higher Half9.3.6 Running in the Higher Half[*]9.4 Virtual Memory Through Paging[*]9.5 Further Reading[*]10 Page Frame Allocation10.1 Managing Available Memory10.1.1 How Much Memory is There?10.1.2 Managing Available Memory[*]10.2 How Can We Access a Page Frame?[*]10.3 A Kernel Heap[*]10.4 Further reading[*]11 User Mode11.1 Segments for User Mode11.2 Setting Up For User Mode11.3 Entering User Mode11.4 Using C for User Mode Programs11.4.1 A C Library[*]11.5 Further Reading[*]12 File Systems12.1 Why a File System?12.2 A Simple Read-Only File System12.3 Inodes and Writable File Systems12.4 A Virtual File System12.5 Further Reading[*]13 System Calls13.1 Designing System Calls13.2 Implementing System Calls13.3 Further Reading[*]14 Multitasking14.1 Creating New Processes14.2 Cooperative Scheduling with Yielding14.3 Preemptive Scheduling with Interrupts14.3.1 Programmable Interval Timer14.3.2 Separate Kernel Stacks for Processes14.3.3 Difficulties with Preemptive Scheduling[*]14.4 Further Reading[*]15 ReferencesBook: The little book about OS development Quote