一些与中断相关的信息(收集整理的)

本文深入探讨了X86架构中的中断处理机制,包括可编程中断控制器8259A和高级可编程中断控制器APIC的工作原理,以及中断分类、IDT表配置和Linux中断向量分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



EOI(end of Interrupt):发送给可编程中断控制器的信号,指示当前中断已经处理完成。EOI信号在中断回调函数处理完成是被发送,或者PIC能够发送一个auto-Eoi在启动中断回调处理时。

APIC & 8259A

X86计算机的CPU中断只提供了两条外部引接:NMIINTRNMI(NonMaskable Interrupt)是不可屏蔽中断,通常用于电源掉电和物理存储器奇偶检验。INTR是可屏蔽中断,可以通过设置中断屏蔽位来屏蔽中断,主要用于接收外部硬件设备的中断信号。这些信号由中断控制器传递给CPU

常用的中断控制器有两种:

  1. 可编程中断控制器8259A

  2. 高级可编程中断控制器(APIC)

8259A只适合单CPU的情况,为了充分挖掘SMP体系架构的并行性,能够把中断传递给系统中的每个CPU。基于此,Intel引入了一种名为I/O高级可编程控制器的新组件来替代原有的8259A。该组件包含两大部分:一是APIC”,主要负责传递中断信号给指定的CPU;一个具有三个CPU的机器,则它须对应有三个本地APIC。另外一个重要的部分是I/O APIC,主要负责收集来自I/O装置的interrupt信号,系统中最多可拥有8I/O APIC

每个本地APIC都有32位的寄存器,一个内部时钟,一个本地定时设备及本地中断保留的两条额外的IRQ线LINT0LINT1。所有本地APIC都连接I/O APIC,形成一个多级APIC系统。如下图所示:

 

 

http://hi.youkuaiyun.com/attachment/201010/7/85277_1286451025Ny6z.jpg

目前大部分单处理器系统都包含了一个I/OAPIC芯片,可以通过如下两种方式对这种芯片进行配置:

  1. 作为一个标准的8259A工作方式。本地APIC被禁止,外部I/O APIC连接到CPU,两条LINT0LINT1分别连接到INTRNMI引脚;

  2. 作为一个标准外部I/O APIC。本地APIC被激活,且所有的外部中断都通过I/O APIC接收。

中断分类

中断可分为同步中断和异步中断:

  1. 同步中断是当指令执行时由CPU控制单元产生,之所有成为同步,是因为只有在一条指令执行完毕后CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用;

  2. 异步中断指由其他硬件设备依照CPU时钟信号随机产生,即意味着中断能够在指令之间产生,比如键盘中断。

根据Intel官方资料,同步中断成为异常(exception),异步中断被成为中断(interrupt)

中断可分为可屏蔽中断(MaskableInterrupt)和非屏蔽中断(Non Maskable interrupt)。异常分为故障(fault)、陷阱(trap)和终止(abort)

从广义上讲,中断可分为四类:中断、故障、陷阱和终止。

类型

原因

异步/同步

返回行为

中断

来自I/O设备的信号

异步

总是返回到下一条指令

故障

潜在可修复的错误

同步

返回到当前指令

陷阱

有意的异常

同步

总是返回到下一条指令

终止

不可恢复的错误

同步

不会返回

X86体系结构的每个中断都被赋予一个唯一的编号或者向量(8位无符号整数)。非屏蔽中断和异常向量是固定的,而可屏蔽中断向量可以通过中断控制器的编程来改变。

 

         中断描述表(InterruptDescriptor Table)IDT是一个系统表,它和每个中断或异常向量相关联,每个中断在表中存放的是相应的中断或者异常处理的入口地址。内核在允许中断产生前,也就是在系统初始化时,必须把IDT表的初始化地址装载到idtr寄存器中,初始化表中的每一项。

        

         Linux中断向量分布( fromarch/x86/include/asm/irq_vectors.h)

         Linux系统中,每个CPU Core256IDT项,每个项有8个字节。它们是CPU执行的跳转表,当一个中断向量被触发,包括中断、故障、陷阱和终止,CPU根据IDT的地址执行相应的跳转。

         Linux启动时,将设置每个中断向量的内核跳转地址,设置后在整个系统运行期间,不会做改动。下面是IDT项的普通分布表:

向量号

描述

备注

0 … 31

系统陷阱和故障

 

32 … 127

设备中断

 

128

Int 80H系统调用接口

 

129 …INVALIDATE_TLB_VECTOR_START-1

设备中断

INVALIDATE_TLB_VECTOR_START是什么?

INVALIDATE_TLB_VECTOR_START … 255

特殊中断

特殊中断什么意思?

         X86_64系统每个core都有一个IDT表,X86_32系统共享一个IDT表。

 

它能够根据你设置的条件过滤用户帐户或者计算机账户,然后你可以设置如何处置这些过期账户,是删除、移动、还是锁定 您需要在命令行环境下执行它,查询命令行的方式是 oldcmp /? 您可以参考下面的这篇文章,上面有详细的图文解说如何使用oldcmp清除旧的计算机帐户: 下面我举一个例子来说明使用OldCmp来清除域中长时间不使用的计算机帐户。 将工具OldCmp.exe 复制 到C盘根目录,打开命令行窗口。接下来我要把AD中超过60天没有更新计算机账户密码的计算机账户挑选出来并禁用,等过一段时间,若没有用户报告出现问题,就可以统统从域中清除了。 注:默认情况下,计算机账户密码每30天自动更新一次。那也就是说我可以认为60天没更新的计算机已经是无效的了。该工具默认是90天,当然您可以根据需要自己设定。 在命令行窗口定位到C:\> 然后运行下面的命令: oldcmp –age 60 –disable –unsafe –forreal 注释:运行了命令后在工具所在的目录内会出现一份html报告,内容非常详尽。下面介绍一下参数含义您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/ -age 60 :超过60天未更新计算机账户密码的的计算机账户 -disable :禁用计算机账户 -unsafe :比如你有100个符合条件的对象会被执行,但默认情况下只对前10个做了操作,加了这个参数后就是对所有符合条件的对象操作,这么做的目的只有一个,安全。 -forreal :加了这个参数,所有的操作才真正的执行。默认情况下你的操作都只是出现一份报告,告诉你操作的结果,让你可以有个了解。该工具的使用是需要非常小心的,所以该工具作者认为有必要多一个参数来保护。 命令运行后,刷新一下OU,你就发现符合条件的计算机账户都被禁用了。过了一段时间一切都运作正常,那么我就来删除当初禁用的这些电脑。 只需要运行下面的命令: oldcmp -onlydisabled -delete -unsafe -forreal 参数Onlydisabled就是仅仅对被禁用的计算机账户操作。您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/ 另外您还可以借助于脚本去查询并删除过期的计算机帐户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值