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

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



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

1.1 故障

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

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

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

1.2 终止

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

invalid Memory Reference:

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

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

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

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

2.1 处理器设计者

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

BIOS程序主要包含:

a) POST加电自检例程

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

b) BIOS系统设置例程

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

可以在这里设置启动盘。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程序。

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

center>

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

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

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


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

进程—异常控制流之故障、终止篇的相关文章

进程—异常控制流之中断篇

从给处理器加电开始,直到断电为止,PC(程序计数器)都在不间断的读取并执行指令. 最简单的一种控制流是一个"平滑的"序列,其中每个instk和instk+1 在存储器中都是相邻的.典型地,这种平滑流的突变,也就是instk?和instk+1? 不相邻,是由诸如跳转(jump).调用(call)和返回(ret)这样一些熟悉的程序指令造成的.这样一些指令都是必要的机制,使得程序能够对由程序变量表示的内部程序状态中的变化做出反应. 但是系统也必须能够对系统状态的变化做出反应,这些系统状态不是

进程—异常控制流之陷阱篇

一.Exceptions(异常) and System Call(系统调用) 1.1 陷阱 陷阱是有意为之的异常,是处理器执行程序的一条指令的结果.陷阱最重要的用途是提供用户程序和内核之间一个像普通过程调用似的接口,名曰:系统调用.用户程序经常需要向内核请求服务,比如读一个文件(read) .创建一个新的进程(fork) .加载一个新的程序(execv),或者终止当前进程(exit) .为了允许对这些内核服务的受控的访问,处理器提供了一条特殊的 "syscall n" 指令,当用户程序

异常控制流 第十周11.15~11.22

第八章 异常控制流 控制流:控制转移序列. 控制转移:从一条指令到下一条指令. 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流. 作为程序员,理解ECF很重要,这有很多原因: 理解ECF将帮助你理解重要的系统概念.ECF是操作系统用来实现I/O.进程和虚拟存储器的基本机制,在能够真正理解这些重要概念之前,你必须须理解ECF. 理解ECF将帮助你理解应用程序是如何与操作系统交互的.应用程序通过一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务. 理解

第8章 异常控制流

控制转移序列叫做处理器的控制流 现代系统通过使控制流发生突变来对这些情况做出反应,这些突变被称为异常控制流(ECF).异常控制流发生在操作系统的各个层次. 8.1异常 异常是异常控制流的一种形式,一部分由硬件实现,一部分由操作系统实现. 异常就是控制流中的突变,用来响应处理器状态中的某些变化.在处理器中,状态变化称为事件. 任何情况下,当处理器检测到有事件发生时,他就会通过一张叫做异常表的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序). 8.

异常控制流

异常 异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现. 异常就是控制流中的突变,用来响应处理器状态中的某些变化. 处理器发现异常时会进行一个间接过程调用,到一个操作系统子程序,即异常处理程序. 异常处理程序完成处理后会依据异常类型,产生以下三种情况: 将控制返回当前指令,即正在执行的指令. 返回给下一条指令. 终止被中断的程序. 异常处理 异常号:系统为每种类型的异常分配的唯一的非负整数. 异常表:系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址

第八章 异常控制流

第八章 异常控制流 ECF:(异常控制流)突变集合 平滑:顺序结构的指令 突变:跳转.调用.和返回等指令,不在同一栈 基本机制:ECF是操作系统用来实现I/O.进程和虚拟存器的基本机制   ECF是计算机系统中实现并发的基本机制 异常 控制流的突变 异常号: 系统为每种类型的异常分配的唯一的非负整数 异常表: 系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址 用法: 从异常号到异常表的索引 类别: 中断:来自处理器外部的I/O设备的信号的结果,返回下一条指令 陷阱:陷

[CSAPP笔记][第八章异常控制流]

异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常控制流( Exceptional Control Flow,ECF) 异常控制流发生在系统的各个层次. 理解ECF很重要 理解ECF将帮助你理解重要的系统概念. 理解ECF将帮助你理解应用程序如何与操作系统交互 通过陷阱(trap)或者系统调用(system call)的ECF形式,向操作系统请求服

谈异常控制流

引子 Cpu/内核是怎么处理各种异常的? 用户态程序怎样调用系统函数,与操作系统交互的? 并发是怎样实现的? Try catch 使怎样跳转的? ............. 异常控制流是这些问题的根基,想更多的理解计算机系统,必须对这个问题有一定的了解. 首先,必须清楚什么是控制流? cpu有一个处理序列a1,a2-ak,ak+1.. 这就是一个控制流,从ak到ak+1就是控制转移.但是很多时候不是按顺序处理的,比如突然插上一个u盘,就要对它进行处理,这种突变叫做异常控制流. 那么都有哪些异常呢

CSAPP:第八章 异常控制流1

CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程 ??现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF).异常控制流发生在计算机系统的各个层次. 8.1 异常 ??异常是异常控制流的一种形式,它的一部分由硬件实现,一部分由操作系统实现.异常就是控制流中的突变,用来响应处理器中的一些变化.如图所示,当处理器状态发生一个重要的变化时,处理器正在执行某个当前指令Icurr.在处理器