(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的样子,记录下一些很散的点:(改进用加粗)

    1. P115,关于系统态/应用态的设置
    2. P154 本OS用486汇编
    3. 关于时间中断号,对中断号基值改为宏定义,可减少全局变量
    4. 直接往显存写内容 0xa0000
    5. http://community.osdev.info/?(AT)BIOS这个网站貌似已经没有信息了不能使用
    6. 关于线程调度,原OS只有简单的运行态,就绪态,目前对于硬件IO的部分还有阻塞态,用多级优先级反馈队列,但不存在末队列为轮转,并且,系统功能目前还没有分成几个线程去支持。
      至今为止很多模块还没有独立开来,日后可能会独立出来【D16】
    7. P344“处于32位模式无法向BIOS查询?”
      老师的相关回答:BIOS的中断例程适用于16位的实模式(就是以前的DOS,可直接访问空间为1MB,不支持虚拟存储),32位以后要支持虚拟存储就必须采用保护模式,所以就不用BIOS的中断例程了。之所以这么长时间以来BIOS不改进,一是为了兼容,二是windows自己提供保护模式下的中断服务例程,且是可扩展可升级的,所以用不着BIOS提供。
      【要自己写IO】
    8. 小BUG:按下一次shift后,小字母无法输入【真机正确,模拟器的问题】
    9. sprintf:将字符串格式化以后存入s,然后再调用自己实现的写显存显示的函数putfont_XX两个函数配套使用。
    10. 网上找到的鼠标排列【比原来的好看点】:
      "*...............",
      "**..............",
      "*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 0
原创粉丝点击