操作系统学习笔记(一): BIOS

这一节主要讲解了BIOS(Basic Input/Output System),基本输入输出系统。

首先我们需要知道,计算机加电之后,是从什么地方读取的第一条指令,从磁盘的什么地方读取的我的操作系统的内容,也就是计算机启动的过程是怎样的。

计算机加电后,首先是CPU的初始化过程,将各寄存器初始化,此时系统处于实模式下。我们要知道计算机内存分为两种,RAM(Random Access Memory)随机访问存储和ROM(Read-Only Memory)只读存储。其中RAM掉电内容会丢失(也就是我平时所理解的内存条内的内容比如),ROM掉电不会丢失内容。因此系统初始化代码就存储在ROM中。由于CPU初始化完成后处于实模式,寻址空间为20位也就是1M,因此系统初始化代码也就是BIOS启动固件是存储在1M之下,如下图。还需要知道的是,CPU初始化完后CS代码段寄存器与IP指令指针寄存器决定了第一条要执行的代码在ROM中的位置,而BIOS能提供的功能也列在下图之中:1. 基本输入输出的程序(从磁盘读数据、从键盘读输入、显示器上显示输出等);2. 系统设置信息(从硬盘启动还是从网络启动还是从U盘启动等);3. 开机后自检程序(检查内存显卡是否正常);4. 系统自启动程序(启动操作系统)等。

操作系统学习笔记(一): BIOS_第1张图片

BIOS会根据设置执行启动程序,从磁盘把加载程序和操作系统内容加载到系统。那么具体过程是怎样的呢?首先BIOS将磁盘读引导扇区加载进指定位置0x7c00,引导扇区大小限制为512byte。此时跳转到CS:IP = 0000:7c00执行引导扇区的程序段,通过引导扇区的程序段跳转到读取操作系统的加载程序。加载程序主要有两个功能:1. 将操作系统的代码和数据从硬盘加载到内容中;2. 将控制权转移给操作系统,也就是CS:IP跳转到操作系统代码段,执行操作系统的功能。

那么问题来了,既然能读磁盘内容,为什么不直接将操作系统内核映像读取到内存空间而要先读取引导扇区的加载程序呢?这是因为不同的操作系统有不同的文件系统,也就需要不同的启动方式。而加载程序限制为512字节,无法覆盖所有类型的系统,因此首先将磁盘引导扇区内的程序加载进来,引导扇区内的程序可以识别并加载不同类型的系统内核到内存中(亦或是不同的系统有着不同的引导扇区,加载进来之后就知道是什么类型的系统了,至少学到现在还不知道,后续可能会有详细介绍吧)。此时控制权转移给操作系统内核。

除此之外BIOS还可以使用一些简单地系统调用,比如说:1. INT 10h:字符显示;2. INT 13h:磁盘扇区读写;3. INT 15h:检测内存大小;4. INT 16h:键盘输入。这些系统调用都只是最简单的系统调用,并且只能在实模式下访问。当进入操作系统并且操作系统是保护模式,那么这些功能就不能用了。

你可能感兴趣的:(操作系统学习:清华大学学堂在线)