本科大四结束时,曾经花了一个暑假写过一个玩具操作系统,可以刻录到U盘并运行在裸机上。最近重温一下,打算写在知乎上,整体难度上很小,适合初学者,只需要知道基本的汇编和C编程即可。
系统内容上包括可视化、系统保护模式、内存管理、多任务与进程通信、文件系统、API和运行在系统上的一些小应用。实现上自底向上,底层采用NASM汇编+C实现,初期在VM上调试,后期以虚拟软盘镜像的形式部署到机器上,编写的时候主要参考《30天自制操作系统》这本书,很推荐,对新手很友好,语言也很幽默。
实现流程大概:
- 初始镜像
- 手工编写IPL镜像
- VM启动镜像
- 真机启动镜像
- 系统引导
- 读取磁盘信息
- 引导扇区
- 启动扇区信息记录
- 初始系统实现
- 引入C,与NASM混编
- 编译流程
- GUI初步
- 实现调色板,控制屏幕
- 导入字符集,实现字符打印功能,初步Debug
- API: 字符串输出
- 实现中断
- 设置GDT与IDT,初始化中断设置
- 终端接收与缓存
- 键盘中断的实现
- 鼠标中断的实现
- API: 键盘鼠标中断
- 内存管理
- 内存检查
- 虚拟地址映射
- 空闲链表与首次适应算法
- 内存碎片化的解决方案
- API: 内存申请、查看与释放
- GUI进阶
- 分辨率调整
- 图层结构设计
- 桌面图层与鼠标
- API: 图层申请与释放
- 窗口
- 窗口图层的绘制与移动
- 当前主窗口的切换
- API: 窗口绘制
- 定时器
- 定时器中断与倒计时功能
- 多个定时器的实现
- 利用定时器优化图层绘制
- API: 倒计时
- 单进程管理
- 进程控制块的设计
- 进程创建、休眠与销毁
- 进程监听中断
- 进程控制窗体
- API: 进程创建、休眠与销毁
- 多进程管理
- 轮转算法的实现
- 进程通信
- 主进程的切换
- API: 进程通信
- 文件系统
- FCB的设计
- 单个扇区的读写
- 整个文件的读写
- API: 文件读写
- 蜂鸣器
- 单个音符的播放
- 连续音符的播放
- API: 蜂鸣器
- 应用程序
- 主命令行的实现
- 内存管理器
- 进程管理器
- 计算器
- 文本编辑器
- 图片显示器
- 音乐播放器
- 关机
Github地址
VictorYXL/MyOSgithub.com当初写的时候很随意,代码没啥规范,文件系统还有些BUG,所以没往上传。如果有人看,我再修修BUG,规范下代码。
粉丝数从1涨到了100,我有了继续写下去的动力了,以后也会有空分享下自己写的别的有意思的项目。
涨了好多粉丝,写完了系统引导的实现,分别是系统启动和引导的汇编实现。
VictorYXL:30天自制操作系统-初版镜像和启动zhuanlan.zhihu.com