各位同学 大家好
我们现在开始来讲 第二讲
这一讲主要内容是中断 异常和系统调用
首先我们需要来了解一下
计算机系统在加电的时候
从什么地方去读第一条指令
从磁盘上的什么地方
去读的我操作系统内容
在这里头就相当于我们在说
计算机系统的启动过程
这张图大家在前面的课程当中都已经见到过了
说CPU是有计算能力
它可以执行指令 内存它有存储能力
我们在程序运行的过程当中
代码数据是存在这个内存里的
然后这个I/O设备可以跟外交有交互能力
我们的键盘输入
我们的磁盘输入输出 网络的输入输出
都是作为I/O设备来跟系统打交道的
但是在今天的课程里头
我们会更进一步来讨论这样一个问题
CPU在加电之后
它执行的第一条指令在哪
那说我们在CPU在加电
电源稳定之后
那这个时候它会对里头的寄存器做一个初始化
到一个指定状态
这个时候开始去执行第一条指令
那这第一指令在哪
它会在内存里头
但是我们在前面讲的内存的时候
说内存是用来存数据的
里头一关掉电源之后
再加电的时候里面就没内容了
这个时候你去执行第一条指令
这第一条指令从哪来呢
我们这个时候会
内存会分成RAM 随机访问存储
还有一个ROM只读存储
这两个部分 内存当中有一部分区域里头
就是ROM它是只读存储
也就是说加电之后
里头还会有一些我们原来写入的一些内容
这些内容我们的系统初始化代码
就从那里开始执行
具体说起来我们可以这样来看
在计算机系统加电的时候
我们在这里头1MB下面有一段
这段就是我们的BIOS固件
这部分它在加电的时候我们蹦到那去执行
这个时候就有一个约定
计算机系统CPU在初始化完成之后
里头的代码段寄存器和当前指针
这两个寄存器的值是多少
因为这个值直接决定了我们从内存当中
读数据时候的位置
我们在系统CPU完成初始化之后
它处于实模式下 在实模式下
它的地址计算把段寄存器左移四位
然后加上它的当前指令指针
这两个加在一起作为
我们当前访问第一条指定位置
还有一条限制是说
在加电的时候 它处于实模式
这个时候地址总线
并不是像我们现在用到通常系统是32位
它只有20位的地址可用
那在这20位地址里头
我们用的区域就是2的二十次方
这个时候就只有1M
所以放的区域就只能放在最底下1M里头一小块
这块代码它为了从磁盘上读数据
那这个时候必须提供相应的服务
如果没有这些服务
你是没有办法访问到磁盘设备的
为了做到这件事情
在BIOS里头 它需要提供这样一些功能
基本的输入输出
然后系统的配置信息
开机自检和系统启动程序
这几个部分基本输入 输出
它是完成能够我从磁盘上读数据
从键盘上读用户的输入
我可以在显示器上显示相应的输出
这是它基本的输入 输出的功能
然后系统的配置
我们都知道系统在刚开始的时候
你需要有配置
我到底是从硬盘启动 从网络启动
还是说从光盘启动
那这些启动是在你加电的时候
由你的BIOS的设置来完成
依据这些设置系统执行它的启动程序
我能从硬盘把我的加载程序和操作系统内容
加载到系统当中来
具体的过程 我们可以这样来看
在BIOS里头 它启动起来的时候
它的初始化完成之后
它就会从磁盘上读引导散区
这个引导散区是只有长度512字节
更长的它没有这个能力在BIOS程序
它不允许你能读更多内容
读进来放到指定的位置
然后跳转到其中的固定位置
就是这里的7C00
然后这个时候我们就把控制权
转到从磁盘上读进来的程序
在我们这里 这是我们这里的加载程序
加载程序里头我们又可以做进一步的事情
这加载程序能干什么呢
它能将操作系统的代码读到内存里头来
并且能把控制权交给操作系统
来继续执行操作系统功能
这个时候有个问题 说
你既然能从磁盘上读数据
那为啥我不是直接从BIOS里头
直接把操作系统的内核映像读进来呢
实际上这时候它是有这样一些问题
首先我们磁盘上是有文件系统的
文件系统是多种多样的
我们在机器出厂的时候
不可以说我直接限制死你
你只能用某一种文件系统
为了增加这种灵活性
那我在BIOS又不可能加上认识
所有文件系统代码
那怎么办 我就在里有一个基本约定
我不需要认识格式
我也能从里头读到你的第一块
读了这块之后 这块的加载程序里头
我们会用加载程序来识别你磁盘上文件系统
这时候我认识磁盘上文件系统之后
我就可以读到我内核的镜像
并且把它加载到内存当中来
这就是我们这里看到
用加载程序读到操作系统来
有了这个过程之后
我们再把相应的控制权转到
读进来的操作系统内核代码上
我们操作系统就可以开始运行的
我们在BIOS还要提供一些什么样的功能
基本的输入 输出功能
比如说我们需要知道
如何在屏幕上显示基本的信息
然后我从磁盘上读写扇区
那我能知道我的内存有多大
我能从键盘上读用户的输入
当然在这里BIOS只能提供最简单
最基本的输入 输出功能
并且它的使用也受到很大的限制
比如说在我们的英特尔的CPU上
它受到一条限制
就是你只能是在实模式下工作
那如果说我们的操作系统是工作在保护模式下
那这些就都不可以用了