当前课程知识点:Linux 内核分析与应用 >  第5章 中断 >  5.1 中断机制概述 >  Video

返回《Linux 内核分析与应用》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《Linux 内核分析与应用》慕课在线视频列表

Video课程教案、知识点、字幕

大家好

这一讲我们讲第五章的中断机制

那么首先呢我们来看一下中断是什么

我们说中断是CPU对系统发生的某个事件作出的一种反应

那么当中断发生的时候 CPU暂停正在执行的程序

保留现场后自动转去执行相应事件的处理程序

处理完成后返回到断点继续执行被打断的程序

听起来很简单 但实际上中断是操作系统的脉搏

是并发处理的基础 远不像概念这么简单

为什么引入中断 刚才我们说了

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

为什么可以进行并行呢

我们说当CPU启动设备进行输入输出后

设备便可以独立的工作了

CPU就转去处理自己的事情

当设备完成输入输出后

通过向CPU发出中断 报告此次输入输出的结果

让CPU决定如何处理以后的事情

这些从概念上说起来也是比较简单的

工程实践起来也是远没这么简单

那么CPU什么时候响应中断

我们说CPU收到中断信号以后呢

并不立即响应 而是在执行每条指令周期的最后一个时钟周期

一旦检测到中断信号有效

且中断允许标志位置1的时候呢

CPU才在当前指令执行完以后呢

转入中断响应周期

这里 我们给出一个中断模型

中断模型简单的来说实际上是一种C/S结构

为什么说它是C/S结构呢

系统中若干个CPU是用来接收中断事件 并进行处理的

若干个中断控制器形成树状的结构

那么这些控制器汇集系统中

所有外设的中断请求

并将中断事件分发给某一个CPU进行处理

那么如果对此模型进行简化以后呢 它实际上就是一种C/S结构模型

也就是说外设发出请求 这个请求呢

并不是马上传给CPU而是用中断控制器进行收集

中断控制器相当于中介

在外设与CPU之间架起了桥梁

那么当CPU接收到请求以后才给予应答

为了进一步的说明

中断控制器相当于中介 我们给出

8259中断控制器作为例子

在此我们并不对中断控制器给予详细的介绍

只是以简单的8259控制器为例说明呢

中断请求呢比如说从IR0

到IR7是从外设发来的

然后通过中断控制器的INT引脚向CPU发出中断请求

然后CPU通过中断引脚INTA应答请求

目前X86采用的是

APIC 也就是高级可编程控制器

那么下面对高级可编程中断控制器给予简要的介绍

比如说呢每个X86的核都有一个本地的APIC

这些本地的APIC呢

通过中断控制器通信总线呢就连接到IO APIC上

那么IO APIC收集各个外设的中断

并翻译成总线上的信息

传递给某个CPU上的本地APIC

这里我们来介绍一下

中断中机制与策略分离的设计理念

尽管中断与CPU密切相关

但是CPU的设计独立于中断控制器的设计

尽管中断是操作系统中非常重要的组成部分

但是操作系统设计者只负责提供接口

通过该接口就可以调用针对具体设备的中断服务程序

中断和对中断处理就被解除了耦合

无论是你在需要加入新的中断时

还是在你需要改变现有的中断服务程序时呢

又或者是取消对某个中断的支持的时候呢

CPU的架构和操作系统都无需做改变

这其中的功臣就是中断控制器

那么更详细的介绍参见我们Linux内核之旅上的中断趣味谈

下边介绍Linux内核中的中断子系统的相关软件架构

那么整个中断子系统分成4个部分

第一个部分是硬件无关的代码 我们称之为

Linux内核通用中断处理模块

无论是哪种CPU 哪种中断控制器 其中断处理的过程都有些相同的内容

这些相同的内容被抽象出来

此外呢各个设备的驱动代码中呢

也希望能用一个统一的接口实现中断相关的管理

第二部分叫CPU体系(结构)相关的中断处理

和系统使用的具体的CPU体系结构相关

第三部分叫中断控制器的驱动代码

那这部分呢和系统使用的中断控制器相关

第四部分叫普通外设的驱动

这些驱动将使用Linux内核通用的中断处理模块的API来实现自己的驱动逻辑

下边我们介绍中断向量

那么中断向量是中断中非常重要的概念

每个中断源都被分配了一个8位无符号的整数呢

作为类型码 也就是中断向量

那么中断向量和中断请求号是什么关系

它们之间是线性关系

在X86中呢 中断向量和中断请求号之间是一个

公式可以表示出来 这个公式为I=32+irq

那么这张表呢我们给出的中断向量表

从这个表中看出0到19号的中断向量呢

它表示的是不可屏蔽的中断或者异常

那么20到31号呢 它是intel所保留的

而32到127呢 就是外部中断

而128就是用于系统调用的

可编程异常 那么其他的呢我们就不做一一的介绍了

这其中还有一个非常重要的

结构叫做中断描述符表

也就是我们通常说的中断向量表

那么这个表中每一个中断占据一个表项

为什么要有一个中断向量表呢

大家都学过啊8086

那么在实地址模式中呢

CPU是把内存中从0开始的1K字节呢

就作为一个中断向量表

表中的每个表项占4个字节

由2个字节的段地址和2个字节的偏移量组成

这样构成的地址便是相应的中断处理程序的入口地址

但是在保护模式下呢

由4字节的表项构成的中断向量表呢

显然满足不了要求 这是因为两点 一点呢

除了2个字节的段描述符外呢 偏移量必须用4个字节来表示

第二点要有反应模式切换的信息

因此呢在保护模式下呢 中断向量表中的表项呢

就由8个字节组成 如图所示

中断向量表也叫作中断描述符表IDT

其中 每个表项叫做门描述符

为什么叫做门描述符呢

门的含义是什么呢 门的含义就是当中断发生的时候呢

必须通过这些门 然后才能进入相应的处理程序

其中 类型占3位

主要的门描述符为以下3种

第一种叫做中断门

它的类型码是什么呢 是110

中断门中的请求特权级 也就是DPL为0

因此说用户态的进程就不能访问intel的中断门

所有的中断处理程序都由中断门来激活

并全部限制在内核态

第二种叫做陷阱门 其类型码为111

与中断门类似 它与中断门唯一的区别是呢

其控制权通过陷阱门进入处理程序的时候呢

维持中断标志位不变

也就是说它是不关中断的 而中断门呢是关中断的

第三种呢叫系统门

这是Linux内核特别设置的

是用来让用户态的进程访问intel的陷阱门

因此门描述符的DPL就为3

那么系统调用呢就是通过系统门而进入内核的

通过前边的介绍 我们对中断的一些基础概念

进行了概要的说明

那么本节课以后呢大家还需要动手实践

在我们Linux内核之旅网站

电子杂志栏目中的第八期“中断”呢

将向读者依次解释中断概念

解析Linux中的中断实现机理

以及Linux下中断如何被使用

那么参考资料呢 我们可以去阅读《深入理解Linux内核》第三版的第四章

《Linux内核设计与实现》第三版的第七章

蜗窝科技网关于中断有一系列的文章

非常详细的介绍了中断的方方面面

中断是一个看似简单但工程型非常强的部分

因此希望大家务必阅读大量的资料 并动手实践

谢谢大家

Linux 内核分析与应用课程列表:

第1章 概述

-1.1 Linux操作系统概述

--1.1 Linux 操作系统概述

-1.2 Linux内核结构以及内核模块编程

--Video

-1.3 Linux内核源码中的双链表结构

--Video

-1.4 源码分析-内核中的哈希表

--Video

-1.5 动手实践-Linux内核模块的插入和删除

--Video

-第1章 概述--章节测验

-第1章导学--引领你进入Linux内核的大门

第2章 内存寻址

-2.1 内存管理之内存寻址

--Video

-2.2 段机制

--Video

-2.3分页机制

--Video

-2.4 动手实践-把虚拟地址转换成物理地址

--Video

-第2章 内存寻址--章节测验

-第二章导学-从零打造自己的操作系统

第3章 进程管理

-3.1 进程概述

--Video

-3.2 Linux进程创建

--Video

-3.3 Linux进程调度

--Video

-3.4 动手实践-打印进程描述符task_struct中的字段

--Video

-3.5工程实践-基于内核模块的负载监控

--Video

-第3章 进程管理--章节测验

-第三章导学-进程背后琳琅满目的宝贝到哪里挖?

第4章 内存管理

-4.1 Linux内存管理机制

--Video

-4.2 进程用户空间管理机制

--Video

-4.3 物理内存分配与回收机制(上)

--Video

-4.4 物理内存分配与回收机制(下)

--Video

-4.5 动手实践-Linux内存映射基础(上)

--Video

-4.6 动手实践-Linux内存映射实现(中)

--Video

-4.7 动手实践-Linux内存映射测试(下)

--Video

-4.8 初学者对内存管理的常见疑惑

--初学者对内存管理的常见疑惑(一)

--初学者对内存管理的常见疑惑(二)

--初学者对内存管理的常见疑惑(三)

-第4章 内存管理--章节测验

第5章 中断

-5.1 中断机制概述

--Video

-5.2 中断处理机制

--Video

-5.3 中断下半部处理机制

--Video

-5.4 时钟中断机制

--Video

-5.5 动手实践-中断上半部的代码分析及应用

--Video

-5.6 动手实践-中断下半部的代码分析及应用

--Video

-第5章 中断--章节测验

第6章 系统调用

-6.1 Linux中的各种API

--Video

-6.2 系统调用机制

--Video

-6.3 动手实践-添加系统调用(系统调用日志收集系统)

--Video

-第6章 系统调用--章节测验

第7章 内核同步

-7.1 内核同步概述

--Video

-7.2 内核同步机制

--Video

-7.3 动手实践-内核多任务并发实例(上)

--Video

-7.4 动手实践-内核多任务并发实例(下)

--Video

-第7章 内核同步--章节测验

第8章 文件系统

-8.1 虚拟文件系统的引入

--Video

-8.2 虚拟文件系统的主要数据结构

--Video

-8.3 文件系统中的各种缓存

--Video

-8.4 页高速缓存机制以及读写

--Video

-8.5 动手实践-编写一个文件系统(上)

--Video

-8.6 动手实践-编写一个文件系统(中)

--Video

-8.7 动手实践-编写一个文件系统(下)

--Video

-第8章 文件系统--章节测验

第9章 设备驱动

-9.1 设备驱动概述

--Video

-9.2 I/O空间管理

--Video

-9.3 设备驱动模型

--Video

-9.4 字符设备驱动程序简介

--Video

-9.5 块设备驱动程序简介

--Video

-9.6 动手实践-编写字符设备驱动程序

--Video

-9.7工程实践-编写块设备驱动的基础(上)

--Video

-9.8 工程实践-块设备驱动程序分析(中)

--Video

-9.9 工程实践-块设备驱动程序实现(下)

--Video

-第9章 设备驱动--章节测验

致谢与说明

-致谢与说明

--Video

直播视频:从Linux内核学习到自主操作系统研发

-从Linux内核学习到自主操作系统研发

附录:实验代码、课件以及相关素材

-各章实验代码

-《Linux内核分析与应用》课件

-《Linux操作系统原理与应用》教材课堂视频

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。