https://github.com/zhuagenborn/tiny-x86-os
๐ฝ A simple Intel x86 operating system written in assembly and C++, supporting interrupts, memory paging and heap allocation, disk control, file partition, system calls, thread scheduling, etc.๏ผไฝฟ็จC++ๅๆฑ็ผๅผๅ็็ฎๆIntel x86ๆไฝ็ณป็ป๏ผๆฏๆไธญๆญใๅ
ๅญๅ้กตใๅ ๅ
ๅญ็ฎก็ใ็ฃ็ๆงๅถใๆไปถๅๅบใ็ณป็ป่ฐ็จใ็บฟ็จ่ฐๅบฆ็ญๅ่ฝใ๏ผ
https://github.com/zhuagenborn/tiny-x86-os
assembly cpp20 disk-management interrupt kernel memory-management opertaing-system thread-scheduling
Last synced: about 1 year ago
JSON representation
๐ฝ A simple Intel x86 operating system written in assembly and C++, supporting interrupts, memory paging and heap allocation, disk control, file partition, system calls, thread scheduling, etc.๏ผไฝฟ็จC++ๅๆฑ็ผๅผๅ็็ฎๆIntel x86ๆไฝ็ณป็ป๏ผๆฏๆไธญๆญใๅ ๅญๅ้กตใๅ ๅ ๅญ็ฎก็ใ็ฃ็ๆงๅถใๆไปถๅๅบใ็ณป็ป่ฐ็จใ็บฟ็จ่ฐๅบฆ็ญๅ่ฝใ๏ผ
- Host: GitHub
- URL: https://github.com/zhuagenborn/tiny-x86-os
- Owner: Zhuagenborn
- License: mit
- Created: 2024-02-15T21:13:17.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-30T04:04:57.000Z (about 1 year ago)
- Last Synced: 2025-04-12T08:19:30.924Z (about 1 year ago)
- Topics: assembly, cpp20, disk-management, interrupt, kernel, memory-management, opertaing-system, thread-scheduling
- Language: C++
- Homepage:
- Size: 184 KB
- Stars: 32
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
README
# Tiny *x86* Operating System in *C++*






## Introduction
A simple *Intel x86* operating system written in *assembly* and *C++*, developed on *Ubuntu* and *Bochs*.
- Boot
- The master boot record for system startup.
- Memory
- Memory segmentation and paging.
- Virtual memory mapping based on bitmaps.
- Heap management (`std::malloc` and `std::free`) based on memory arenas.
- Interrupts
- Interrupt control based on *Intel 8259A*.
- Timer interrupts based on *Intel 8253*.
- Threads
- Thread scheduling based on timer interrupts.
- Semaphores and locks based on interrupts.
- Processes
- User processes based on *Intel x86* task state segments.
- Fork.
- Graphic
- Character printing in VGA text mode.
- Keyboard
- Keyboard control based on *Intel 8042*.
- The circular keyboard input buffer.
- Disks
- IDE channel and disk control.
- Disk partition scanning.
- File System
- File and directory management based on index nodes.
- System Calls
- Privilege switching and system calls based on interrupts.
- *C/C++*
- Basic *C/C++* standard libraries.
## Contents
### Getting Started
1. [Development Environment](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Getting%20Started/Development%20Environment.md)
2. [Building the System](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Getting%20Started/Building%20the%20System.md)
### Boot
3. [Master Boot Record](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Boot/Master%20Boot%20Record.md)
4. [Loader](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Boot/Loader.md)
### Kernel
5. [Interrupts](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/Interrupts.md)
6. [System Calls](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/System%20Calls.md)
7. [Threads](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/Threads.md)
8. [Memory](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/Memory.md)
9. [File System](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/File%20System.md)
10. [User Processes](https://github.com/Zhuagenborn/Tiny-x86-OS/blob/main/docs/Kernel/User%20Processes.md)
## References
- [*ใๆไฝ็ณป็ป็่ฑก่ฟๅใ้้ข*](https://github.com/yifengyou/os-elephant)
## Structure
```console
.
โโโ CITATION.cff
โโโ Debugging.md
โโโ LICENSE
โโโ Makefile
โโโ README.md
โโโ docs
โย ย โโโ Boot
โย ย โย ย โโโ Images
โย ย โย ย โย ย โโโ loader
โย ย โย ย โย ย โโโ memory-paging.drawio
โย ย โย ย โย ย โโโ memory-paging.svg
โย ย โย ย โย ย โโโ page-directory-table.drawio
โย ย โย ย โย ย โโโ page-directory-table.svg
โย ย โย ย โโโ Loader.md
โย ย โย ย โโโ Master Boot Record.md
โย ย โโโ Getting Started
โย ย โย ย โโโ Building the System.md
โย ย โย ย โโโ Development Environment.md
โย ย โโโ Kernel
โย ย โย ย โโโ File System.md
โย ย โย ย โโโ Images
โย ย โย ย โย ย โโโ file-system
โย ย โย ย โย ย โย ย โโโ directory-entries.drawio
โย ย โย ย โย ย โย ย โโโ directory-entries.svg
โย ย โย ย โย ย โย ย โโโ index-node.drawio
โย ย โย ย โย ย โย ย โโโ index-node.svg
โย ย โย ย โย ย โโโ memory
โย ย โย ย โย ย โย ย โโโ memory-heap.drawio
โย ย โย ย โย ย โย ย โโโ memory-heap.svg
โย ย โย ย โย ย โย ย โโโ memory-pools.drawio
โย ย โย ย โย ย โย ย โโโ memory-pools.svg
โย ย โย ย โย ย โโโ threads
โย ย โย ย โย ย โโโ thread-block.drawio
โย ย โย ย โย ย โโโ thread-block.svg
โย ย โย ย โย ย โโโ thread-lists.drawio
โย ย โย ย โย ย โโโ thread-lists.svg
โย ย โย ย โย ย โโโ thread-switching.drawio
โย ย โย ย โย ย โโโ thread-switching.svg
โย ย โย ย โโโ Interrupts.md
โย ย โย ย โโโ Memory.md
โย ย โย ย โโโ System Calls.md
โย ย โย ย โโโ Threads.md
โย ย โย ย โโโ User Processes.md
โย ย โโโ badges
โย ย โโโ C++.svg
โย ย โโโ License-MIT.svg
โย ย โโโ Linux.svg
โย ย โโโ Made-with-GitHub-Actions.svg
โย ย โโโ Made-with-Make.svg
โย ย โโโ NASM.svg
โโโ include
โย ย โโโ boot
โย ย โย ย โโโ boot.inc
โย ย โโโ kernel
โย ย โย ย โโโ debug
โย ย โย ย โย ย โโโ assert.h
โย ย โย ย โโโ descriptor
โย ย โย ย โย ย โโโ desc.h
โย ย โย ย โย ย โโโ desc.inc
โย ย โย ย โย ย โโโ gdt
โย ย โย ย โย ย โโโ idx.h
โย ย โย ย โย ย โโโ tab.h
โย ย โย ย โโโ interrupt
โย ย โย ย โย ย โโโ intr.h
โย ย โย ย โย ย โโโ pic.h
โย ย โย ย โโโ io
โย ย โย ย โย ย โโโ disk
โย ย โย ย โย ย โย ย โโโ disk.h
โย ย โย ย โย ย โย ย โโโ disk.inc
โย ย โย ย โย ย โย ย โโโ file
โย ย โย ย โย ย โย ย โย ย โโโ dir.h
โย ย โย ย โย ย โย ย โย ย โโโ file.h
โย ย โย ย โย ย โย ย โย ย โโโ inode.h
โย ย โย ย โย ย โย ย โย ย โโโ super_block.h
โย ย โย ย โย ย โย ย โโโ ide.h
โย ย โย ย โย ย โโโ file
โย ย โย ย โย ย โย ย โโโ dir.h
โย ย โย ย โย ย โย ย โโโ file.h
โย ย โย ย โย ย โย ย โโโ path.h
โย ย โย ย โย ย โโโ io.h
โย ย โย ย โย ย โโโ keyboard.h
โย ย โย ย โย ย โโโ timer.h
โย ย โย ย โย ย โโโ video
โย ย โย ย โย ย โโโ console.h
โย ย โย ย โย ย โโโ print.h
โย ย โย ย โย ย โโโ print.inc
โย ย โย ย โโโ krnl.h
โย ย โย ย โโโ krnl.inc
โย ย โย ย โโโ memory
โย ย โย ย โย ย โโโ page.h
โย ย โย ย โย ย โโโ page.inc
โย ย โย ย โย ย โโโ pool.h
โย ย โย ย โโโ process
โย ย โย ย โย ย โโโ elf.inc
โย ย โย ย โย ย โโโ proc.h
โย ย โย ย โย ย โโโ tss.h
โย ย โย ย โโโ selector
โย ย โย ย โย ย โโโ sel.h
โย ย โย ย โย ย โโโ sel.inc
โย ย โย ย โโโ stl
โย ย โย ย โย ย โโโ algorithm.h
โย ย โย ย โย ย โโโ array.h
โย ย โย ย โย ย โโโ cerron.h
โย ย โย ย โย ย โโโ cmath.h
โย ย โย ย โย ย โโโ cstddef.h
โย ย โย ย โย ย โโโ cstdint.h
โย ย โย ย โย ย โโโ cstdlib.h
โย ย โย ย โย ย โโโ cstring.h
โย ย โย ย โย ย โโโ iterator.h
โย ย โย ย โย ย โโโ mutex.h
โย ย โย ย โย ย โโโ semaphore.h
โย ย โย ย โย ย โโโ source_location.h
โย ย โย ย โย ย โโโ span.h
โย ย โย ย โย ย โโโ string_view.h
โย ย โย ย โย ย โโโ type_traits.h
โย ย โย ย โย ย โโโ utility.h
โย ย โย ย โโโ syscall
โย ย โย ย โย ย โโโ call.h
โย ย โย ย โโโ thread
โย ย โย ย โย ย โโโ sync.h
โย ย โย ย โย ย โโโ thd.h
โย ย โย ย โโโ util
โย ย โย ย โโโ bit.h
โย ย โย ย โโโ bitmap.h
โย ย โย ย โโโ block_queue.h
โย ย โย ย โโโ format.h
โย ย โย ย โโโ metric.h
โย ย โย ย โโโ metric.inc
โย ย โย ย โโโ tag_list.h
โย ย โโโ user
โย ย โโโ io
โย ย โย ย โโโ file
โย ย โย ย โย ย โโโ dir.h
โย ย โย ย โย ย โโโ file.h
โย ย โย ย โโโ video
โย ย โย ย โโโ console.h
โย ย โโโ memory
โย ย โย ย โโโ pool.h
โย ย โโโ process
โย ย โย ย โโโ proc.h
โย ย โโโ stl
โย ย โย ย โโโ cstdint.h
โย ย โโโ syscall
โย ย โโโ call.h
โโโ src
โโโ boot
โย ย โโโ loader.asm
โย ย โโโ mbr.asm
โโโ kernel
โย ย โโโ debug
โย ย โย ย โโโ assert.cpp
โย ย โโโ descriptor
โย ย โย ย โโโ desc.asm
โย ย โย ย โโโ gdt
โย ย โย ย โโโ tab.cpp
โย ย โโโ interrupt
โย ย โย ย โโโ intr.asm
โย ย โย ย โโโ intr.cpp
โย ย โย ย โโโ pic.cpp
โย ย โโโ io
โย ย โย ย โโโ disk
โย ย โย ย โย ย โโโ disk.cpp
โย ย โย ย โย ย โโโ file
โย ย โย ย โย ย โย ย โโโ dir.cpp
โย ย โย ย โย ย โย ย โโโ file.cpp
โย ย โย ย โย ย โย ย โโโ inode.cpp
โย ย โย ย โย ย โย ย โโโ super_block.cpp
โย ย โย ย โย ย โโโ ide.cpp
โย ย โย ย โย ย โโโ part.cpp
โย ย โย ย โโโ file
โย ย โย ย โย ย โโโ dir.cpp
โย ย โย ย โย ย โโโ file.cpp
โย ย โย ย โย ย โโโ path.cpp
โย ย โย ย โโโ io.asm
โย ย โย ย โโโ io.cpp
โย ย โย ย โโโ keyboard.cpp
โย ย โย ย โโโ timer.cpp
โย ย โย ย โโโ video
โย ย โย ย โโโ console.cpp
โย ย โย ย โโโ print.asm
โย ย โย ย โโโ print.cpp
โย ย โโโ krnl.cpp
โย ย โโโ main.cpp
โย ย โโโ memory
โย ย โย ย โโโ page.asm
โย ย โย ย โโโ page.cpp
โย ย โย ย โโโ pool.cpp
โย ย โโโ process
โย ย โย ย โโโ proc.cpp
โย ย โย ย โโโ tss.asm
โย ย โย ย โโโ tss.cpp
โย ย โโโ stl
โย ย โย ย โโโ cstring.cpp
โย ย โย ย โโโ mutex.cpp
โย ย โย ย โโโ semaphore.cpp
โย ย โโโ syscall
โย ย โย ย โโโ call.asm
โย ย โย ย โโโ call.cpp
โย ย โโโ thread
โย ย โย ย โโโ sync.cpp
โย ย โย ย โโโ thd.asm
โย ย โย ย โโโ thd.cpp
โย ย โโโ util
โย ย โโโ bitmap.cpp
โย ย โโโ format.cpp
โย ย โโโ tag_list.cpp
โโโ user
โโโ io
โย ย โโโ file
โย ย โย ย โโโ dir.cpp
โย ย โย ย โโโ file.cpp
โย ย โโโ video
โย ย โโโ console.cpp
โโโ memory
โย ย โโโ pool.cpp
โโโ process
โโโ proc.cpp
```
## License
Distributed under the *MIT License*. See `LICENSE` for more information.