自己动手写操作系统读书笔记——第一章:马上动手写一个最小的操作系统

自己动手写操作系统读书笔记——第一章:马上动手写一个最小的操作系统

系列前言

最近终于将《自己动手写操作系统》,于渊著,这本书读完了。读完之后受益匪浅,对于计算机从按下启动按钮到桌面显示有了一个大体的了解,对以前总是思索的问题也有了很多了解,对于内核、优先级、进程、系统调用、驱动更是建立了一个具体的形象,软件和硬件之间如何配合也跃然纸上。
当读完这本书,我的第一感觉是这本书的内容是面向初学者的,更多的是向我这样的初学者展示了IA-32架构下的一个最最简单的操作系统是如何一步一步构建起来的,也正是因为面对初学者,所以书中并没有添加特别复杂的算法和兼顾特别多的方面,这本书的侧重点在于CPU管理和进程实现,并有一些简单的I/O请求的实现,没有实现的部分有:

  • 存储器管理这部分的内容是没有添加的,内核函数是利用gcc编译出来的,也正是因为如此,在书中框架下添加一个进程必须利用重新编写内核;
  • 仅仅初步实现了进程这个概念,进程仅仅有两个状态,就绪和运行,并没有考虑到进程通讯,这是因为书中并没有实现完整的I/O请求,并完全没有涉及内存管理和文件系统。

总体来说。当然缺失了上述这些内容这些并不是缺点,书中完全给出了一个足够简单明了的框架来供我们完成这些细节。

第一章

这章主要解答了我一个疑惑已久的问题,为什么计算机启动的时候能够自动执行代码?这些自动执行的代码位于何方?为了解答这个问题,第一章手把手教导了我们如何写一个最简单的启动软盘。
其实这个问题的答案很简单,要解答这个过程我们需要了解一下计算机按下电源键后发生了什么,其实计算机就做了两步操作:
自己动手写操作系统读书笔记——第一章:马上动手写一个最小的操作系统其中的BIOS位于主板的一块ROM中,在上电时厂家通过逻辑电路来启动其初始化代码,初始化代码的工作包括检查硬件,初始化控制器,设置中断向量表等操作。
而第二部则是解答最开始问题的关键,当BIOS自检并设置好之后,会将软盘的0面0磁道1扇区的内容复制到内存的7c00处并从7c00处开始执行。这也是我们的代码的最初的启动地方。至于为什么是7c00呢,这是行业默认的。
对于则有可能有着另外一套规定,但是本质上和软盘的启动逻辑是一致的:从外设上的约定的扇区中取出代码放到对应的位置处,并跳转到这个位置。