(0)从零开始的操作系统开发日记
来源:互联网 发布:尚学堂 大数据视频 编辑:程序博客网 时间:2024/05/21 18:42
ゼロからのOS開発ノート,从零开始的操作系统开发日记其实是个课程设计的坑,打算用于记录学习和开发过程中遇到的一些散点,在着手开干的时候会在github那边开个项目【其实打算博客也直接在那边写,但是我懒得搭博客了,,】
目前主要参考书籍是川合秀实先生的《30天自制操作系统》,关于这本书,一些整理如下:
- 软盘读盘D3
- 简单的写显存-图形显示D4
- 鼠标,键盘驱动D6-D8
- 内存管理(动态分区+相邻回收)D9,10
- timer+FIFO长缓冲区(链表)+中断号管理时间片D12-13
- 分辨率提高-图形驱动D14
- 多任务处理(优先级+等长时间片?)D15-D16
- 控制台:键盘IO,窗口滚动,控制台命令 D17-19
- FAT: D19
- 系统级API D20
- 系统安全防护:容错输入,防非法内存访问,支持异常【考虑用系统态/用户态解决】 D21
- C程序实例 D22
- 图形处理 D23
- 窗口切换,移动(包括优化),关闭,输入定向,多窗口,D24-26文件操作API D28*
按内容分大概就是这样:
- 内存: D9,D10
- 鼠标,键盘驱动:D6-D8
- 图形处理相关: D4,D14,D23,D24-D26
- 多任务相关: D12-D13,D15-D16
- 文件管理: D19,D28
- 系统库: D20,D27
具体功能:
- 控制台:D17-19
- 系统安全:D21
- C程序实例:D23
- 其他未收录的大部分都是一些具体的细节优化
目前读到D19的样子,记录下一些很散的点:(改进用加粗)
- P115,关于系统态/应用态的设置
- P154 本OS用486汇编
- 关于时间中断号,对中断号基值改为宏定义,可减少全局变量
- 直接往显存写内容 0xa0000
- http://community.osdev.info/?(AT)BIOS这个网站貌似已经没有信息了不能使用
- 关于线程调度,原OS只有简单的运行态,就绪态,目前对于硬件IO的部分还有阻塞态,用多级优先级反馈队列,但不存在末队列为轮转,并且,系统功能目前还没有分成几个线程去支持。
至今为止很多模块还没有独立开来,日后可能会独立出来【D16】 - P344“处于32位模式无法向BIOS查询?”
老师的相关回答:BIOS的中断例程适用于16位的实模式(就是以前的DOS,可直接访问空间为1MB,不支持虚拟存储),32位以后要支持虚拟存储就必须采用保护模式,所以就不用BIOS的中断例程了。之所以这么长时间以来BIOS不改进,一是为了兼容,二是windows自己提供保护模式下的中断服务例程,且是可扩展可升级的,所以用不着BIOS提供。
【要自己写IO】 - 小BUG:按下一次shift后,小字母无法输入【真机正确,模拟器的问题】
- sprintf:将字符串格式化以后存入s,然后再调用自己实现的写显存显示的函数putfont_XX两个函数配套使用。
- 网上找到的鼠标排列【比原来的好看点】:
"*...............",
"**..............",
"*O*.............",
"*OO*............",
"*OOO*...........",
"*OOOO*..........",
"*OOOOO*.........",
"*OOOOOO*........",
"*OOOOOOO*.......",
"*OOOO*****......",
"*OO*O*..........",
"*O*.*O*.........",
"**..*O*.........",
"*....*O*........",
".....*O*........",
"......*.........";
其实最终这个课程设计会变成什么样子,我个人猜测可能已经不是原来设想的在haribote这个系统的基础上进行算法添加和修改了,由于课程设计最核心的需要实现文件管理,这就要实现IO驱动了,但是保护模式又不能用BIOS的实模式提供中断例程,目前解决方案有2:
1. 自己写IO驱动
2. 不使用磁盘,把软盘空闲区用来存储系统内的文件,虽然容量受限,但还是可以有模有样的写个FAT12文件管理的,而且难度更低。
至于最后要怎么实现,要和队友讨论一下才决定。
目前的系统都是在VMware上进行调试,还是蛮方便的,自带的qemu好像会有些上面提到和书上提到的谜之BUG。
这些日记可能会很散,因为写下来只是作为一个提醒一样的东西,可能在之后需要写一些面向读者的日记。
附文档,开发参考链接
https://www.zhihu.com/question/25628124
看了一些前辈的做法以后,我也反思了一下我想做的到底是什么,我觉得我想做的可能是一个玩具内核,顺便交一下课程设计的作业,各种硬件的手册目前还是有点不知道如何下手。嘛,先把这本书推完再说吧,以现在一天2D的进度20号以前【now=2016年7月16日 19:46:24】比较粗略的看完吧,大概知道一些实现和算法。
ま、頑張りましょう
- (0)从零开始的操作系统开发日记
- (1)从零开始的操作系统开发日记
- (2)从零开始的操作系统开发日记
- (3)从零开始的操作系统开发日记
- (4)从零开始的操作系统开发日记
- (5)从零开始的操作系统开发日记
- (6)从零开始的操作系统开发日记
- (终)从零开始的操作系统开发日记
- 操作系统开发日记(1-5天)
- 【日记】从零开始的第一篇
- 从零开始学习VBA(日记)
- 从零开始自制操作系统(序)
- 从零开始的机器人操作系统(ROS)(0)机器人漫谈以及双系统安装
- 手写一个X86操作系统实战:从零开始构建一个U盘启动的自制操作系统(一)
- 自学Linux从零开始(自学日记②)
- 自制操作系统日记(01)
- Hadoop从零开始--Centos操作系统的安装
- SOLOT的开发日记
- 【翻译】LearnYouSomeErlangForGreatGood(三):真·起始
- 一个程序员的顿悟:理想的程序员只比你多了6个一点点
- 判断一棵二叉树是否为完全二叉树
- 软件开发文档流程,指导怎样从那些方面构建一个完善的软件使用指南
- Android开发中的Handler总结
- (0)从零开始的操作系统开发日记
- Unity5.x新特性
- C语言返回值详解
- 关于学习,我要发泄一下我的选择困难症
- android 闪光灯编程
- Git学习总结
- HDU 1358 Period
- 项目07-16
- 第146课: Spark面试经典系列之Yarn Cluster生产环境下JVM问题及解决方案