根据《操作系统真象还原》写的AMD64架构,运行在bochs模拟器上的单核操作系统。
仅展示部分操作系统运行原理以供学习。
bochs 2.8
gcc 14.2.1
make 4.4.1
nasm 2.16.03
不过除了bochs外工具的版本差异影响不大
boot/boot.asm: 引导代码。基本分页,进入64位长模式的准备。
kernel/main.c: 内核主函数,进入长模式后跳转。用于初始化各个模块,并准备执行第一个进程。
kernel/intr.c等: 建立中断所需的各个结构和函数
kernel/memory.c: 内存管理相关函数。按页分配alloc_pages,free_pages。精细分配内存kalloc,kfree。用于分配用户区内存相关函数。内存的映射和解映射,缺页中断等函数
device/*: 键盘输入屏幕输出,时钟中断等和设备相关的结构和函数
lib/*: 用户或内核进程可能需要的一些数据结构和函数
task/*: 进程创建,切换,阻塞等结构和函数
fs/*: 文件系统相关的结构和函数
userprog/*: 用户进程运行所需的一些系统调用
command/*: 用户程序
本系统实现了read,write,brk,clone,execv,wait等系统调用。其参数可能与在Linux下的同名系统调用略有差别,详见lib/syscall.h
磁盘区域 | 位置 |
---|---|
boot | 第0扇区 |
loader | 第1,2扇区 |
kernel | 从第三扇区开始大概180个扇区 |
分区 | 从第2048扇区开始到末尾 |
所有128M物理地址都被映射到了内核区域,该设计主要是为了便于物理地址与内核地址相互转换。其中前1M地址用于存放内核代码,第二个1M用于内核内存池。其余物理地址用于映射用户区。
虽说本操作系统仅供学习使用,但是依然可以做更进一步的工作使其看上去更像一个“操作系统”。比如可以添加一些基本命令,运行一些自制小游戏,添加一些其他系统调用。