Day26 interrupt, exception

前言

终於讲完了同步机制,了解到当今电脑为了更多的并行行程,与更多的CPU,在同步机制上做了许多努力,从mutex, semaphore.... 到最後的RCU ,都让我大开眼界,今天要来讲重要的机制---中断。

中断

中断是指在CPU运行时,由於内外部事件或由行程预先安排的事件引起的,此时CPU会暂时停止正在运行的行程,转而处理该内部或外部事件或预先安排的事件服务的行程中去,服务完毕後再返回去继续运行被暂时中断的程序。
同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕後,CPU才能进行中断,不能在指令的执行期间。所以也称为异常(exception)。
异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。

一般来说,中断可以分为上下半部中断,为什麽需要有这样的规范呢?

  1. 中断处理程序的局限性,使得他只能处理中断处理流程的上半部。
  2. 为了解决一个矛盾,想要中断处理程序执行很快,也想要中断处理程序完成的工作量很多。

在第一点中的局限性有以下几点:

  1. 中断处理以非同步的方式执行,可能打断其他重要程序码,其中可能包含其他中断城市的执行,所以中断处理速度越快越好。
  2. 当中断处理程序执行的时候,可能会有中断遮蔽,让其他中断都无法完成
  3. 中断处理程序需要对硬体操作,完成的速度越快越好

所以总归来说,将interrupt 切为上下半部的理由就是想要降低interrupt的latency (中断处理的延迟),上半部会负责接收硬体中断的讯号,下半部会执行比较冗长的处理过程。
对於上半部的属性与要求有:

  • 越快完成要求的处理越好
  • 在处理的时候会关闭interrupt,不接受被其他中断打断
  • 对处理时间的要求十分的严格,处理interrupt需要有硬体的帮助
  • 处理interrupt时,会储存 process context,进入 interrupt context ,而且不能被 block 。

ref


<<:  [day26]批次实作-缴款纪录收档

>>:  Day26 NodeJS中的前端框架 II

Day1 # Let's Go!

Go(又称 Golang)是 Google 开发的程序语言,详细简介在 wiki 上都可以找得到。 ...

Day 19:AWS 是什麽?30天从动漫/影视作品看AWS服务应用 -《尼尔:自动人形》

今年春天重版出来的《尼尔:人工生命 ver.1.22474487139...》第二代《尼尔:自动人形...

Observer 观察者模式

今天要谈到的观察者模式也是很常见的一个模式,常出现在有两个以上需要互相沟通的物件之间 问题 假设有个...

[Day 15] 阿嬷都看得懂的开始写第一支 .css 档案罗!

阿嬷都看得懂的开始写第一支 .css 档案罗! 昨天我们介绍了怎麽使用 style 标签,把所有 C...

[经典回顾]过旧的作业系统事故纪录

2018年司法院新闻稿 有关司法院及所属网路遭网军攻击事宜,本院说明如下: 一、事实经过:107年3...