Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37082
  • 博文数量: 11
  • 博客积分: 265
  • 博客等级: 二等列兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-03 12:48
文章分类
文章存档

2012年(11)

我的朋友

分类: 服务器与存储

2012-09-03 13:48:36

从给处理器加电,直到断电为止,程序计数器假设一个值的序列
a0, a 1, . . . , an−1
其中每个ak是某个相应的指令Ik的地址,每次从ak到ak+1的过渡称为控制转移,这样的控制转移序列叫做处理器的控制流

异常控制流:系统使得控制流发生突变对异常做出反
异常控制流发生层次:
(1)硬件层,硬件检测到的事件会触发控制突然转移到异常处理程序
(2)系统层,内核通过上下文转换将控制从一个用户进程转移到另一个用户进程
(3)应用层,一个进程可以向另一个进程发送信号,接收者会将控制突然转移到它的一个信号处理程序

异常
异常:控制流的突变,响应处理器的某些变化

处理器状态发生变化时,处理器正在执行某个当前指令Icurr
状态变化称为事件,事件可能跟当前指令的执行直接相关,事件也可能和当前指令的执行没有关系
当处理器检测有事件发生时,它就会通过一张叫做异常表的跳转表,到一个专门设计用来处理这类事件的操作系统子程序

当异常处理程序完成处理后:
(1)处理程序将控制返回给当前指令Icurr
(2)处理程序将控制返回给Inext
(3)处理程序终止被中断程序

异常处理:
系统为每种类型的异常都分配一个唯一的非负整数的异常号
系统启动时,操作系统分配和初始化一张称为异常表的跳转表,条目k包含异常k的处理程序的地址
在运行时,处理器检测到发生一个事件,确定相应的异常号k

异常号是异常表的索引,异常表的起始地址放在一个叫异常表基址寄存器的特殊CPU寄存器中
异常与过程调用:
(1)过程调用时,在跳转处理程序之前,处理器将返回地址压入栈中,然而根据异常的类型,返回地址要么是当前指令要么是下一条指令
(2)处理器也将额外的处理器状态压到栈里,在处理程序返回时,重新开始被中断的程序
(3)控制从一个用户程序转移到内核,所有这些项目都被压到内核栈中,而不是压到用户栈中
(4)异常处理程序运行在内核模式下,其对所有的系统资源都有完全的访问权限

异常的类别:
中断:
中断是异步的,是来自处理器外部的IO设备的信号的结果
中断通过对处理器芯片的一个引脚发信号,并将异常号放在系统总线上,以触发中断,该异常号标识了引起中断的设备
处理器注意到中断引脚的电压变高了,就从系统总线读取异常号,然后调用适当的中断处理程序
陷阱和系统调用:
陷阱是有意的异常,陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用
故障:
故障由错误情况引起,能够被故障程序修正
故障发生时,处理器将控制转移给故障处理程序,如果处理程序能够修正这个错误情况,就将控制返回到引起故障的指令,从而重新执行它
否则处理程序返回内核中的abort例程,abort例程会终止引起故障的应用程序

阅读(878) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~