当前位置: 首页 > 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基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上(例如走线和过孔) – 其他药水…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...