用 C 和汇编从零构建了一个 32 位操作系统!NEO OS 是一个从零构建的 32 位操作系统,运行在 x86 架构上。虽然还有很多不完善的地方,但已经具备了一个现代操作系统的核心要件。
引导与内核基础:引导程序 (boot.asm) 实模式启动,启用 A20 地址线,设置 GDT,切换到 32 位保护模式。内核入口 (kernel.c) 系统初始化总控,GDT/IDT 已建立,CPU 异常和硬件中断均有处理入口。
内存管理:通过 BIOS int 0x15, eax=0xE820 在实模式下获取内存映射。基于位图的 4KB 页框分配器,支持 page_alloc() 和 page_free()。Bump Allocator 实现 kmalloc() 和 kfree(),用于内核动态内存分配。
显示系统:VGA 文本模式早期使用,支持 print()、println()、clear_screen()。VGA 图形模式 0x13:320×200×256 色。视频驱动提供 putpixel()、fill_rect()、draw_char()、draw_string(),支持双缓冲。桌面环境包含深色背景 + 顶部任务栏 + 4 个桌面图标。窗口管理支持创建窗口、拖拽移动、关闭按钮、点击置顶。
输入系统:PS/2 键盘驱动使用轮询方式读取扫描码并转换为 ASCII。PS/2 鼠标驱动轮询方式读取 3 字节数据包,绘制简单光标。
文件系统:虚拟文件系统 (VFS) 抽象了 open()、read()、close()、readdir() 接口。FAT12 实现支持 1.44MB 软盘镜像格式,可读取根目录、遍历 FAT 表、读取文件内容。Shell 命令 ls、cat 已实现。
Shell 与命令:文本模式 Shell 支持命令历史和执行,可用命令包括 help、clear、echo、about、meminfo、time、ls、cat、run 等。
当前进度:已实现稳定的引导、32 位保护模式、VGA 文本/图形输出、内存管理、文件系统、文本 Shell。图形化 Shell 正在开发中,键盘中断稳定性待修复,高分辨率适配未完成。
作为一个初中生,这个项目让我学到了很多底层知识。虽然还有很长的路要走,但我会继续坚持下去!