# x86_os **Repository Path**: knight-013/x86_os ## Basic Information - **Project Name**: x86_os - **Description**: 从零手写32位操作系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-17 - **Last Updated**: 2025-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # x86_os #### 介绍 从零手写32位操作系统 #### 软件架构 基于x86架构实现的32位操作系统,主要实现了以下功能: - 实现了中断与异常处理,参见源文件:soucre/kernel/cpu/irq.c; - 采用虚拟内存实现进程隔离,保障系统安全稳定,参见源文件:soucre/kernel/core/memeory.c; - 支持进程的创建于加载,多进程运行,通过时间片轮转进行进行调度,参见源文件:soucre/kernel/core/task.c。 - 实现设备文件系统对多种设备进行了管理,参见目录:soucre/kernel/fs/devfs; - 实现 FAT16 文件系统以管理文件,参见目录:soucre/kernel/fs/fatfs: - 集成虚拟文件系统,统一管理文件系统与设备,参见源文件:source/kernel/fs.c。 - 区分了内核态与用户态,提供了22个系统调用。参见源文件:soucre/kernel/core/syscall.c; - 提供 shell 命令行界面,方便用户交互操作。参见源目录:source/shell; 项目基于通过 gdb 连接 Qemu 进行调试,具体请参见 .vscode 目录下配置文件。 #### 操作系统加载过程 计算机通电后,首先由 BIOS 进行初始化。进行硬件自检,检查硬件是否正常工作,如 CPU、内存、硬盘等。初始化完成后按照设置的启动顺序,查找可启动设备,如磁盘,光盘,U 盘等。本操作系统启动设备为磁盘,找到可启动设备后,它会读取该设备的第一个扇区,即主引导扇区,并执行主引导扇区的程序。主引导扇区主要用于加载操作系统内核。 主引导扇区只有 512 字节,因此我们采用二级加载,有主引导扇区加载引导程序,引导程序加载操作系统内核。主引导扇区程序:source/boot ,二级引导程序:source/loader。 #### 操作系统初始化 引导程序加载操作系统后,跳转至操作系统执行。操作系统进行初始化,参见:source/kernel/init/init.c。主要代码: ``` void kernel_init(boot_info_t* boot_info) { //初始化CPU cpu_init(); //处理中断与异常 irq_init(); //日志初始化 log_init(); //控制窗口初始化 //console_init(); //内存控制初始化 mermory_init(boot_info); //文件系统初始化 fs_init(); //设置定时器 time_init(); //进程管理初始化 task_mananger_init(); //键盘初始化 //kbd_init(); } ``` 初始化后加载 shell 进程进行交互。 #### 安装教程 Windows环境下安装: 1. 下载 image 目录下 disk1.vhd 与 disk2.vhd , 下载 qemu 虚拟机。 2. 将 disk1.vhd 与 disk2.vhd 保存在同一文件夹,在 cmd 执行下面的命令: Start-Process -FilePath "qemu-system-i386" -ArgumentList "-m 128M -drive file=disk1.vhd,index=0,media=disk,format=raw -drive file=disk2.vhd,index=1,media=disk,format=raw"