Intel x86架构之I/O APIC

全文来自Intel手册(见参考1):Intel? 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Datasheet
注意:下文中已经指出手册中的对应页面和章节,请对照手册原文看,任何个人理解错误,请包涵。
一,以下内容来自(P9):3.2. IOAPIC Registers
1,IOAPIC标识寄存器
偏移:00h
默认值:00h
属性:可读/写
字段:27:24为IOAPIC标识

2,IOAPIC版本寄存器
偏移:01h
默认值:00170011h
属性:只读
字段:23:16为最大转换条目数(Maximum Redirection Entry),该值等于输入引脚数目减1。取值范围为0到239。82093AA的该值为17h。
7:0为APIC版本号。

3,IO转换表寄存器
偏移:
10-11h (IOREDTBL0) 28-29h (IOREDTBL12)
12-13h (IOREDTBL1) 2A-2Bh (IOREDTBL13)
14-15h (IOREDTBL2) 2C-2Dh (IOREDTBL14)
16-17h (IOREDTBL3) 2E-2Fh (IOREDTBL15)
18-19h (IOREDTBL4) 30-31h (IOREDTBL16)
1A-1Bh (IOREDTBL5) 32-33Fh (IOREDTBL17)
1C-1Dh (IOREDTBL6) 34-35h (IOREDTBL18)
1E-1Fh (IOREDTBL7) 36-37h (IOREDTBL19)
20-21h (IOREDTBL8) 38-39h (IOREDTBL20)
22-23h (IOREDTBL9) 3A-3Bh (IOREDTBL21)
24-25h (IOREDTBL10) 3C-3Dh (IOREDTBL22)
26-27h (IOREDTBL11) 3E-3Fh (IOREDTBL23)
默认值:xxx1 xxxx xxxx xxxxh
属性:可读/写

这是一系列我特别关注的寄存器,有24个,每一个寄存器专注于一个中断输入信号的相关设置。与8259A的IRQ引脚不同的是,IO APIC的中断优先级与中断输入信号物理位置无关,而是由软件检查中断向量来确定。通过这些的寄存器,对于每一个中断信号,操作系统可以单独指定它的信号极性、边缘触发还是水平触发以及目标和投递模式等。

如果一个中断的时间超过一个CPU时钟周期(CLK cycle),那么IO APIC将使用边缘触发方式。中断输入是异步进行的,因此必须保证设置和控制的总时间至少在一个CPU时钟输入的上升边缘内。一旦检测到某个中断信号,IO APIC内的递交状态位就将被置位。直到IO APIC通过APIC总线把该信号投递到目标字段所指定的对应目标并被接受为止,那个中断输入引脚都不会被再次检测识别到新信号。只有在对应的目标APIC将IRR(Interrupt Request Register)位从0修改为1时,也就是对应中断已经被目标APIC处理掉而不再处于pending未决状态时,那个中断输入引脚上的新信号才会被重新检测到。

字段:
63:56:Destination Field—R/W:指定接收该中断的目标lapic。
Destination Mode IOREDTBLx[11] Logical Destination Address
0, Physical Mode IOREDTBLx[59:56] = APIC ID
1, Logical Mode IOREDTBLx[63:56] = Set of processors

如果是Physical Mode(见字段11),那么该字段包含的是APIC ID号;因为“在P6和奔腾处理器上,lapic的ID号只占4bit”,所以这里也只占59:56的4bit。但是“在奔四和至强处理器上,xAPIC将ID号扩展到8bit”,因此对应到这里应该也是8bit。不过这个文档上暂时没有说明。
如果是Logical Mode,那么该字段包含的是处理器组,具体如何匹配目标还涉及到每个lapic的DFR(Destination Format Register)和LDR(Logical Destination Register)寄存器。

55:17:保留。

16:Interrupt Mask—R/W:中断掩码。
如果该位设置为1,那么对应的中断信号被屏蔽(masked)。被屏蔽中断引脚上发生的边缘触发(Edge-sensitive)中断信号将被忽略,即不会被投递和保持pending未决。被屏蔽水平触发(level-sensitive)引脚上发生的水平断言(Level-asserts)和取消(negates)操作也都被忽略,而不会产生负面作用。在中断被lapic接受后,修改掩码位从非屏蔽状态到屏蔽状态对那个中断(即已被lapic接受的中断)没有任何影响,这与在中断递交到处理器之前,设备撤回了中断的情况类似。在中断信息被lapic单元接收但还未分配到处理器的这段时间内,如果设置了该掩码位,那么需要由软件来负责处理这种情况。
如果该位设置为0,那么对应的中断信号没有被屏蔽,边缘或水平中断都将被投递到目标lapic。

15:Trigger Mode—R/W:触发模式。
1为水平触发;0为边缘触发。

14:Remote IRR—RO:Remote Interrupt Request Register。
该bit位仅供水平触发中断使用。对于边缘触发中断而言,该bit位无意义。
当lapic接受io apic投递的水平触发中断时,该bit位被设置为1。当一个来之lapic的带有匹配中断向量的EOI消息被io apic接收时,该bit位被设置为0。

13:Interrupt Input Pin Polarity (INTPOL)—R/W:中断输入引脚极性。
0表示高活跃(High active),1表示低活跃(Low active)。

12:Delivery Status (DELIVS)—RO:投递状态。
标识中断的当前投递状态。0表示当前没有活动的中断投递,1表示当前正在进行中断投递。

11:Destination Mode (DESTMOD)—R/W:目标模式。
该字段用于解释字段Destination(63:56),如果该字段为0,那么字段Destination里存储的是APIC ID号;如果该字段为1,那么在每个lapic的寄存器DFR(Destination Format Register)和LDR(Logical Destination Register)的控制之下对字段Destination进行匹配来识别目标。

10:8:Delivery Mode (DELMOD)—R/W:投递模式。
由该字段来指定目标lapic如何接收处理这个信号。值得注意的是,有些投递模式必须与特定的触发模式联合使用。
000:Fixed:通过INTR信号线将信号投递到所有目标处理器。边缘触发和水平触发都可以使用。
001:Lowest Priority:通过INTR信号线将信号投递到目标lapic中当前执行在最低优先权限的处理器。边缘触发和水平触发都可以使用。
010:SMI:System Management Interrupt,系统管理中断。只能使用边缘触发模式。中断向量信息被忽略,但为了向前兼容,必须设置为全0。
011:保留。
100:NMI:通过NMI信号线将信号投递到所有目标处理器。中断向量信息被忽略。即便编程设置为水平触发中断,NMI也会被当做边缘触发中断对待。虽然如此,但为了更正确的操作,最好将其设置为边缘触发方式。
101:INIT:通过INIT信号线将信号投递到所有目标处理器。所有接收到该信号的lapic需保证它们处于INIT状态。即便编程设置为水平触发中断,INIT也始终会被当做边缘触发中断对待。虽然如此,但为了更正确的操作,最好将其设置为边缘触发方式。
110:保留。
111:ExtINT:通过INTR信号线将信号投递到所有目标处理器,就如同该信号来之一个外部连接的8259A型中断控制器。只能使用边缘触发。

7:0:Interrupt Vector (INTVEC)—R/W:中断向量。
指定当前中断的中断向量。取值范围为10h到FEh。

参考:
1,Intel? 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Datasheet
http://www.intel.com/design/chipsets/datashts/290566.htm
Intel? 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Specification Update
http://www.intel.com/design/chipsets/specupdt/290710.htm

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

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

相关文章

期货日数据维护与使用_日数据维护_模块整体代码

目录 写在前面 setting.py sqlite_tool.py future_widget.py 写在前面 本文默认已经创建了项目,如果不知道如何创建一个空项目的,请参看以下两篇博文 PyQt5将项目搬到一个新的虚拟环境中 https://blog.csdn.net/m0_37967652/article/details/122…

tcp和udp的区别(附java实现)

TCP和UDP的区别 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种不同的网络传输协议,它们在数据传输时有一些重要的区别。 TCP TCP是面向连接的协议,它在通信之前需要建立连接&…

InternLM第2节课笔记

轻松玩转书生浦语大模型趣味Demo InternLM模型全链条开源 InternLM-7B和InternLM-20B Lagent:智能体(agent)框架 浦语灵笔:InternLM-Xcomposer-7B 视觉-语言大模型 模型下载 Hugging Face huggingface-cli OpenXLab python…

【C++】- 类和对象(!!C++类基本概念!this指针详解)

类和对象 引入类类的定义类的访问限定操作符类的作用域类的实例化类对象模型this指针 引入类 在 C中,引入了一个新的定义----------类。类是一种用户自定义的数据类型,用于封装数据和行为。类可以看作是一个模板或蓝图,描述了一组相关的数据和…

第15课 利用openCV实现人脸识别

这节课,我们再来看一个简单且实用的例子:人脸识别。这个小例子可以让你进一步领略openCV的强悍。 1.复制demo14并改名为demo15。 2.修改capImg函数: int fmle::capImg() {// 加载人脸检测分类器cv::CascadeClassifier faceCascade;faceCas…

UEditor在编辑对齐方式时产生额外空行问题

一、问题描述 一个关于UEditor富文本编辑器的问题:在编辑内容对齐方式后保存后浏览器显示的段落上下会比原先多出一些间距。 下面是对齐编辑后,未保存前的的HTML: 保存后,实际会多出一个段落空行: 二、问题调查 经…

基于B/S架构的数字孪生智慧监所可视化监管系统

1 前言 物联网技术的发展使云计算技术得到了迅猛的发展及广泛的应用,智能体系的创建已经成为监狱发展的必然趋势。 智慧监狱的创建、智能化管理的推行是监狱管理的创新,也是监狱整体工作水平提升的具体体现。 1.1 建设背景 近年来,司法部不…

CISSP 第7章:PKI和密码学应用

第七章 PKI和密码学应用 7.1 非对称密码学 对称密码系统具有共享的秘钥系统,从而产生了安全秘钥分发的问题 非对称密码学使用公钥和私钥对,无需支出复杂密码分发系统 7.1.1 公钥与私钥 7.1.2 RSA(兼具加密和数字签名) RSA算法依赖…

ctrl + v获取图片和文字

1、效果实现 1.1、做法 容器监听paste事件。原生js则document.addEventListener(paste),vue则paste 监听paste事件的回调函数有个参数e,获取e.clipboardData粘贴的文字信息 e.clipboardData.getData("text/plain")粘贴的图片信息 e.clipboard…

委托QAbstractItemDelegate

参考:QT(7)-初识委托_qt 委托-CSDN博客 一、 1、 模型:负责“组织”数据; 视图:负责“显示”数据; 委托:负责“修改”数据; 2、委托:在QT的MV模型中,处理特定类型的…

c++拷贝控制

文章目录 拷贝构造函数的基本概念定义语法何时使用拷贝构造函数示例代码运行结果注意事项 拷贝赋值运算符的基本概念定义语法何时使用拷贝赋值运算符示例代码运行结果注意事项 析构函数的基本概念定义语法何时调用析构函数示例代码运行结果注意事项 三/五法则三法则 (Rule of T…

【SpringCloud】之配置中心(进阶使用)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringCloud开发之远程消费》。🎯&a…

精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(上)

攻破Java技术盲点之剖析动态代理的实现原理和开发指南 背景介绍静态代理和动态代理动态代理与静态代理的区别 进入正题重温:静态代理实现静态代理案例静态代理的弊端 重温:动态代理Java动态代理InvocationHandlerJava动态代理的实现下面看具体的代码实例…

Blazor项目如何调用js文件

以下是来自千问的回答并加以整理:(说一句,文心3.5所给的回答不完善,根本运行不起来,4.0等有钱了试试) 在Blazor项目中引用JavaScript文件(.js)以实现与JavaScript的互操作&#xff…

基于JAVA的服装店库存管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

Java 11中的新字符串APIs详解

第1章 引言 大家好,我是小黑,咱们都知道,Java作为一种广泛使用的编程语言,每一次更新都会带来不少新鲜事物。而Java 11,作为长期支持(LTS)版本之一,更是引起了广大开发者的关注。好…

并发(8)

目录 46.Thread.sleep(),Object.wait(),Condition.await(),LockSupport.part()的区别? 47.如果在wait()之前执行了notify()会怎样? 48.如果在park()之前执行了unpark()会怎样? 49.什么是AQS&…

九州金榜|孩子厌学,作为父母有想做自己的原因吗?

孩子不会天生就厌学,如果孩子天生厌学,那么孩子就不可能学会说话,走路,日常生活,更不可能去上学,孩子厌学因素非常多,而作为父母,你有没有想过是你的原因造成的呢?九州金…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来,通用代码生成器和超级语言 我们生活在一个编程语言种类繁多,百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话,大家都知道,大多数编程语言是高级语言。 何为高级…

K8S---通过curl访问api

1、列出所有的接口 curl --cacert /opt/kubernetes/ssl/ca.pem --cert /opt/kubernetes/ssl/default-admin.pem --key /opt/kubernetes/ssl/default-admin-key.pem https://10.240.184.74:6443/ 2、列出核心api的版本 curl --cacert /opt/kubernetes/ssl/ca.pem -…