进程—异常控制流之故障、终止篇

进程—异常控制流之故障、终止篇


一、Exceptions(异常) and System Call(系统调用)
1.1 故障

故障由错误情况引起,它可能能够被故障处理程序修正。当故障发生时,处理器将控制转移给故障处理程序。如果处理程序能够修正这个错误情况,它就将控制返回到引起故障的指令,从而重新执行它。否则,处理程序返回到内核中的abort例程, abort 例程会终止引起故障的应用程序。


进程—异常控制流之故障、终止篇_第1张图片

故障处理。根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止。

一个经典的故障示例是缺页异常,当指令引用一个虚拟地址,而与该地址相对应的物理页面不在存储器中,因此必须从磁盘中取出时,就会发生故障。缺页处理程序从磁盘加载适当的页面,然后将控制返回给引起故障的指令。当指令再次执行时,相应的物理页面已经驻留在存储器中了,指令就可以没有故障地运行完成了。


进程—异常控制流之故障、终止篇_第2张图片

1.2 终止

终止是不可恢复的致命错误造成的结果,通常是一些硬件错误,比如DRAM 或者SRAM 位被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序。


进程—异常控制流之故障、终止篇_第3张图片

invalid Memory Reference:


进程—异常控制流之故障、终止篇_第4张图片

二、 Exceptions(异常) and System Call(系统调用)综述

说完了异常,现在是时候捋一捋了。

中断例程谁提供,在哪儿。

之前说过,异常位于硬件和操作系统交界的部分,它一部份是由硬件实现的,一部分是由操作系统实现的。系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号(exception number )。其中一些号码是由处理器的设计者分配的,其他号码是由操作系统内核(操作系统常驻存储器的部分)的设计者分配的。下面就来稍微具体说一说

2.1 处理器设计者

处理器设计者负责的部分在于BIOS(basic input output system),中文名为基本输入输出系统,是写在系统主板的ROM(它是非易失性的)中的一套程序。


进程—异常控制流之故障、终止篇_第5张图片

BIOS程序主要包含:

a) POST加电自检例程

加电之后对系统的关键硬件进行检测1,主要检查硬件的好坏。加电自检发现的错误通常都是致命的,这样系统就不能正常启动。


进程—异常控制流之故障、终止篇_第6张图片

b) BIOS系统设置例程

扩展系统配置数据ESCD存放在一块可写的CMOS芯片中,主要保存着系统的基本情况,CPU特性,软硬盘驱动器等部件的信息。在BIOS ROM 芯片中装有系统设置程序,主要来设置CMOS中的各项参数。这个程序在POST自检过程完成之后按某个键(F12)就可进入设置状态,并提供良好的界面。


进程—异常控制流之故障、终止篇_第7张图片


进程—异常控制流之故障、终止篇_第8张图片


进程—异常控制流之故障、终止篇_第9张图片

可以在这里设置启动盘。Typically, the BIOS will allow the user to configure a boot order. If the boot order is set to “first, the DVD drive; second, the hard disk drive”, then the BIOS will try to boot from the DVD drive, and if this fails (e.g. because there is no DVD in the drive), it will try to boot from the local hard drive.

c) BIOS中断服务例程

提供基本的对硬件设备进行I/O操作的中断服务程序,以及一些其他和硬件相关的中断服务程序。在中断服务例程这块儿,处理器设计者负责的部分就在这里,在这部分之外的其他中断服务例程就和处理器的设计者没关系了,主要和操作系统内核的设计者有关。

2.2 操作系统内核设计者

是时候大概了解一下操作系统是怎么被加载进PC内存的。

2.2.1 计算机启动过程(Boot sequence)

启动计算机时内存和磁盘布局: 在给裸机加电之后,CS:IP的值为Oxf000:fff0,这就是第一条指令的地址,位于这个地址中的指令是一条跳转指令,会跳转到BIOS中去,执行BIOS程序。


进程—异常控制流之故障、终止篇_第10张图片

BIOS完成硬件的初始化处理之后最终会找到在磁盘上的加载程序2,并将这个操作系统相关的加载程序加载到内存中去,然后跳转到加载程序的起始地址执行加载程序,剩下的事情就交给加载程序了,它会把操作系统从磁盘中加载到内存中,并将控制权转交给操作系统内核。


进程—异常控制流之故障、终止篇_第11张图片center>

2.2.2 实例:基于MBR的操作系统启动的基本流程


进程—异常控制流之故障、终止篇_第12张图片

操作系统启动之后,计算机运行在保护模式之下,此时,异常表基址寄存器已被初始化,指向了异常向量表,BIOS以及操作系统的中断服务例程的入口地址都已经注册到了异常向量表中。


进程—异常控制流之故障、终止篇_第13张图片

自此,异常控制流中的异常系统部分的描叙就算结束了。


  1. 完整的POST自检包括对CPU、系统主板、基本的640KB内存、1MB以上的扩展内存、系统ROM BIOS的测试;CMOS中系统配置的校验;初始化视频控制器,测试视频内存、检验视频信号和同步信号,对CRT接口进行测试;对键盘、软驱、硬盘及CD-ROM子系统作检查;对并行口(打印机)和串行口(RS232)进行检查。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。当自检完成后,系统转入BIOS的下一步骤:从A驱、C驱或CD-ROM以及网络服务器上寻找操作系统进行启动,然后将控制权交给操作系统。更多内容 ↩
  2. 具体怎么找到boot loader是实现的过程,不同的实现,找boot loader方式就可能不一样。更多细节参考【Linux内核完全剖析】以及【深入理解Linux内核】附录一 ↩

你可能感兴趣的:(操作系统)