【操作系统】1.3.2 中断和异常

简介: 【操作系统】1.3.2 中断和异常

@[TOC]

:one: 中断的作用

:ok_hand: 中断会使CPU由用户态变为内核态,使操作系统重新夺回CPU的使用权。中断也是让操作系统内核夺回CPU使用权的唯一路径。

:question:如果没有中断机制的化,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,那么并发怎么办?这样不久没办法实现并发了嘛。所以要想实现并发,必须要实现中断。

在这里插入图片描述

:two:中断的类型

内中断:与当前执行的指令有关,中断信号来源于CPU内部。

外中断:与当前执行的指令无关,中断信号来源于CPU外部。

:ledger:内中断的例子

  1. 用户态状态下,发现了特权指令,那么就会引发中断,从而转为内核态,处理中断信号的内核程序。
  2. 执行除法指令时发现除数为0。

这里我们用Java来实现这个例子

public class Demo {
    public static void main(String[] args) {
        int i=1/0;
    }
}

在这里插入图片描述

这里就报了一个异常,表示除零错误。

  1. 有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令--陷入指令,该指令就回引发一个内部中断信号。这是应用程序主动要求转为内核态的,不是被动的,它也不是特权指令,它实在用户态下执行的。
所以如果执行指令非法或者参数非法或者主动想要切换内核态的话,那么就会引发 内中断

在这里插入图片描述

:book:外中断的例子

  1. 时钟中断--由时钟部件发来的中断信号。时钟部件每隔一个时间片就回发送一次中断信号,内核程序会处理时钟中断,并且把CPU的使用权交给其他应用程序,从而切换为用户态,让其他程序上CPU执行。这也就实现了并发。
  2. I/O中断--由输入/输出设备发来的中断信号。当输入输出设备完成时,向CPU发送中断信号,通知已经完成了。CPU又会转为内核态处理中断。

CPU在每一个指令结束的时候就会例行检查有无外中断信号。

在这里插入图片描述

总结

故障:由错误条件引起的,可能被内核程序修复,内核程序修复故障后会把CPU使用权还给应用程序,让他继续执行下去。

终止:内核程序无法修复了,必须终止应用程序。

在这里插入图片描述

:three:中断机制的基本原理

不同的中断不可能由同一个中断处理程序来出来,所以会由不同。

CPU会根据不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测道中断信号后,会根据中断信号的类型去查询”中断向量表“,以此来找到相应的中断处理程序在内存中的存放位置。

在这里插入图片描述

:four:总结

在这里插入图片描述

相关文章
|
6月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
164 0
操作系统:中断和异常
内中断(异常):与当前CPU的执行的指令有关,中断信号来自CPU内部 外中断:与当前CPU的执行的指令无关,中断信号来自CPU外部 (注:在大部分教材中,“中断”是狭义的中断,指外中断;而内中断则称为异常)
271 0
|
5月前
|
算法 Linux 调度
技术好文共享:详解操作系统中断
技术好文共享:详解操作系统中断
|
6月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
92 1
|
6月前
|
Unix 编译器 Linux
操作系统的启动和中断
操作系统的启动和中断
38 0
|
6月前
|
资源调度 调度 UED
CPU执行系统调用时发生中断,操作系统还能切回中断前的系统调用继续执行吗?
系统调用服务例程在执行过程中,通常不会被中断。系统调用服务例程的执行是一个原子操作,即在执行期间不会被中断。这是为了确保在系统调用服务例程执行期间对内核数据结构的一致性和完整性。
|
11月前
【操作系统】—中断和异常
【操作系统】—中断和异常
【操作系统】—中断和异常
|
12月前
|
存储 前端开发 Linux
操作系统实验一:时钟中断程序设计
操作系统实验一:时钟中断程序设计
182 0
|
C语言
《计算机操作系统-第三章》之中断与系统调用
《计算机操作系统-第三章》之中断与系统调用
264 0
|
3天前
|
人工智能 安全 Linux