OS+计组之异常和中断一站式理解

OS+计组之异常和中断一站式理解

定义

(来源于《计算机组成与设计——硬件/软件接口》第五版)

  1. 遵循MIPS的习惯,异常指的是控制流中任何意外的改变,不论其原因来自内部还是外部。也就是说,异常应该包含内外部两种。

    其实许多体系结构作者不区分异常和中断,统统都叫中断,比如x86。考研王道书上把异常称作内中断,可能是因为体系结构不同吧,不要太纠结了。

  2. 外部异常/异步异常:就是我们通常所谓的“中断”,是来自处理器外部的异常,比如I/O中断/外设请求,时钟中断,DMA中断。故中断又叫外中断。

    • 异步中断通常是可屏蔽中断,包括所有的Interupt ReQuest(IRQ中断)
    • 异步中断也有不可屏蔽的,如:电源掉电,物理存储器奇偶校验。
  3. 内部异常/同步异常:又叫内中断,包含陷阱(trap)、故障(fault)、终止(abort)。一般源自CPU执行指令内部的事件,比如系统调用(syscall),非法操作码,地址越界,算术溢出,虚存缺页。

    • 内部异常是不可屏蔽的,这些问题都要及时处理。

      CPU内部有一个中断允许触发器,当该触发器置 “1” 时允许中断,置“0”时屏蔽中断。

补充:内核态和用户态

内核态,或者说CPU的特权模式,是CPU的一种工作状态,它影响CPU对不同指令的执行结果。操作系统通过跟CPU配合,设置特权模式和用户模式,来防止应用程序进行越权的操作

防止应用程序越权访问内存时使用了虚拟地址空间映射的技术,这是操作系统软件配合硬件的MMU共同实现的。在用户模式下,应用程序访问的内存地址是虚拟内存地址,会映射到操作系统指定的物理地址上。这个虚拟内存地址空间就是你说的用户空间。

应用程序无法自由进入内核态,只能通过操作系统提供的接口调用进入,或者在硬件中断到来时被动进入。

应用程序通过操作系统功能来使用硬件。

作者:灵剑
链接:https://www.zhihu.com/question/306127044/answer/555327651
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

image-20200925162519248

CPU对于(外)中断的处理

中断向量法

I/O设备触发中断,中断向量表在内存中,是操作系统提前设置好的,指向了操作系统自己的代码;同时,这个中断也会立即强迫CPU进入内核态,中断返回之后才会会到用户态,下图中全程CPU都处于内核态。

  1. 中断隐指令(硬件自动完成):关中断-保存断点(当前PC内容)-中断服务程序寻址(硬件自动产生中断向量地址(中断类型号)传送到CPU,再从该地址内容得知中断服务程序入口,入口放入PC)

    中断向量是中断服务程序的入口地址,中断向量地址是存放入口地址的地址。套娃警告。

  2. 保存现场:PSW状态寄存器,中断屏蔽寄存器,CPU某些特殊寄存器。

  3. 开中断

  4. 执行中断服务程序(先保存通用寄存器,执行完之后弹出栈,恢复通用寄存器,像x86程序设计中函数的首尾操作)

  5. 关中断

  6. 恢复现场

  7. 开中断

  8. 返回

IMG_0438

内部异常(内中断)

陷阱

  • 陷阱(Trap,又叫访管指令,顾名思义用于访问管态——我还是习惯说陷入内核态)
    • 程序内部有意设置的,最常见的用途就是操作系统的系统调用
    • 系统调用是操作系统为了保护内核,给用户提供了一套接口。与OS资源有关的操作,你自己不能瞎搞,要通过syscall向OS提出服务请求,由OS代为完成。
    • 实际上系统调用时也要通过硬件的中断机制进入内核(Q:所以说syscall总会引发中断?)陷阱和中断通常共享相同的中断向量。

故障

  • CPU在运算过程中检测到除以0的溢出异常时,异常向量地址被强制放到PC中,流水线后面的指令被清空。

终止

  • 这类是不可恢复的错误,硬件错误,也不会返回到这条指令继续执行。

OS之I/O设备中断方式

(待续)

中断方式

DMA方式

posted @ 2020-09-25 16:35  Vanellope  阅读(775)  评论(0编辑  收藏  举报