您的位置:首页 > 其它

OS学习笔记一: 中断与异常

2017-10-05 08:09 274 查看

一、基础概念

1、缺页异常

CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存、IO设备等等,但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而是一个虚拟地址,由MMU将虚拟地址转换成物理地址再从地址总线上发出,MMU上的这种虚拟地址和物理地址的转换关系是需要创建的,并且MMU还可以设置这个物理页是否可以进行写操作,当没有创建一个虚拟地址到物理地址的映射,或者创建了这样的映射,但那个物理页不可写的时候,MMU将会通知CPU产生了一个缺页异常。

2、陷入指令

陷入指令(Traps),又叫做自陷指令或访管指令,出现在计算机操作系统中,用于实现在用户态下运行的进程调用操作系统内核程序,即当运行的用户进程或系统实用进程欲请求操作系统内核为其服务时,可以安排执行一条陷入指令引起一次特殊异常。

3、CPU

处理器由运算器、控制器、一系列的 寄存器以及高速缓存构成。

两类寄存器:

用户可见寄存器:高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数

控制和状态寄存器:用于控制处理器的操作通常由 操作系统 代码使用

4、控制和状态寄存器

用于控制处理器的操作

在某种特权级别下可以 访问、修改

常见的控制和状态寄存器

程序计数器(PC :Program Counter ),记录将要取出的指令的地址

指令寄存器(IR :Instruction Register ),记录最近取出的指令

程序状态字(PSW :Program Status Word ),记录处理器的运行状态 如 条件码 、模式、控制位 等信息

5、CPU状态之间的切换

用户态 → 内核态

唯一途径 → 中断/ 异常/ 陷入机制

内核态 → 用户态

设置程序状态字PSW

一条特殊的指令 :陷入指令(又称访 管 指令,因为内核态也被称为supervisor mode)提供给用户程序的接口,用于调用 操作系统 的功能 (服务)。

例如:int ,trap ,syscall ,sysenter/sysexit

二、中断与异常的概念

CPU 对系统发生的某个事件作出的一种反应

CPU 暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的

事件的发生改变了处理器的控制流

特点:

1、是随机发生的

2、是自动处理的(硬件完成这一过程)

3、是可恢复的(被中断的,在以后某个时刻继续)

三、引入中断与异常的原因

中断的引入: 为了支持CPU 和设备之间 的 并行操作

当CPU 启动设备进行 输入/ 输出后 ,设备便 可以独立工作,CPU 转去处理与此次输入/ 输出不相关的 事情;当设备完成输入/ 输出后,通过向CPU 发中断报告此次 输入/ 输出的结果,让CPU 决定如何处理以后 的 事情

异常的引入 :表示CPU 执行指令时本身 出现的问题

如算术溢出、除零、 取数时的奇偶错,访 存地址时越界或执行了“陷入指令” 等,这时硬件改变了CPU 当前 的执行流程,转到相应的错误处理程序或 异常处理程序或执行系统调用

四、事件



中断:外部 事件,正在运行的程序所不期望的

异常 :由正在执行的指令引发

五、中断与异常小结



六、中断、异常机制工作原理

中断/ 异常机制是现代计算机系统的核心机制之一

硬件和软件相互配合 而使计算机系统得以充分发挥能力

硬件该做什么事? —— 中断/ 异常响应

捕获中断源发出的中断/ 异常请求,以一定方式响应,将处理器控制权交给特定的处理程序

软件要做什么事? —— 中断/ 异常处理 程序

识别中断/ 异常类型并完成相应的处理

七、中断响应

中断响应:

发现 中断 、 接收中断的过程

由中断硬件 部件完成,处理器控制部件中 设有 中断寄存器

中断响应过程示意图:



八、中断向量表

中断向量 :

一个内存单元,存放 中断处理程序入口地址和程序运行时所需的处理机状态字




九、linux中断向量表



十、中断响应示意图



十一、中断处理程序

设计操作系统时,为每一类中断/ 异常事件编好相应的处理程序,并设置好中断向量表

系统运行时若响应中断,中断硬件部件将CPU 控制权转给中断处理程序:

保存相关寄存器信息

分析中断/ 异常的具体原因

执行对应的处理功能

恢复现场,返回被事件打断的程序

软件提前设置好 硬件部件来执行

十二、中断实例

以设备输入输出中断为例:

打印机 给CPU 发中断信号(硬件)

CPU 处理完当前指令后检测到中断,判断出中断来源并向相关设备发确认信号(硬件)

CPU 开始为软件处理中断做准备(硬件):

处理器 状态被切换到内核态

在系统栈中保存被中断程序的重要上下文环境,主要是 程序计数器PC 、程 序状态字PSW

CPU 根据中断码查中断向量表,获得与该中断相关的处理 程序 的入口地址,并将PC 设置成该地址,新的指令周期开始时,CPU 控制转移到中断处理程序(硬件)

中断处理程序开始工作(软件)

在系统栈中保存现场信息

检查I/O 设备的状态信息,操纵I/O 设备或者在设备

和内存之间传送数据等等

中断处理结束时,CPU 检测到中断返回指令 ,从 系统栈 中 恢复被中断程序的上下文环境 ,CPU 状态恢复成原来的状态,PSW 和PC 恢复成中断前的值,CPU 开始一个新的指令周期(硬件)

本文整理自:《操作系统原理》北京大学_陈向群 讲义

个人微信公众号:



作者:jiankunking 出处:http://blog.csdn.net/jiankunking
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息