美文网首页学习开发操作系统
【0x001】基础的知识

【0x001】基础的知识

作者: 叶一湫 | 来源:发表于2020-05-15 23:48 被阅读0次

  操作系统是需要在计算机启动后马上投入工作的,那么要学习写一个操作系统,首先第一反应,我感觉就是要知道如下几个方面的知识:

  1. 计算机是怎么的启动?
  2. 都干了些什么事情?
  3. 操作系统是从什么时候切入的?

  现在就来研究这三个问题。

1、加电与启动

  怎么启动?地球人都知道,首先要按下电源开关。电源就开始向主板和其它设备供电,给它提供能量;当供电稳定了之后CPU马上就从地址FFFF:0000H 处开始执行指令,放在这里的只有一条跳转指令,跳到系统BIOS中真正的启动代码处。

  这个是硬件工程师控制的,与操作系统无关。

2、BIOS启动阶段

  在上个世纪的70年代初,”只读内存”(read-only memory,缩写为ROM)被发明了出来,于是开机程序就被刷入ROM芯片里,这就成为了拉起计算机的“鞋带”。这里的程序叫做”基本输入输出系统”(Basic Input/Output System),简称为BIOS。

BIOS程序主要是检查计算机硬件能否满足运行的基本条件,所以叫做”硬件自检”(Power-On Self-Test),缩写为POST。

  BIOS中主要存放的程序包括:

  • 自诊断程序(通过读取CMOS RAM中的内容识别硬件配置,并对其进行自检和初始化);
  • CMOS设置程序(引导过程中通过特殊热键启动,进行设置后存入CMOS RAM中);
  • 主要I/O驱动程序;
  • 中断服务。
  • 系统自动装载程序(在系统自检成功后,将磁盘相对0道0扇区上的引导程序装入内存使其运行);
      BIOS提供的中断服务应该是程序员可用的最底层的服务了吧。
      这最后一步之后是我们需要的系统切入点吗?

3、主引导记录

  根据BIOS中设定的启动设备和”启动顺序(Boot Sequence)”,依次尝试读取设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,转入”启动顺序”中的下一个设备。这最前面的512个字节,就叫做”主引导记录”(Master boot record,缩写为MBR)。最后把读取成功的MBR放入从0x7c000开始的内存中。

3.1主引导记录的结构

  根据上面说的,“主引导记录”只有512个字节,可是远远存不下一个系统的,只能再作为一个跳板,指明操作系统开始加载的真正的位置。

主引导记录由三个部分组成:

  • 第1-446字节:调用操作系统的机器码。
  • 第447-510字节:分区表(Partition table)。
  • 第511-512字节:主引导记录签名(0x55和0xAA)。
1-446字节 447-510字节 511字节 512字节
用操作系统的机器码 分区表 0x55 0xAA

  其中,第二部分”分区表”的作用,是将软(硬)盘分成若干个区并记录相关的信息。

3.2 分区表

  分区表的长度只有64个字节,其中又划分成四个部分,每部分占16个字节。所以一个硬盘最多只能分四个一级分区,又叫做”主分区”。

每个主分区的16个字节,又由6个部分组成:

  1. 第1个字节:如为0x80表示该主分区是激活分区,控制权要转给这个分区。四个主分区里面只能有一个是激活的。
  2. 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
  3. 第5个字节:主分区类型。
  4. 第6-8个字节:主分区最后一个扇区的物理位置。
  5. 第9-12字节:该主分区第一个扇区的逻辑地址。
  6. 第13-16字节:主分区的扇区总数。
第1字节 第2-4字节 第5字节 第6-8字节 第9-12字节 第13-16字节
激活标志 第一个扇区物理位置 主分区类型 最后一个扇区物理位置 第一个扇区逻辑地址 扇区总数

  最后的四个字节(”主分区的扇区总数”),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。

4、硬盘启动

  这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。

4.1 情况A:卷引导记录

  四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做”卷引导记录”(Volume boot record,缩写为VBR)。“卷引导记录”的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。

4.2 情况B:扩展分区和逻辑分区

  随着硬盘容量越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。
  计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。
  但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。

4.3 情况C:启动管理器

  在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。

5、操作系统

  控制权转交给操作系统后,操作系统的内核首先被载入内存。至此,全部启动过程完成。

相关文章

网友评论

    本文标题:【0x001】基础的知识

    本文链接:https://www.haomeiwen.com/subject/nazbnhtx.html