Operating system from 0 to 1

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Contents Preface I Preliminary 1 Domain documents 1.1 Problem domains 1.2 Documents for implementing a problem domain 1.3 Documents for writing an x86 Operating System 2 From hardware to software: Layers of abstraction 2.1 The physical implementation of a bit 2.2 Beyond transistors: digital logic gates 2.3 Beyond Logic Gates: Machine Language 2.4 Abstraction 3 Computer Architecture 3.1 What is a computer? 3.2 Computer Architecture 3.3 x86 architecture 3.4 Intel Q35 Chipset 3.5 x86 Execution Environment 4 x86 Assembly and C 4.1 objdump 4.2 Reading the output 4.3 Intel manuals 4.4 Experiment with assembly code 4.5 Anatomy of an Assembly Instruction 4.6 Understand an instruction in detail 4.7 Example: jmp instruction 4.8 Examine compiled data 4.9 Examine compiled code 5 The Anatomy of a Program 5.1 Reference documents: 5.2 ELF header 5.3 Section header table 5.4 Understand Section in-depth 5.5 Program header table 5.6 Segments vs sections 6 Runtime inspection and debug 6.1 A sample program 6.2 Static inspection of a program 6.3 Runtime inspection of a program 6.4 How debuggers work: A brief introduction II Groundwork 7 Bootloader 7.1 x86 Boot Process 7.2 Using BIOS services 7.3 Boot process 7.4 Example Bootloader 7.5 Compile and load 7.6 Loading a program from bootloader 7.7 Improve productivity with scripts 8 Linking and loading on bare metal 8.1 Understand relocations with readelf 8.2 Crafting ELF binary with linker scripts 8.3 C Runtime: Hosted vs Freestanding 8.4 Debuggable bootloader on bare metal 8.5 Debuggable program on bare metal III Kernel Programming 9 x86 Descriptors 9.1 Basic operating system concepts 9.2 Drivers 9.3 Userspace and kernel space 9.4 Memory Segment 9.5 Segment Descriptor 9.6 Types of Segment Descriptors 9.7 Descriptor Scope 9.8 Segment Selector 9.9 Enhancement: Bootloader with descriptors 10 Process 10.1 Concepts 10.2 Process 10.3 Threads 10.4 Task: x86 concept of a process 10.5 Task Data Structure 10.6 Process Implementation 10.7 Milestone: Code Refactor 11 Interrupt 12 Memory management 13 File System Index

Author(s): Do Hoang Tu
Year: 2022

Language: English
Pages: 300+

Contents
Preface
I Preliminary
1 Domain documents
1.1 Problem domains
1.2 Documents for implementing a problem domain
1.3 Documents for writing an x86 Operating System
2 From hardware to software: Layers of abstraction
2.1 The physical implementation of a bit
2.2 Beyond transistors: digital logic gates
2.3 Beyond Logic Gates: Machine Language
2.4 Abstraction
3 Computer Architecture
3.1 What is a computer?
3.2 Computer Architecture
3.3 x86 architecture
3.4 Intel Q35 Chipset
3.5 x86 Execution Environment
4 x86 Assembly and C
4.1 objdump
4.2 Reading the output
4.3 Intel manuals
4.4 Experiment with assembly code
4.5 Anatomy of an Assembly Instruction
4.6 Understand an instruction in detail
4.7 Example: jmp instruction
4.8 Examine compiled data
4.9 Examine compiled code
5 The Anatomy of a Program
5.1 Reference documents:
5.2 ELF header
5.3 Section header table
5.4 Understand Section in-depth
5.5 Program header table
5.6 Segments vs sections
6 Runtime inspection and debug
6.1 A sample program
6.2 Static inspection of a program
6.3 Runtime inspection of a program
6.4 How debuggers work: A brief introduction
II Groundwork
7 Bootloader
7.1 x86 Boot Process
7.2 Using BIOS services
7.3 Boot process
7.4 Example Bootloader
7.5 Compile and load
7.6 Loading a program from bootloader
7.7 Improve productivity with scripts
8 Linking and loading on bare metal
8.1 Understand relocations with readelf
8.2 Crafting ELF binary with linker scripts
8.3 C Runtime: Hosted vs Freestanding
8.4 Debuggable bootloader on bare metal
8.5 Debuggable program on bare metal
III Kernel Programming
9 x86 Descriptors
9.1 Basic operating system concepts
9.2 Drivers
9.3 Userspace and kernel space
9.4 Memory Segment
9.5 Segment Descriptor
9.6 Types of Segment Descriptors
9.7 Descriptor Scope
9.8 Segment Selector
9.9 Enhancement: Bootloader with descriptors
10 Process
10.1 Concepts
10.2 Process
10.3 Threads
10.4 Task: x86 concept of a process
10.5 Task Data Structure
10.6 Process Implementation
10.7 Milestone: Code Refactor
11 Interrupt
12 Memory management
13 File System
Index
Biblography