52 硬中断的实现

前言

呵呵 中断机制 也是内核中很常见的机制了 

中断机制是现代计算机系统中的基本机制之一,它在系统中起着通信网络的作用,以协调系统对各种外部事件的响应和处理,中断是实现多道程序设计的必要条件,中断是CPU 对系统发生的某个事件作出的一种反应。引起中断的事件称为中断源。中断源向CPU 提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现由软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。
 

 

硬中断的处理

通过 ax 传递中断号, 获取对应的 irq_desc

然后 irq_desc 会有一系列 irq_action 来依次处理 当前中断

(initramfs) cat /proc/interruptsCPU00:       2255   IO-APIC   2-edge      timer1:          9   IO-APIC   1-edge      i80424:       2351   IO-APIC   4-edge      serial8:          1   IO-APIC   8-edge      rtc09:          0   IO-APIC   9-fasteoi   acpi12:          3   IO-APIC  12-edge      i804214:        178   IO-APIC  14-edge      ata_piix15:         38   IO-APIC  15-edge      ata_piix
NMI:          0   Non-maskable interrupts
LOC:      19244   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RTR:          0   APIC ICR read retries
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
DFR:          0   Deferred Error APIC interrupts
MCE:          0   Machine check exceptions
MCP:          2   Machine check polls
ERR:          0
MIS:          0
PIN:          0   Posted-interrupt notification event
PIW:          0   Posted-interrupt wakeup event

 

硬中断这部分处理是在 irq.do_IRQ 中进行处理的 

ata_piix 对应的 handler 是 libata-sff.ata_bmdma_interrupt

serial 对应的 handler 是 8250_core.serial8250_interrupt 

timer 对应的 handler 是 time.timer_interrupt 

i8042 对应的 handler 是 i8042.i8042_interrupt 

 

 

在哪里注册中断?

这部分中断通常来说是 系统启动 的时候注册的

ata_piix 对应的两个 硬中断

 

37bf8fb9b1bd4abe9b38630c245b657d.png

9881a1e0e3214297925c571f2565ecac.png

 

 

 

i8042 注册的两个 硬中断

810aebfb24cf4849b94136faa7f2d1bd.png

0f5d3f20dca14cbc847de5c1c28a071d.png

 

serial 注册的一个硬中断 

 

 

 

457ad46a186b439593cdd5ca386c557d.png

 

 

atta_piix 中断的处理 

如下 硬件发出中断 会来到 中断处理层, 再到具体的 ata层, 再到 scsi 层

 

5a3df481b4a14c60acb08dee35b3296b.png

 

 

serial 中断的处理

如下 硬件发出中断 会来到 中断处理层, 再到具体的 串口层 

255c8c4ca92d48f19430e7b0a0f0a28e.png

 

 

timer中断的处理

654f805263a74e7ba543ffc6387a5933.png

 

 

i8042中断的处理

1 号中断 

d2fc20e643094bb8b8e143cefc03f432.png

 

12 号中断 

4b0f932e67ee4b1b81b7adec9638e446.png

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542816.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几何造型库 - osgModeling

基于osg的几何造型库(osgModeling-0.1.1)的编译成果和示例: basic: boolean: bsp-tree:

Educational Codeforces Round 163 (Rated for Div. 2)

Educational Codeforces Round 163 (Rated for Div. 2) Educational Codeforces Round 163 (Rated for Div. 2) A. Special Characters 题意: 给出特殊字符的定义,在一组字符串中当前字符的相邻字符有且仅有一个与自身相同的字符,找出具有…

webshell隐藏哥斯拉流量修改sqlmap改ua

webshell隐藏 windows 1.隐藏shell attrib "文件名" s h attrib "文件名" -s -h 2.利用系统代号隐藏shell 创建文件夹名为Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D},此时文件夹将变成我的电脑,无法看到里面的东西&…

Window部署AgileConfig

AgileConfig:分布式配置中心 github:GitHub - dotnetcore/AgileConfig: 基于.NET Core开发的轻量级分布式配置中心 / .NET Core lightweight configuration server 下载部署包:Releases dotnetcore/AgileConfig GitHub 版本:…

操作系统_Win+R运行cmd的一些常用命令(用到整理)

操作系统_WinR运行cmd的一些常用命令(用到整理) Win R运行命令cmd启动命令提示符: 1. devmgmt.msc——设备管理器 2. msinfo32-系统信息 3. mstsc-远程操作 4. ftp-进入文件型服务器,输入命令: ftp ip,登…

【大模型系列】统一图文理解与生成(BLIP/BLIPv2/InstructBLIP)

文章目录 1 BLIP(2022, Salesforce Research)1.1 简介1.2 数据角度1.3 模型角度1.4 BLIP预训练的目标 2 BLIP2(ICML2023, Salesforce)2.1 简介2.2 模型架构2.3 训练细节 3 InstructBLIP(2023, Salesforce)3.1 指令微调技术(Instruction-tuning)3.2 数据集准备3.3 Instruction-a…

linux ffmpeg编译

下载源码 https://ffmpeg.org/ csdn下载源码包 不想编译可以直接下载使用静态版本 https://ffmpeg.org/download.html https://johnvansickle.com/ffmpeg/ 根据cpu类型,下载解压后就可以直接使用了。 linux编译 安装底层依赖 yum install gcc yum isntall …

VXLAN学习笔记

声明:该博客内容大部分参考参考链接整理 什么是VXLAN? VXLAN(Virtual Extensible LAN)即虚拟扩展局域网,是大二层网络中广泛使用的网络虚拟化技术。在源网络设备与目的网络设备之间建立一条逻辑VXLAN隧道,采用MAC in UDP的封装方…

在Linux下安装和使用MySQL 看这篇文章就够了 mysql在ubuntu22下安装使用教程

第一步,在Linux上装MySQL数据库 首先,确保Ubuntu保持网络通畅 两种设置方式 方法一、设置-》网络-》连接方式-》网络地址转换(NAT) ​ 方法二、设置-》网络-》连接方式-》桥接 选择正确的网卡 右下角这里有个网络图标 也可以进行设置 2、更新软件源…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:计算机杂记 🎀CSDN主页 发狂的小花 🌄人…

【Docker篇】数据卷相关操作

文章目录 🎈前言🍔数据卷🛸操作命令⭐创建一个数据卷,并查看数据卷在宿主机的目录位置 🌹挂载数据卷 🎈前言 在前面文章的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并…

Vue 3 + TypeScript 项目中全局挂载并使用工具函数

一、proxy方式 1.封装日期选择工具函数: 在untils文件夹下新建index.ts,并导出工具函数 /*** 获取不同类型日期* param:类型 dateVal: 是否指定*/ export function getSystemDate(param: any, dateVal: any) {let systemDate dateVal ? new Date(da…