当前位置: 首页 > news >正文

第七章 中断

中断是什么,为什么要有中断

并发是指单位时间内的累积工作量。
并行是指真正同时进行的工作量。
一个CPU在一个时间只能执行一个进程,任何瞬间任务只在一个核心上运行。
而CPU外的设备是独立于CPU的,它与CPU同步运行,CPU抽出一点时间来处理中断,外部设备就可以同CPU并行工作了,整个计算机系统可以大幅度提升效率。

操作系统是中断驱动的

操作系统是个死循环,一直在重复工作,工作期间接受别的指令中断进行操作,然后继续重复运行。操作系统周而复始的运行,其目的就是等待某些事情的发生,而这个事件是以中断的形式通知操作系统的。

中断分类

外部中断

外部中断是指来自CPU外部的中断,而外部的中断源必须是某个硬件,所以外部中断又称为硬件中断。(就是来自外设的任务)

为了让CPU获得每个外部设备的中断信号,CPU提供统一的接口作为中断信号的公共路线,来自外设的中断信号都共享公共路线连接到CPU。

CPU为大家提供了两条信号线。外部硬件的中断是通过两根信号线通知CPU的,这两根信号线就是INTR和NMI。
在这里插入图片描述

在单核CPU上运行的程序都是串行的,所有任务,包括中断处理程序都是一个接一个在CPU上运行的,所有任务都共享同一个CPU,CPU在各个任务间不断切换才实现了并发。

CPU通过两根中断线区分事情的紧急程度。只要从INTR引脚收到的中断都是不影响系统运行的,可以随时处理,甚至CPU可以不处理(可屏蔽中断)。而只要从NMI引脚收到的中断表示系统中发生了致命的错误(不可屏蔽中断)。
在这里插入图片描述
首先为每一种中断分配一个中断向量号,中断向量号就是一个整数,它就是中断向量表或中断描述表中的索引下标,用来索引中断项。中断发起时,相应的中断向量号通过NMI或INTR引脚被传入CPU,中断向量号是中断向量表或中断描述符表里中断项的下标,CPU根据此中断项的下标,CPU根据此中断向量号在中断向量表或中断描述符中检索对应的中断处理程序并去执行。

内部中断

内部中断可以分为软中断和异常。
在这里插入图片描述

以下是可以发起中断的指令:

在这里插入图片描述
除了第一种“int8位立即数”之外,其他的几种又可以称为异常。因为它们既具备软中断的“主动”行为,又具备异常的“错误”结果。

异常是另一种内部中断,是指令执行期间CPU内部产生的错误引起的。由于是运行时错误,所以它不受标志寄存器eflags中的IF位影响,无法向用户隐瞒。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断描述表

中断描述表是保护模式下用于存储中断处理程序入口的表,当CPU接收一个中断时,需要用中断向量在此表中检索对应的描述符,在该描述符中找到中断处理程序的起始地址。
除了调用门外,其他三个门都可以存在于中断描述符表中。门就是记录了一段程序的起始地址,也就是通往这段程序的入口。

一个中断源就会产生一个中断向量,每个中断向量都对应中断描述符表中的一个门描述符,任何中断源都通过中断向量对应到中断描述符表中的门描述符,通过该门描述符就找到了对应的中断处理程序。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
IDT的位置不固定,CPU通过中断描述符表寄存器(IDTR)找到它。该寄存器分为两部分:第0-15位是表界限,即IDT大小减1,第16-47位是IDT的基地址。中断描述符表地址加载到这个寄存器中,只有寄存器IDTR指向了IDT,当CPU接收到中断向量号时才能找到中断向量处理程序。

在这里插入图片描述

中断处理过程及保护

在这里插入图片描述
CPU内的处理过程:
在这里插入图片描述
在这里插入图片描述

处理器提供了专门用于控制IF位的指令,通过它,IF可以直接控制。指令cli使IF位为0,这称为关中断,指令sti使IF位为1,这称为开中断。IF位只能限制外部设备的中断,对那些影响系统正常运行的中断都无效。

进入中断时,NT位和TF位都为0。TF表示Trap Flag,陷阱标志位,用在调试环境中,禁止单步执行。NT表示Nest Task Flag,即任务嵌套标志位,也就是用来标记任务嵌套调用的情况。任务嵌套调用是指CPU将当前正执行的旧任务挂起,转去执行另外的新任务,待新任务执行完后,CPU再回到旧任务继续执行。当CPU执行iret指令(中断返回指令),它会检查NT位的值,如果NT位为1,这说明当前任务是被嵌套执行的,因此会从自己TSS中“上一个任务TSS的指针”字段中获取旧任务,然后去执行该任务。如果NT位值为0,表示当前是在中断处理环境下,于是就执行正常的中断退出程序。

在这里插入图片描述

中断发生时的压栈

在这里插入图片描述
在这里插入图片描述

中断错误码

指明中断发生在哪个段上。错误码本质上就是个描述符选择子,通过低3位属性来修饰此选择子指向是哪个表中的哪个描述符。当全0的错误码出现时,表示中断的发生与特定的段无关,或者引用了一个空描述符,引用描述符就是往段寄存器中加载选择子的时候,处理器发现选择子指向的描述符是空的。

可编程中断控制器8259A

8259A的作用是负责所有来自外设的中断,其中包括来自时钟的中断。

8259A介绍

8259A是中断代理,当有多个中断同时发生时,由它负责对所有中断仲裁,决定哪个中断优先被CPU受理。

在这里插入图片描述

Intel处理器共支持256个中断,但8259A只可以管理8个中断。为了多支持一些设备,可以将多个8259A组合(级联)。最多可级联9个,也就是最多支持64个中断。n片8259A通过级联可支持7n+1个中断源。

在这里插入图片描述

8259A工作流程:
在这里插入图片描述

8259A的编程

在这里插入图片描述

8259A内部有两组寄存器ICW和OCW。
ICW是初始化命令寄存器组,用来保存初始化命令字,共4个。
OCW是操作命令寄存器组,用来保存操作命令字,共3个。

在这里插入图片描述

ICW1初始化8259A的连接方式(单片还是多片级联)和中断信号的触发方式(边沿触发还是电平触发)。

在这里插入图片描述

ICW2用来设置起始中断向量号,只要指定IRQ0映射到的中断向量号,其他IRQ接口对应的中断向量号会顺着自动排下去。ICW2需要写入到主片的0x21端口和从片的0xA1端口。

ICW3仅在级联的方式下才需要,用来设置主片和从片用哪个IRQ接口互连。ICW2需要写入到主片的0x21端口和从片的0xA1端口。在这里插入图片描述

ICW4用于设置8259A的工作模式,当ICW1中的IC4为1时才需要ICW4。ICW4需要写入到主片的0x21端口和从片的0xA1端口。

在这里插入图片描述

OCW1用来屏蔽连接在8259A上的外部设备的中断信号(是否 把来自外部设备的中断信号转发给CPU),实际上就是把OCW1写入了IMR寄存器。OCW1需要写入到主片的0x21端口和从片的0xA1端口。

在这里插入图片描述
在这里插入图片描述

OCW2用来设置中断结束方式和优先级模式。OCW2需要写入到主片的0x20端口和从片的0xA0端口。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

OCW3用来设定特殊屏蔽方式及查询方式。OCW3需要写入到主片的0x20端口和从片的0xA0端口。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ICW1、OCW2、OCW3的写入端口是一致的,通过各控制字中的第4-3位标识位来确定某个控制字。

在这里插入图片描述

在这里插入图片描述

编写中断处理程序

中断处理程序

可编程计数器/定时器8253简介

时钟——给设备打拍子

为了让所有设备之间的通信井然有序,各通信设备间必须有统一的节奏,不能各干各的,这个节奏就称为定时或时钟。是一种使设备间相互配合而避免发生冲突的节拍。

内部时钟:指处理处理器内部元件,主要用于控制、同步内部工作过程的步调。内部时钟不可改(应该是最快的,纳秒级(ns))。内部时钟是由晶体振荡器产生的,简称晶振,其频率经过分频之后就是主板的外频,处理器和南北桥之间的通信就基于外频。处理器将外频乘以某个倍数之后便是主频,处理器取指令、执行指令中所消耗的时钟周期,都是基于主频的。

外部时钟:指处理器与外部设备或外部设备之间通信采用的一种时序。一般为毫秒级或秒级。

外部时钟和内部时钟是两套独立运行的定时体系。对于处理器与外部设备之间的通信,要保证运行在不同时钟节拍下的设备能够同步通信。应以处理器的内部时钟为依据来设计外部设备的时钟,既要符合处理器内部运行时序的规定,又要满足外部设备工作时序的要求。通过定时计数器将晶振产生的信号频率分频,就能产生所需要的各种定时信号。

定时器的功能就是定时发信号。当到达了所计数的时间,计数器可以自动发一个输出信号,可以用该信号向处理器发出中断,这样处理器可以去执行相应的中断处理程序。或者用该信号直接启动某些外部设备。

定时器可分为不可编程定时器和可编程定时器,8253就是可编程定时器。

计数器和定时器是一样的。每一次时钟脉冲信号到来时就会修改计数值。
在这里插入图片描述

8253入门

8253内部有三个独立的计数器,既可以同时工作,又可以各干各的。

在这里插入图片描述

在这里插入图片描述

在计数器开始计数之前,计数初值保存在寄存器中,计数器开始执行时将初值载入,计数器的CLK每收到一次脉冲信号,计数值减1,同时将当前值保存在输出锁存器中。当计数值减到0时,表示定时工作结束,此时将通过OUT引脚发出信号,此信号可以用来向处理器发出中断请求,也可以直接启动某个设备工作。

在这里插入图片描述

8253控制字

控制字寄存器中保存的内容称为控制字,控制字用来设置所指定的计数器的工作方式、读写格式及数制(控制模式)。

在这里插入图片描述

8253工作方式

在这里插入图片描述

计数器开始计数条件:
GATE为高电平,即GATE=1,这是由硬件来控制的;
计数初值已写入计数器中的减法计数器,这事由软件out指令控制的。

软件启动:条件1已完成,只差条件2。工作方式0、2、3、4。
硬件启动:条件2已完成,只差条件1。工作方式1、5。

计数停止:

强制终止:将GATE置为0。工作方式2、3。(计数值重复计数,变为0后回到初值)
自动终止:定时一到期就停止。工作方式0、1、4、5 。

在这里插入图片描述

使用8253来提升时钟中断信号的频率,而时钟中断信号是由计数器0负责产生的。将高频的输入脉冲信号CLK转换为低频的输出信号OUT,此信号就是时钟中断信号。1.193180MHZ是计数器的工作频率,也就是说,一秒钟会有1193180次脉冲信号。

在这里插入图片描述

8253初始化步骤

1.往控制字寄存器端口0x43中写入控制字;
2.在所指定使用的计数器端口中写入计数初值。

提高时钟中断的频率

相关文章:

第七章 中断

中断是什么,为什么要有中断 并发是指单位时间内的累积工作量。 并行是指真正同时进行的工作量。 一个CPU在一个时间只能执行一个进程,任何瞬间任务只在一个核心上运行。 而CPU外的设备是独立于CPU的,它与CPU同步运行,CPU抽出一点…...

1116 Come on! Let‘s C(38行代码+详细注释)

分数 20 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 "Lets C" is a popular and fun programming contest hosted by the College of Computer Science and Technology, Zhejiang University. Since the idea of the contest is for fun, the award rules are f…...

深入学习《c语言函数》

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章学习函数。 让我们开启c语言学习之旅吧…...

Pytorch从零开始实现Vision Transformer (from scratch)

Pytorch从零开始实现Vision Transformer 前言一、Vision Transformer架构介绍1. Patch Embedding2. Multi-Head Attention3. Transformer BlockFeed Forward 二、预备知识1. Einsum2. Einops 三、Vision Transformer代码实现0. 导入库1. Patch Embedding2. Residual & Norm…...

ES6函数新增了哪些扩展?

目录 一、参数二、属性函数的length属性name属性 三、作用域四、严格模式五、箭头函数 一、参数 ES6允许为函数的参数设置默认值 function log(x, y World) {console.log(x, y); }console.log(Hello) // Hello World console.log(Hello, China) // Hello China console.log(…...

【firewalld防火墙】

目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…...

CNNs: ZFNet之CNN的可视化网络介绍

CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容,我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点&#xff0…...

云原生之深入解析Airbnb的动态Kubernetes集群扩缩容

一、前言 Airbnb 基础设施的一个重要作用是保证我们的云能够根据需求上升或下降进行自动扩缩容,我们每天的流量波动都非常大,需要依靠动态扩缩容来保证服务的正常运行。为了支持扩缩容,Airbnb 使用了 Kubernetes 编排系统,并且使…...

Django框架之模板其他补充

本篇文章是对django框架模板内容的一些补充。包含注释、html转义和csrf内容。 目录 注释 单行注释 多行注释 HTML转义 Escape Safe Autoescape CSRF 防止csrf方式 表单中使用 ajax请求添加 注释 单行注释 语法:{# 注释内容 #} 示例: {# 注…...

安装Maven 3.6.1:图文详细教程(适用于Windows系统)

一、官网下载对应版本 推荐使用maven3.6.1版本,对应下载链接: Maven3.6.1下载地址 或者,这里提供csdn下载地址,点击下载即可: Maven3.6.1直链下载 其他版本下载地址: 进入网址:http://mave…...

计算机图形学 | 实验八:Phong模型

计算机图形学 | 实验八:Phong模型 计算机图形学 | 实验八:Phong模型Phong模型光源设置 光照计算定向光点光源聚光 华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 计算机图形学 | 实验八&#xff1a…...

第三十一回:GestureDetector Widget

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了ListView响应事件的内容t,本章回中将介绍 GestureDetector Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的GestureDetector是一个事件响应Widget,它可以响应双击事件&#xff0…...

Java面试知识点(全)-Java并发-多线程JUC三- JUC集合/线程池

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 JUC集合类 为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么? Hashtable之所以效率低下主要是因为其实现使用了synchro…...

Android 如何获取有效的DeviceId

目录 前言官方唯一标识符建议使用广告 ID使用实例 ID 和 GUID不要使用 MAC 地址标识符特性常见用例和适用的标识符 解决方案DeviceIdANDROID_IDMac地址UUID补充 总结 前言 从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可…...

<SQL>《SQL命令(含例句)精心整理版(2)》

《SQL命令(含例句)精心整理版(2)》 跳转《SQL命令(含例句)精心整理版(1)8 函数8.1 文本处理函数8.2 数值处理函数8.3 时间处理函数8.3.1 时间戳转化为自定义格式from_unixtime8.3.2 …...

完全自主研发,聚芯微发布3D dToF图像传感器芯片!

日前,由中国半导体行业协会IC设计分会(ICCAD)、芯原股份、松山湖管委会主办的主题为“AR/VR/XR元宇宙”的“2023松山湖中国IC创新高峰论坛”正式在广东东莞松山湖召开。武汉市聚芯微电子有限责任公司发布了完全自主知识产权的3D dToF图像传感…...

MySQL 事物(w字)

目录 事物 首先我们来看一个简单的问题 什么是事务 为什么会出现事务 事务的版本支持 事务提交方式 事务常见操作方式 设置隔离级别 事物操作 事物结论 事务隔离级别 理解隔离性 隔离级别 查看与设置隔离性 注意可重复读【Repeatable Read】的可能问题&#xff…...

字节跳动测试岗四面总结....

字节一面 1、 简单做一下自我介绍 2、 简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例 3 、get请求和post请求的区别 4、 如何判断前后端bug/3xx是什么意思 5、 说一下XXX项目中你做的接口测试/做了多少次 6、 http和https的区别 7、 考了几个ADB命令/查看…...

基于.NetCore开源的Windows的GIF录屏工具

推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。 项目简介 这是基于.Net Core WPF 开发的、开源项目,可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域,并将其转为 GIF动画&#x…...

PCB 基础~典型的PCB设计流程,典型的PCB制造流程

典型的PCB设计流程 典型的PCB制造流程 • 从客户手中拿到Gerber, Drill以及其它PCB相关文件 • 准备PCB基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上(例如走线和过孔) – 其他药水…...

Z-Image Turbo保姆级教学:CPU Offload显存管理技巧

Z-Image Turbo保姆级教学:CPU Offload显存管理技巧 你是不是也遇到过这种情况:好不容易找到一个好用的AI绘画模型,兴致勃勃地想在本地跑起来,结果刚点生成,程序就崩溃了,屏幕上弹出一行冰冷的“CUDA out o…...

版本降级实战:在VirtualBox 6.0.24中成功启用嵌套虚拟化

1. 为什么要在旧版本中启用嵌套虚拟化? 最近在调试一个遗留项目时,遇到了一个棘手的问题:客户的生产环境使用的是VirtualBox 6.0.24版本,而我们需要在这个虚拟机里再运行一个虚拟机(也就是嵌套虚拟化)。这个…...

Intv_AI_MK11自动化测试脚本生成:基于自然语言描述的测试用例实现

Intv_AI_MK11自动化测试脚本生成:基于自然语言描述的测试用例实现 1. 引言:当测试遇上自然语言处理 "测试工程师小王盯着屏幕上的登录页面,手指在键盘上敲击着:driver.find_element(By.ID, username).send_keys(testuser).…...

Phi-4-mini-reasoning在中小学数学辅导中的应用:自动解题与答案验证

Phi-4-mini-reasoning在中小学数学辅导中的应用:自动解题与答案验证 1. 模型介绍 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理数学题、逻辑题等需要多步分析和简洁结论输出的场景。与通用聊天模型不同,它更专注于…...

OpenClaw日程管理:千问3.5-9B解析邮件创建待办

OpenClaw日程管理:千问3.5-9B解析邮件创建待办 1. 为什么需要AI助手管理日程? 每天早上打开邮箱,总能看到十几封未读邮件——会议邀请、项目更新、待办提醒混杂在一起。上周我就因为漏看了一封包含截止日期变更的邮件,差点耽误了…...

基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具

基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具 深度估计模型,比如我们今天要聊的 Lingbot-Depth-Pretrain-ViTL-14,在机器人导航、三维重建、增强现实这些领域越来越重要。但说实话,对于开发者或者研究人员来说&#xff0c…...

程序员必备:优质源码下载网,打通学习、实战与毕设全链路

对于程序员而言,源码是成长路上最宝贵的“养分”——它承载着成熟的编程逻辑、规范的代码风格、先进的架构设计,更是连接理论学习与实际开发的核心桥梁。无论是入门新手想要快速上手、进阶开发者想要突破技术瓶颈,还是应届毕业生想要高效完成…...

Windows下OpenClaw安装避坑:对接Qwen3-32B-Chat镜像详解

Windows下OpenClaw安装避坑:对接Qwen3-32B-Chat镜像详解 1. 为什么选择WindowsQwen3-32B-Chat组合 去年我在尝试自动化办公流程时,发现很多AI助手工具要么需要上传数据到云端,要么对硬件要求极高。直到遇到OpenClaw这个本地化AI智能体框架&…...

Flutter The Dart VM Service was not discovered after 60 seconds.

更新系统配置好 Flutter 环境报错: The Dart VM Service was not discovered after 60 seconds. This is taking much longer than expected... Open the Xcode window the project is opened in to ensure the app is running. If the app is not running, try …...

双目视觉实战:如何用OpenCV和Python实现简易3D建模(附完整代码)

双目视觉实战:如何用OpenCV和Python实现简易3D建模(附完整代码) 当你第一次看到3D电影中跃然眼前的画面,或是用手机扫描物体生成三维模型时,是否好奇过这背后的技术原理?双目视觉技术正是实现这些酷炫效果的…...