CCOperatingSystemX64 是一个完全从零开始的 x86_64 架构操作系统开发项目。项目旨在通过实践深入理解计算机系统底层原理,包括:
- 🔧 双阶段 Bootloader - 支持 LBA 与 CHS 双模式磁盘读取
- 🚀 64位长模式 - 完整的 x86_64 长模式切换与页表设置
- 🏗️ CMake 构建系统 - 现代化的构建与调试流程
- 🐛 QEMU 集成调试 - 支持 GDB 远程调试与 VNC 图形界面
| 特性 |
说明 |
| 双阶段 Bootloader |
支持 LBA 与 CHS 双模式磁盘读取 |
| 64位长模式 |
完整的 x86_64 长模式切换与页表设置 |
| CMake 构建系统 |
现代化的构建与调试流程 |
| VSCode 调试 |
一键启动 GDB 远程调试 |
| 模块化设计 |
清晰的代码组织,易于学习 |
| 进程管理 |
fork/exit/wait、Copy-on-Write |
| 调度器框架 |
Round-Robin、优先级调度、抢占式 |
| 系统调用 |
syscall/sysret、完整的 POSIX 接口 |
| 用户态支持 |
Ring 3 进程、用户态 C 库 |
| 同步原语 |
Spinlock、Mutex、Semaphore、CondVar、RWLock |
| 文件系统 |
VFS、EXT2、ATA 磁盘驱动 |
| 多线程支持 |
内核线程与用户线程 |
| 工具 |
版本要求 |
用途 |
| NASM |
>= 2.15 |
汇编器 |
| GCC |
>= 15.2.1 |
C 编译器 |
| CMake |
>= 4.2.3 |
构建系统 |
| QEMU |
>= 10.2.0 |
系统模拟器 |
| Python |
>= 3.14.2 |
构建脚本 |
# 克隆项目
git clone https://github.com/Charliechen114514/CCOperatingSystemX64
cd CCOperatingSystemX64
# 配置并构建
cmake -B build
cmake --build build
# 运行(VGA 图形模式 - 推荐)
cmake --build build --target vga-run
# 一键构建并运行
cmake -B build && cmake --build build --target build-and-vga-run
按 F5 即可启动 VSCode 调试,支持断点、变量监视、调用栈查看等功能。
详见 调试教程
| 模块 |
功能 |
| Bootloader |
双阶段加载、LBA/CHS 兼容、64位长模式切换 |
| 内核入口 |
独立入口点、BSS 段清零、栈帧设置 |
| 串口驱动 |
COM1 配置、ANSI 颜色、同步输出 |
| 模块 |
功能 |
| VGA 文本模式 |
80x25 显示、16 色支持、硬件/软件光标 |
| GUI 辅助 |
进度条、布局辅助 |
| 格式化输出 |
printf 风格输出、多后端支持 |
| 欢迎界面 |
ASCII 艺术 logo、模块化设计 |
| 模块 |
功能 |
| 字符串库 |
完整字符串操作 (strlen/strcpy/strcmp/strtok 等) |
| 内存操作 |
memset/memcpy/memmove/memcmp |
| 双向链表 |
Linux kernel 风格链表操作 |
| 哈希表 |
开放寻址哈希表 |
| 位图操作 |
位图管理、位查找、位图运算 |
| 数学工具 |
对齐、幂运算、除法变体、位操作宏 |
| 模块 |
功能 |
| E820 内存检测 |
BIOS E820/E801/88h 内存地图解析 |
| 物理帧分配器 |
Bitmap 物理帧分配/释放 |
| 虚拟内存管理 |
页表管理、地址映射、权限控制 |
| 堆内存管理 |
kmalloc/kfree、块合并算法 |
| 页错误处理 |
缺页异常、按需分页框架、Copy-on-Write 框架 |
| 模块 |
功能 |
| 中断框架 |
IDT、异常处理、IRQ 描述符系统 |
| PIC 控制器 |
8259A 初始化、IRQ 重映射、EOI 处理 |
| PIT 定时器 |
可编程间隔定时器驱动 |
| 键盘驱动 |
PS/2 控制器、扫描码解析、环形缓冲区 |
| 串口中断 |
RX/TX 中断、串口 Shell |
| RTC 时钟 |
CMOS RTC、周期性中断、闹钟功能 |
| ATA 磁盘驱动 |
ATA/ATAPI PIO 模式、LBA28/LBA48 寻址 |
| 模块 |
功能 |
| 日志系统 |
五级日志、多后端输出、可配置过滤 |
| 断言系统 |
运行时/静态断言、可配置后端 |
| 栈回溯 |
符号解析、表格化输出、安全验证 |
| Shell 系统 |
多后端支持、命令注册、内置命令 |
| 模块 |
功能 |
| 进程控制块 |
PCB 结构定义、进程状态管理、PID 分配器 |
| 线程控制 |
TCB 结构、线程创建与退出 |
| 上下文切换 |
switch_context/switch_to_first 汇编实现 |
| 进程操作 |
fork/exit/wait4 系统调用、Copy-on-Write 支持 |
| 内核栈管理 |
每进程独立内核栈、栈溢出保护 |
| 用户栈设置 |
1MB 用户栈空间、自动增长支持 |
| 模块 |
功能 |
| 调度器抽象类 |
sched_class 多态设计、策略枚举 |
| Round-Robin 调度 |
FIFO 队列、固定时间片 (10ms) |
| 优先级调度 |
128 级优先级、Active/Expired 队列机制 |
| 抢占式调度 |
时间片到期、优先级抢占支持 |
| 调度器注册 |
动态注册、运行时切换 |
| 模块 |
功能 |
| Spinlock |
自旋锁、Ticket Lock、关闭抢占支持 |
| Mutex |
互斥锁、基于等待队列实现 |
| Semaphore |
信号量、资源计数 |
| CondVar |
条件变量、等待/通知机制 |
| RWLock |
读写锁、读者优先策略 |
| WaitQueue |
等待队列、可中断等待 |
| Atomic |
原子操作、GCC 内建原子 |
| 模块 |
功能 |
| syscall/sysret |
快速系统调用指令支持 |
| 系统调用分发 |
统一入口、参数解析、错误处理 |
| 进程管理 |
fork/exit/wait/getpid/getppid/yield |
| 线程管理 |
thread_create/thread_exit |
| 同步操作 |
mutex_lock/unlock、sem_wait/post |
| I/O 操作 |
write/read/open/close/lseek |
| 系统信息 |
uname/getuid/kill/execve |
| 模块 |
功能 |
| Ring 3 切换 |
iretq 用户态进入、syscall 内核态返回 |
| 用户内存管理 |
USER_BASE~USER_END 地址空间、安全访问验证 |
| 内存拷贝 |
user_copy_from_user/to_user 安全拷贝 |
| 用户态 C 库 |
printf/malloc/exit 等标准库函数 |
| 用户程序构建 |
freestanding 编译、符号重命名、内核嵌入 |
| 模块 |
功能 |
| ATA 磁盘驱动 |
ATA/ATAPI PIO 模式、LBA28/LBA48 寻址 |
| 块设备层 |
通用块设备接口、请求队列管理 |
| VFS 虚拟文件系统 |
超级块、inode、文件、目录项抽象 |
| EXT2 文件系统 |
EXT2 超级块解析、inode 管理、块寻址 |
| 文件操作 |
open/read/write/lseek/close 系统调用 |
| 目录操作 |
readdir、路径解析、目录遍历 |
| 数据磁盘管理 |
自动创建、格式化 ext2 磁盘镜像 |
每章教程都配有对应代码,从零开始构建操作系统:
欢迎提交 Issue 和 Pull Request!
本项目采用 MIT 许可证
Made with ❤️ for OS Development Enthusiasts
⬆ 返回顶部