(王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常相关的知识,希望对你有一定的参考价值。
注意!!!
- 本节内容和《计算机组成原理》中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式
- 为了内容完整,部分内容会借用上述文章
一:中断和异常的基本概念
在操作系统引入核心态和用户态这两种工作状态后,就需要考虑两种状态之间是如何切换的。
- 操作系统内核工作在核心态,用户程序工作在用户态,系统不允许用户程序使用核心态的功能,但是用户程序为了完成某些操作又必须使用这些功能
比如经典的printf
,我们都知道下面一段程序的结果
#include <stdio.h>
int main()
{
printf("hello world\\n");
return 0;
}
在屏幕上显示内容,这本就是操作系统才能做到的事情,因此你编写的程序在运行必须使用相关功能。
因此,需要在核心态建立一些“门”,以便实现从用户态进入核心态。在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常,发生中断或异常时,用户态会立即进入核心态,这是通过硬件实现的
- 其实在Linux系统编程中我们提及过,除了中断和异常,用户态进入内核态还可以使用系统调用,比如上面的
printf
,它是C语言的库函数,但是底层调用的是系统调用接口write
中断: 也称为外中断,指来自CPU指令以外的事件的发生,比如设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入/输出请求,同时让完成输入/输出后的程序继续运行。其中时钟中断表示一个固定的时间片已到,让处理机处理计时,启动定时运行的任务等等。这一类中断通常是与当前指令执行无关的事件,即他们与当前处理机运行的程序无关
异常: 也称为内中断、例外或陷入(trap),指来自CPU执行指令内部的事件。比如程序的非法操作码、地址越界、算数溢出、虚存系统的缺页及专门的陷入指令。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现异常应立马处理
(注意另外一种中断的分类方式)
二:中断的处理过程
本部分内容需要用到大量计组的知识,不是三言两语啊就能说清楚的,这里只是简单谈及,读者可以查阅文章最开始的链接进行学习
-
关中断:在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着正确地执行
-
保存断点:为保证在中断服务程序执行那个完毕后能正确地返回原来的程序,必须将原来程序的断点(即PC的内容)保存起来。这一点我们在(计算机组成原理)第五章中央处理器-第二节:指令执行过程(取指周期、间址周期、执行周期和中断周期)中有过详细介绍
-
引出中断服务程序:其实质是取出中断服务程序的入口地址并传送给程序计数器PC
-
保护现场: 保存通用寄存器和状态寄存器的内容(即保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境,可以使用堆栈,也可以使用特定存储单元
-
中断服务: 主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲寄存器 (中断服务的过程中有可能会修改ACC寄存器的值)
-
恢复现场: 通过出栈指令或取数指令把之前保存的信息送回寄存器中(把原程序算到一般的ACC值恢复原样)
-
中断返回:通过中断返回指令回到原程序断点处
以上是关于(王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研操作系统)第一章计算机系统概述-第一节2:操作系统的发展史
(王道408考研操作系统)第一章计算机系统概述-第一节1:操作系统基本概念以及目标和功能
(王道408考研操作系统)第一章计算机系统概述-第一节3:操作系统的运行机制与体系结构
专栏必读王道考研408操作系统万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图