精华内容
下载资源
问答
  • CPU中断请求理解

    2019-10-26 14:52:13
    CPU软中断 1、什么是中断 中断表示我们请求操作事件准备就绪了,例如从磁盘...首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断...

    CPU软中断

    1、什么是中断

    中断表示我们请求操作事件准备就绪了,例如从磁盘读取数据,我们知道CPU执行速度比磁盘执行速度快几个数量级,因此如果CPU每次check磁盘是否准备就绪了,那么系统的并发能力和性能会大大下降,但是采用中断方式,异步事件驱动方式来提升系统效率,首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断程序会从磁盘中读取数据到内存中。

    2、如何避免丢失其他中断请求

    一定要保证中断程序快速能处理,因为当CPU在处理中断时,是不能响应其他中断请求的,那么就会导致其他中断请求丢失

    举个取外卖的例子:我们在app上点外卖,但是这个外卖不知道什么时候到,因为送外卖小哥一旦到了目的地就会放下外卖就走,这个时候你就会一次又一次的check外卖是否到了,然而你什么时候也干不了,仅仅在来来回回看外卖是否到了,导致浪费你的时间。

    改进方式:如果换一种方式,你和外卖小哥约定一个通知方式,例如当外卖到了家门口小哥就打电话通知我,我就出去取外卖。 打电话就是一次中断请求,你就安心的干其他事情,静静等电话。 如果你点了两份外卖,当第一份外卖到了,小哥电话通知你,但是你在电话中沟通发票问题,这个时候第二份外卖到了另外一个小哥给你打电话发现占线,几次尝试后还是失败,这个时候外卖小哥就走了,导致丢失了这次外卖。

    **解决:**在电话中只回答好,然后沟通发票问题当面说,这个时候就可以接到另外小哥的电话。 所以系统的中断请求分为两个阶段:

    第一阶段(上半部请求):接受硬件中断请求(从硬件中取完数据后发送一次软断请求,复杂逻辑交给下半部分请求,),称为硬中断,特点是处理速度快

    第二阶段(下半部请求): 内核线程接受到上半部分软中断请求,就会异步的继续执行上半部未完成的请求, 称为软中断,特点延迟执行

    举个网络接受数据例子:

    当网卡接收到数据时,首先会发送一个硬中断请求,这个时候CPU就会执行中断处理程序,快速将网卡中数据读取到内存中,完成后会发送一个软中断请求,下半部被软中断信号唤醒后就会按照网络协议栈将内存数据进行解析处理,最终递给应用程序。(处理期间还是可以响应其他硬中断请求的)

    中断中的异步事件机制提高并发能力思想应用到了现在流行的网络通讯框架Netty中,提高系统吞吐量,详细了解Netty实现原理Reactor模式

    3、查看硬中断和软中断运行情况

    可以查看 /proc/interrupts 和 /proc/softirq 文件

    从 /proc/softirq文件中可以看到软中断类型
    TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)

    总结

    一般如果软中断占用CPU多时,大多都是系统读取网卡数据太频繁了(要么数据包太小、可能受到了SYNC FLOOD攻击 (交换机或防火墙屏蔽此ip,防止将数据进入系统中))

    展开全文
  • 6.3 x86处理器如何处理MSI-X中断请求

    千次阅读 2013-07-22 16:28:14
    PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据。只是MSI-X中断机制为了支持更多的中断请求,在MSI-X Capablity结构中存放了一个指向...

    PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据。只是MSI-X中断机制为了支持更多的中断请求,在MSI-X Capablity结构中存放了一个指向一组Message Address Message Data字段的指针,从而一个PCIe设备可以支持的MSI-X中断请求数目大于32个,而且并不要求中断向量号连续。MSI-X机制使用的这组Message Address Message Data字段存放在PCIe设备的BAR空间中,而不是在PCIe设备的配置空间中,从而可以由用户决定使用MSI-X中断请求的数目。

    当系统软件初始化PCIe设备时,如果该PCIe设备使用MSI-X机制传递中断请求,需要对MSI-X Capability结构指向的Message AddressMessage Data字段进行设置,并使能MSI-X Enable位。x86处理器在此处的实现与PowerPC处理器有较大的不同。

    6.3.1 Message Address字段和Message Data字段的格式

    x86处理器系统中,PCIe设备也是通过向Message Address写入Message Data指定的数值实现MSI/MSI-X机制。在x86处理器系统中,PCIe设备使用的Message Adress字段和Message Data字段与PowerPC处理器不同。

    1 PCIe设备使用Message Adress字段

    x86处理器系统中,PCIe设备使用的Message Address字段仍然保存PCI总线域的地址,其格式如6?7所示。

    其中第31~20位,存放FSB Interrupts存储器空间的基地址,其值为0xFEE。当PCIe设备对0xFEEX-XXXX这段“PCI总线域”的地址空间进行写操作时,MCH/ICH将会首先进行“PCI总线域”到“存储器域”的地址转换,之后将这个写操作翻译为FSB总线的Interrupt Message总线事务,从而向CPU内核提交中断请求。

    x86处理器使用FSB Interrupt Message总线事务转发MSI/MSI-X中断请求。使用这种方法的优点是向CPU内核提交中断请求的同时,提交PCIe设备使用的中断向量,从而CPU不需要使用中断响应周期从寄存器中获得中断向量。FSB Interrupt Message总线事务的详细说明见下文。

    Message Address字段其他位的含义如下所示。

    • Destination ID字段保存目标CPUID号,目标CPUID与该字段相等时,目标CPU将接收这个Interrupt MessageFSB Interrupt Message总线事务可以向不同的CPU提交中断请求。
    • RH(Redirection Hint Indication)位为0时,表示Interrupt Message将直接发向与Destination ID字段相同的目标CPU;如果RH1时,将使能中断转发功能。
    • DM(Destination Mode)位表示在传递优先权最低的中断请求时,Destination ID字段是否被翻译为Logical或者Physical APIC ID。在x86处理器中APIC ID有三种模式,分别为PhysicalLogicalCluster ID模式。
    • 如果RH位为1DM位为0时,Destination ID字段使用Physical模式;如果RH位为1DM位为1Destination ID字段使用Logical模式;如果RH位为0DM位将被忽略。

    以上这些字段的描述与x86处理器使用的APIC中断控制器相关。对APIC的详细说明超出了本书的范围,对此部分感兴趣的读者请参阅Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1

    2 Message Data字段

    Message Data字段的格式如6?8所示。

    Trigger Mode字段为0b0x时,PCIe设备使用边沿触发方式申请中断;为0b10时使用低电平触发方式;为0b11时使用高电平触发方式。MSI/MSI-X中断请求使用边沿触发方式,但是FSB Interrupt Message总线事务还支持Legacy INTx中断请求方式,因此在Message Data字段中仍然支持电平触发方式。但是对于PCIe设备而言,该字段为0b0x

    Vector字段表示这个中断请求使用的中断向量。FSB Interrupt Message总线事务在提交中断请求的同时,将中断向量也通知给处理器。因此使用FSB Interrupt Message总线事务时,处理器不需要使用中断响应周期通过读取中断控制器获得中断向量号。与PowerPC的传统方式相比,x86处理器的这种中断请求的效率较高[]

    值得注意的是,在x86处理器中,MSI机制使用的Message Data字段与MSI-X机制相同。但是当一个PCIe设备支持多个MSI中断请求时,其Message Data字段必须是连续的,因而其使用的Vector字段也必须是连续的,这也是在x86处理器系统中,PCIe设备支持多个MSI中断请求的问题所在,而使用MSI-X机制有效避免了该问题。

    Delivery Mode字段表示如何处理来自PCIe设备的中断请求。

    • 该字段为0b000时,表示使用“Fixed Mode”方式。此时这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b001时,表示使用“Lowest Priority”方式。此时这个中断请求将被优先权最低的CPU处理。当使用“Fixed Mode”和“Lowest Priority”方式时,如果Vector字段有效,CPU接收到这个中断请求之后,将使用Vector字段指定的中断向量处理这些中断请求;而当Delivery Mode字段为其他值时,Message Data字段中所包含的Vector字段无效。
    • 该字段为0b010时,表示使用SMI方式传递中断请求,而且必须使用边沿触发,此时Vector字段必须为0。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b100时,表示使用NMI方式传递中断请求,而且必须使用边沿触发,此时Vector字段和Trigger字段的内容将被忽略。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b101时,表示使用INIT方式传递中断请求,Vector字段和Trigger字段的内容将被忽略。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b111时,表示使用INTR信号传递中断请求且使用边沿触发。此时MSI中断信息首先传递给中断控制器,然后中断控制器在通过INTR信号向CPU传递中断请求,之后CPU在通过中断响应周期获得中断向量。上文中PowerPC处理器使用的方法与此方法类似。而在x86处理器中多使用Interrupt Message总线事务进行MSI中断信息的传递,因此这种模式很少被使用。

    边沿触发和电平触发是中断请求常用的两种方式。其中电平触发指外部设备使用逻辑电平1(高电平触发)或者0(低电平触发),提交中断请求。使用电平或者边沿方式提交中断请求时,外部设备一般通过中断线(IRQ_PIN#)与中断控制器相连,其中多个外部设备可能通过相同的中断线与中断控制器相连(线与或者与门)

    外部设备在使用低电平触发,提交中断请求的过程中,首先需要将IRQ_PIN#信号驱动为低。当中断控制器将该中断请求提交给处理器,而且处理器将这个中断请求处理完毕后,处理器将通过写外部设备的某个寄存器来清除此中断源,此时外部设备将不再驱动IRQ_PIN#信号线,从而结束整个中断请求。

    IRQ_PIN#信号线可以被多个外部设备共享,在这种情况之下,只有所有外部设备都不驱动IRQ_PIN#信号线时,IRQ_PIN#信号才为高电平。采用电平触发方式进行中断请求的优点是不会丢失中断请求,而缺点是一个优先权较高的中断请求有可能会长期占用中断资源,从而使其他优先权较低的中断不能被及时提交。因为优先级别较高的中断源有可能会持续不断地驱动IRQ_PIN#信号。

    而边沿触发使用上升沿(01)或者下降沿(10)作为触发条件,但是中断控制器并不是使用这个“边沿”作为触发条件。中断控制器使用内部时钟对IRQ_PIN#信号进行采样,如果在前一个时钟周期,IRQ_PIN#信号为0,而后一个时钟周期,IRQ_PIN#信号为1,中断控制器认为外部设备提交了一个有效“上升沿”,中断控制器会锁定这个“上升沿”并向处理器发出中断请求。这也是外部设备至少需要将IRQ_PIN#信号保持一个时钟采样周期的原因,否则中断控制器可能无法识别本次边沿触发的中断请求,从而产生Spurious中断请求。

    外部设备使用“上升沿”进行中断申请时,不需要持续地将IRQ_PIN#信号驱动为1,而只需要保证中断控制器可以进行正确采样这些中断信号即可。在处理边沿触发中断请求时,处理器不需要清除中断源。

    使用边沿触发可以有效避免“优先级别”较高的中断源长期占用IRQ_PIN#信号的情况,使用“下降沿”触发进行中断请求与“上升沿”触发类似。

    但是外部设备使用边沿触发方式时,有可能会丢失一些中断请求。例如在一个处理器系统中,存在一个定时器,这个定时器使用上升沿触发方式向中断控制器定时提交中断。如果当处理器正在处理这个定时器的上一个中断请求时,将不会处理这个定时器发出的其他“边沿”中断请求,从而导致中断丢失。而使用电平触发方式不会出现这类问题,因为电平触发方式是一个“持续”过程,处理器只有处理完毕当前中断,并清除相应中断源之后,才会处理下一个中断源。

    MSI中断请求实际上和边沿触发方式非常类似,MSI中断请求通过存储器写TLP实现,这个写动作是一个瞬间的动作,并不是一个持续请求,因此在x86处理器中MSI中断请求使用边沿触发进行中断请求。

    还有一些外部设备可以通过I/O APIC进行中断请求[],这些I/O APIC接收的外部中断需要标明是使用边沿或者电平触发,I/O APIC使用FSB Interrupt Message总线事务将中断请求发向Local APIC,并由Local APIC向处理器提交中断请求。

    6.3.2 FSB Interrupt Message总线事务

    MPC8572处理器处理MSI中断请求不同,x86处理器使用FSBInterrupt Message总线事务,处理PCIe设备的MSI/MSI-X中断请求。由上文所示,MPC8572处理器处理MSI中断请求时,首先由MPIC中断控制器截获这个MSI中断请求,之后由MPIC中断控制器向CPU提交中断请求,而CPU通过中断响应周期从MPIC中断控制器的ACK寄存器中获得中断向量。

    采用这种方式的主要问题是,当一个处理器中存在多个CPU时,这些CPU都需要通过中断响应周期从MPIC中断控制器的ACK寄存器中获得中断向量。在一个中断较为密集的应用中,ACK寄存器很可能会成为系统瓶颈。而采用Interrupt Message总线事务可以有效地避免这种系统瓶颈,因为使用这种方式中断信息和中断向量将同时到达指定的CPU,而不需要使用中断响应周期获得中断向量。

    x86处理器也具有通过中断控制器提交MSI/MSI-X中断请求的方法,在I/O APIC具有一个 The IRQ Pin Assertion Register”寄存器,该寄存器地址为0xFEC00020[],其第4~0位存放IRQ Number。系统软件可以将PCIe设备的Message Address寄存器设置为0xFEC00020,将Meaasge Data寄存器设置为相应的IRQ Number

    PCIe设备需要提交MSI中断请求时,将向PCI总线域的0xFEC00020地址写入Message Data寄存器中的数据。此时这个存储器写请求将数据写入I/O APICThe IRQ Pin Assertion Register中,并由I/O APIC将这个MSI中断请求最终发向Local APIC,之后再由Local APIC通过INTR#信号向CPU提交中断请求。

    上述步骤与MPC8572处理器传递MSI中断的方法类似。在x86处理器中,这种方式基本上已被弃用。下文以6?9为例,说明x86处理器如何使用FSB总线的Interrupt Message总线事务,向CPU提交MSI/MSI-X中断请求。

    PCIe设备在发送MSI/MSI-X中断请求之前,系统软件需要合理设置PCIe设备MSI/MSI-X Capability寄存器,使Message Address寄存器的值为0xFEExx00y[],同时合理地设置Message Data寄存器Vector字段。

    PCIe设备提交MSI/MSI-X中断请求时,需要向0xFEExx00y地址写Message Data寄存器中包含的数据,并以存储器写TLP的形式发送到RC。如果ICH收到这个存储器写TLP时,将通过DMI接口将这个TLP提交到MCHMCH收到这个TLP后,发现这个TLP的目的地址在FSB Interrupts存储器空间中,则将PCIe总线的存储器写请求转换为Interrupt Message总线事务,并在FSB总线上广播。

    FSB总线上的CPU,根据APIC ID信息,选择是否接收这个Interrupt Message总线事务,并进入中断状态,之后该CPU将直接从这个总线事务中获得中断向量号,执行相应的中断服务例程,而不需要从APIC中断控制器获得中断向量。与PowerPC处理器的MPIC中断控制器相比,这种方法更具优势。

    6.4 小结

    本章详细描述了MSI/MSI-X中断机制的原理,并以PowerPCx86两个处理器系统为例说明这两种中断机制实现机制。本章因为篇幅有限,并没有详细讲述这两个处理器使用的中断控制器。而理解这些中断控制器的实现机制是进一步理解MSI/MSI-X中断机制的要点。对此部分有兴趣的读者可以继续阅读MPIC中断控制器和APIC中断控制器的实现机制,以加深对MSI/MSI-X中断机制的理解。

    设备的中断处理是局部总线的设计难点和重要组成部分,而中断处理的效率直接决定了局部总线的数据传送效率。在一个处理器系统的设计与实现中,中断处理的优化贯彻始终。

    展开全文
  • 6.2 PowerPC处理器如何处理MSI中断请求

    千次阅读 2013-07-22 16:28:12
    PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求。其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的PowerPC处理器,其中断控制器多与MPIC兼容。 值得...

    PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求。其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的PowerPC处理器,其中断控制器多与MPIC兼容。

    值得注意的是,PowerPC处理器和x86处理器处理MSI报文的方式有较大的不同。其中x86处理器使用的机制比PowerPC处理器更为合理,但是PowerPC处理器使用的方法使用的硬件资源相对较少。本节将MPC8572处理器为例说明MSI机制的处理过程,在第6.3节介绍x86处理器如何实现MSI机制。

    MPIC中断控制器是FreescalePowerPC处理器使用的通用中断控制器,目前基于E500内核的处理器,如MPC854x8572等处理器使用这种中断控制器。目前Freescale使用QorIP架构,该架构使用的中断控制器与MPIC兼容。

    使用MPIC中断控制器处理MSI中断时,PCIe设备的MSI报文,其目的地址为MPIC中断控制器的MSIIR寄存器。当该寄存器被PCIe设备写入后,MPIC中断控制器将向处理器内核提交中断请求,之后处理器再通过读取MPIC中断控制器的ACK寄存器获得中断向量号,并进行相应的中断处理。这种方式与x86处理器的FSB Interrupt Message机制相比,处理器需要读取ACK寄存器,从而中断处理的延时较大。

    目前FreescaleP4080处理器对MPIC中断控制器进行了优化。在P4080处理器中,MPIC中断控制器向处理器提交中断请求的同时,也向处理器内核提交中断向量,处理器内核不必读取ACK寄存器获得中断向量,从而缩短了中断处理延时。使用这种方法的效率与x86处理器使用的FSB Interrupt Message机制相当。

    目前Freescale并没有完全公开P4080处理器的实现细节,因此本节仍以MPC8572处理器为例介绍PCIe设备的MSI中断请求。在MPC8572处理器中,MPIC中断控制器的拓扑结构如6?5所示。

    由上图所示,MPIC中断控制器可以处理内部中断请求[1]、外部中断请求,Message、处理器间中断请求和Share MSI中断请求等。而MPIC中断控制器使用Int0Int1等中断线向处理器提交这些中断请求。其中Internal InterruptsExternal Interrupts模块处理MPC8572内部和外部的中断请求,而Share MSI处理来自PCIe设备的MSI或者MSI-X中断请求。

    MPIC中断控制器收到MSI报文后,将使用中断线Int0Int1或者cintn向处理器内核提交中断请求。处理器内核被中断后,将读取ACK寄存器获得中断向量,然后执行相应的中断服务例程。为此PowerPC处理器设置了一系列寄存器,如下文所示。

    6.2.1 MSI中断机制使用的寄存器

    PowerPC处理器设置了一系列寄存器,处理来自PCIe设备的MSI报文,其中最重要的寄存器是MSIIR寄存器。在PowerPC处理器系统中,PCIe设备Message Address寄存器中存放的值都为MSIIR寄存器的物理地址,而Message Data寄存器中存放的数据也与MSIIR寄存器相关。

    PowerPC处理器系统中,MSI机制的实现过程是PCIe设备向MSIIR寄存器写入指定的数据。MPIC中断控制器发现该寄存器被写入后,将向处理器提交中断请求。处理器收到这个中断请求后,将通过读取MPIC中断控制器的ACK寄存器确定中断向量,并依此确定中断源。为此PowerPC处理器还设置了其他寄存器实现MSI中断机制。

    1 MSIIR寄存器

    PowerPC处理器中,MSIIR(Shared Message Signaled Interrupt Index Register)寄存器是实现MSI机制的重要寄存器。

    PCIe设备对MSIIR寄存器进行写操作时,MPC8572处理器将使能MSIR0–MSIR7寄存器的相应位,从而向MPIC中断控制器提交中断请求,而中断控制器将转发这个中断请求,由处理器进一步处理。该寄存器各字段的详细描述如6?3所示。

     6?3 MSIIR寄存器

    Bits

    定义

    描述

    27~31

    IBS

    该字段用来选择MSIR0~MSIR7寄存器的对应位。0b00000对应SH00b00001对应SH10b00010对应SH2;以此类推0b11111对应SH31

    24~26

    SRS

    该字段用来选择MSIR0~MSIR7寄存器。0b000对应MSIR00b001对应MSIR10b010对应MSIR2;以此类推0b111对应MSIR7

    0~24

     

    保留。

     

    PCIe设备通过MSI机制,向此寄存器写入数据时,MSIR0~7寄存器的相应位SH0~31将有一位置1。例如PCIe设备向MSIIR寄存器写入0xFF00000时,MSIR7寄存器的SH31位将置1(SRS字段为0b111用来选择MSIR7,而IBS字段为0b11111用来选择SH31)

    2 MSIR寄存器组

    MSIR(Shared Message Signaled Interrupt Registers)寄存器组共由8个寄存器组成,分别为MSIR0~MSIR7。其中每一个MSIRx寄存器中有32个有效位,分别为SH0~31。当PCIe设备对MSIIR寄存器进行写操作时,某一个MSIIRx寄存器的某个SH位将被置为有效。系统软件通过读取该寄存器获得中断源,该寄存器读清除,对此寄存器进行写操作没有意义。

    该寄存器组的大小决定了一个PowerPC处理器支持的MSI中断请求的个数。在MPC8572处理器中,有8MSIRx寄存器,每个寄存器由32个有效位组成,因此MPC8572处理器最多能够处理256MSI中断请求。该寄存器的结构如6?6所示。

    3 MSISR寄存器

    MSISR寄存器(Shared Message Signaled Interrupt Status Register)共由8个有效位组成,每一位对应一个MSIR寄存器。MPC8572处理器设置该寄存器的主要目的是方便系统软件定位究竟是哪个MSIR寄存器中存在有效的中断请求。首先系统软件通过MSISR寄存器判断是哪个MSIRx寄存器存在有效请求,之后再读取相应的MSIRx寄存器,该寄存器各字段的详细描述如6?4所示。

     6?4 MSISR寄存器

    Bits

    定义

    描述

    0~23

     

    保留。

    24~31

    Sn

    该字段由8位组成,每一位与一个MSIR0~7寄存器对应。该位为0时表示在MSIRn寄存器中没有有效位,即没有中断请求;该位为1时表示MSIRn寄存器中至少有一个有效位,即存在中断请求。Sn位是MSIRn寄存器各个位的“与”,当MSIRn寄存器的相应位清除时,Sn也将被清除。

     

    4 MSIVPR寄存器组

    MSIVPR(Shared Message Signaled Interrupt Vector/Priority Register)寄存器组由8个寄存器组成,分别为MSIVPR0~7寄存器。该组寄存器设置对应中断请求的优先级别和中断向量。其中每个MSIVPR寄存器对应一个MSIR寄存器,MSIVPR寄存器各字段的详细解释如6?5所示。

     6?5 MSIVPR寄存器

    Bits

    定义

    描述

    0

    MSK

    该位为0,且MSIR寄存器的对应位为1时,则将向中断控制器提交中断请求;如果为1屏蔽该中断请求。

    1

    A

    该位为0时,表示MPIC中断控制器没有处理该中断请求;该位为1时,表示MPIC中断控制器正在处理该中断请求,或者该中断控制器准备处理该中断请求,这个中断请求将在IPR(Interrupt Pending Regsiter)寄存器中排队等待处理,或者在ISR(Interrupt Service Register)寄存器中正在被处理。该位的详细描述见MPC8572的数据手册。

    12~15

    PRIORITY

    OpenPICMPIC中断控制器中为每一个中断请求设置了0~15,共16个优先级。其中1的优先权最低,15的优先权最高,0表示禁止中断请求。

    16~31

    VECTOR

    该字段存放该中断的中断向量。当处理器读取IACK寄存器时,将获得对应中断请求的中断向量。

     

    通过该组寄存器可以发现,在MPC8572处理器系统中,PCIe设备最多可以使用8个中断向量,并可以共享这些中断向量。

    5 MSIDR寄存器组

    MSIDR(Shared Message Signaled Interrupt Destination Registers)寄存器组共由8个寄存器组成,分别为MSIDR0~7。其中每一个MSIDRn寄存器对应一个MSIR寄存器。

    MPIC中断控制器支持Pass-through方式,在这种方式下,PowerPC处理器可以使用外部中断控制器处理中断请求(这种方法极少使用),而不使用内部中断控制器。MPIC中断控制器可以使用cint#int#信号提交中断请求,但是绝大多数系统软件都使用int#信号向处理器提交中断请求。

    此外在MPC8572处理器中有两个CPU,分别为CPU0CPU1MSI机制提交的中断请求可以由CPU0或者CPU1处理。系统软件可以通过设置MSIDRn寄存器完成这些功能,该寄存器各字段的详细描述如6?6所示。

     6?6 MSIDRn寄存器

    Bits

    定义

    描述

    0

    EP

    1时,表示中断请求输出到IRQ_OUT由外部中断控制器处理;为0时,表示由MPIC中断控制器处理。

    1

    CI0

    1时,表示中断控制器使用cint#信号向CPU0提交中断请求。

    2

    CI1

    1时,表示中断控制器使用cint#信号向CPU1提交中断请求。

    30

    P1

    1时,表示中断控制器使用int#信号向CPU0提交中断请求。

    31

    P0

    1时,表示中断控制器使用int#信号向CPU1提交中断请求。

     

    6.2.2 系统软件如何初始化PCIe设备的MSI Capability结构

    如果PCIe设备支持MSI机制,系统软件首先设置该设备MSI Capability结构的Message AddressMessage Data字段。如果该PCIe设备支持64位地址空间,即MSI Capability寄存器的64 bit Address Capable位有效时,系统软件还需要设置Message Upper Address字段。系统软件完成这些设置后,将置MSI Cabalibities结构的MSI Enable位有效,使能该PCIe设备的MSI机制。

    其中Message Address字段所填写的值是MSIIR寄存器在PCI总线域中的物理地址。在PowerPC处理器中,PCI总线域与存储器域地址空间独立,当PCIe设备访问存储器域的地址空间时,需要通过Inbound寄存器组将PCI总线域地址空间转换为存储器域地址空间。

    PowerPC处理器中,PCIe设备使用MSI机制访问MSIIR寄存器时,可以不使用Inbound寄存器组进行PCI总线地址到处理器地址的转换。在MPC8572处理器中,专门设置了一个PEXCSRBAR窗口[2],进行PCI总线域到存储器域的地址转换,使用这种方法可以节省Inbound寄存器窗口,Linux PowerPC使用了这种实现方式。

    MPC8572处理器中,MSIIR寄存器的基地址为CCSRBAR[3](Configuration, Control, and Status Base Address Register),其偏移为0x1740。为支持MSI中断机制,系统软件需要使用PEXCSRBAR窗口将MSIIR寄存器映射到PCI总线域地址空间,即将CCSRBAR寄存器空间映射到PCI总线域地址空间。之后PCIe设备就可以通过MSIIR寄存器在PCI总线域的地址访问MSIIR寄存器。

    Linux PowerPC使用setup_pci_pcsrbar函数[4]设置PEXCSRBAR窗口,该函数的源代码在./arch/powerpc/sysdev/fsl_pci.c文件中,如源代码6?1所示,这段代码来自Linux 2.6.30.5

     源代码6?1 setup_pci_pcsrbar函数

    static void __init setup_pci_pcsrbar(struct pci_controller *hose)

    {

    #ifdef CONFIG_PCI_MSI

        phys_addr_t immr_base;

     

        immr_base = get_immrbase();

        early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, immr_base);

    #endif

    }

     

    系统软件除了需要设置PCIe设备的Message Address字段和PEXCSRBAR窗口之外,还需要设置PCIe设备的Message Data字段。PCIe设备向MSIIR寄存器进行存储器写操作的数据存放在Message Data字段中。

    系统软件在初始化Message Data字段之前,首先根据Multiple Message Capable字段预先存放的数据初始化Multiple Message Enable字段。一个PCIe设备最多可以申请32个中断请求,但是系统软件根据当前处理器系统的中断资源的使用情况,决定给这个PCIe设备提供多少个中断向量,并将这个结果存放到Multiple Message Enable字段。

    MPC8572处理器最多可以为PCIe设备提供256MSI中断请求。但是在某些极端的情况下,可能会出现PCIe设备需要的中断请求超过系统所能提供的中断请求。此时某些PCIe设备的Multiple Message Enable字段可能会小于Multiple Message Capable字段。

    如果在PCIe设备中,使用了多个中断请求,那么Message Data字段存放的是一组中断向量号,而Message Data字段存放这组中断向量号的基地址。MSI机制要求“这组数据”连续,其范围在Message Data~Message Data+Multiple Message Enable-1之间。在多数情况下,MPC8572处理器系统仅为一个PCIe设备分配1个中断向量号。

    由上所述,在MPC8572处理器系统中,PCIe设备使用存储器写TLP传送MSI中断报文,这个存储器写TLP使用的地址为PCIe设备Capability结构的Message Address字段,而数据为Message Data~Message DataMultiple Message Enable-1之间。其中Message Data字段与MSIIR寄存器要求的格式相同。

    这个特殊的存储器写TLP报文通过若干Switch,并穿越RC后,最终将数据写入MSIIR寄存器中,并设置MSIIR寄存器的SRSIBS字段,同时将使能MSIR0~MSIR7寄存器的相应位,从而向中断控制器提交中断请求(如果MSIVPR寄存器的MSK位为1)MPIC中断控制器获得该中断请求后,向处理器系统转发这个中断请求,并由处理器系统执行相应的中断服务例程进行中断处理。MPC8572处理器也可以处理PCIe设备的MSI-X中断机制,本节对此不做进一步介绍。


    [1] PowerPC处理器中含有许多模块,如千兆以太网、ATM等,这些模块包含在芯片内部,由这些内部模块发起的中断请求,被称为内部中断请求。

    [2] 该窗口的大小为1MB,其基地址由PEXCSRBAR寄存器确定。

    [3] Linux PowerPC中使用immr_base变量保存该寄存器。IMMR寄存器是PQ2处理器使用的寄存器,该寄存器在PQ3之后的处理器中升级为CCSRBAR

    [4] 该函数来自Linux 2.6.30.5内核。

    展开全文
  • x86处理器如何处理MSI-X中断请求

    千次阅读 2014-03-25 22:29:16
    --------------- ...PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据。只是MSI-X中断机制为了支持更多的中断请求,在MSI-X Capablit

    原文网址:http://blog.sina.com.cn/s/blog_6472c4cc0102dskl.html

    ---------------

    PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据。只是MSI-X中断机制为了支持更多的中断请求,在MSI-X Capablity结构中存放了一个指向一组Message Address和Message Data字段的指针,从而一个PCIe设备可以支持的MSI-X中断请求数目大于32个,而且并不要求中断向量号连续。MSI-X机制使用的这组Message Address和Message Data字段存放在PCIe设备的BAR空间中,而不是在PCIe设备的配置空间中,从而可以由用户决定使用MSI-X中断请求的数目。

    当系统软件初始化PCIe设备时,如果该PCIe设备使用MSI-X机制传递中断请求,需要对MSI-X Capability结构指向的Message Address和Message Data字段进行设置,并使能MSI-X Enable位。x86处理器在此处的实现与PowerPC处理器有较大的不同。

    6.3.1 Message Address字段和MessageData字段的格式

    在x86处理器系统中,PCIe设备也是通过向Message Address写入Message Data指定的数值实现MSI/MSI-X机制。在x86处理器系统中,PCIe设备使用的Message Adress字段和Message Data字段与PowerPC处理器不同。

    1 PCIe设备使用Message Adress字段

    在x86处理器系统中,PCIe设备使用的Message Address字段仍然保存PCI总线域的地址,其格式如图6‑7所示。


    6.3 <wbr>x86处理器如何处理MSI-X中断请求


    其中第31~20位,存放FSB Interrupts存储器空间的基地址,其值为0xFEE。当PCIe设备对0xFEEX-XXXX这段“PCI总线域”的地址空间进行写操作时,MCH/ICH将会首先进行“PCI总线域”到“存储器域”的地址转换,之后将这个写操作翻译为FSB总线的Interrupt Message总线事务,从而向CPU内核提交中断请求。

    x86处理器使用FSB Interrupt Message总线事务转发MSI/MSI-X中断请求。使用这种方法的优点是向CPU内核提交中断请求的同时,提交PCIe设备使用的中断向量,从而CPU不需要使用中断响应周期从寄存器中获得中断向量。FSB Interrupt Message总线事务的详细说明见下文。

    Message Address字段其他位的含义如下所示。

    • DestinationID字段保存目标CPU的ID号,目标CPU的ID与该字段相等时,目标CPU将接收这个Interrupt Message。FSB Interrupt Message总线事务可以向不同的CPU提交中断请求。
    • RH(Redirection HintIndication)位为0时,表示Interrupt Message将直接发向与Destination ID字段相同的目标CPU;如果RH为1时,将使能中断转发功能。
    • DM(DestinationMode)位表示在传递优先权最低的中断请求时,Destination ID字段是否被翻译为Logical或者Physical APIC ID。在x86处理器中APIC ID有三种模式,分别为Physical、Logical和Cluster ID模式。
    • 如果RH位为1且DM位为0时,Destination ID字段使用Physical模式;如果RH位为1且DM位为1,Destination ID字段使用Logical模式;如果RH位为0,DM位将被忽略。

    以上这些字段的描述与x86处理器使用的APIC中断控制器相关。对APIC的详细说明超出了本书的范围,对此部分感兴趣的读者请参阅Intel 64 and IA-32 Architectures Software Developer’sManual Volume 3A: System Programming Guide, Part1。

    2 Message Data字段

    Message Data字段的格式如图6‑8所示。


    6.3 <wbr>x86处理器如何处理MSI-X中断请求


    Trigger Mode字段为0b0x时,PCIe设备使用边沿触发方式申请中断;为0b10时使用低电平触发方式;为0b11时使用高电平触发方式。MSI/MSI-X中断请求使用边沿触发方式,但是FSB Interrupt Message总线事务还支持Legacy INTx中断请求方式,因此在Message Data字段中仍然支持电平触发方式。但是对于PCIe设备而言,该字段为0b0x。

    Vector字段表示这个中断请求使用的中断向量。FSB Interrupt Message总线事务在提交中断请求的同时,将中断向量也通知给处理器。因此使用FSB Interrupt Message总线事务时,处理器不需要使用中断响应周期通过读取中断控制器获得中断向量号。与PowerPC的传统方式相比,x86处理器的这种中断请求的效率较高[①]

    值得注意的是,在x86处理器中,MSI机制使用的Message Data字段与MSI-X机制相同。但是当一个PCIe设备支持多个MSI中断请求时,其Message Data字段必须是连续的,因而其使用的Vector字段也必须是连续的,这也是在x86处理器系统中,PCIe设备支持多个MSI中断请求的问题所在,而使用MSI-X机制有效避免了该问题。

    Delivery Mode字段表示如何处理来自PCIe设备的中断请求。

    • 该字段为0b000时,表示使用“Fixed Mode”方式。此时这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b001时,表示使用“Lowest Priority”方式。此时这个中断请求将被优先权最低的CPU处理。当使用“Fixed Mode”和“Lowest Priority”方式时,如果Vector字段有效,CPU接收到这个中断请求之后,将使用Vector字段指定的中断向量处理这些中断请求;而当Delivery Mode字段为其他值时,Message Data字段中所包含的Vector字段无效。
    • 该字段为0b010时,表示使用SMI方式传递中断请求,而且必须使用边沿触发,此时Vector字段必须为0。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b100时,表示使用NMI方式传递中断请求,而且必须使用边沿触发,此时Vector字段和Trigger字段的内容将被忽略。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b101时,表示使用INIT方式传递中断请求,Vector字段和Trigger字段的内容将被忽略。这个中断请求将被Destination ID字段指定的CPU处理。
    • 该字段为0b111时,表示使用INTR信号传递中断请求且使用边沿触发。此时MSI中断信息首先传递给中断控制器,然后中断控制器在通过INTR信号向CPU传递中断请求,之后CPU在通过中断响应周期获得中断向量。上文中PowerPC处理器使用的方法与此方法类似。而在x86处理器中多使用Interrupt Message总线事务进行MSI中断信息的传递,因此这种模式很少被使用。

    边沿触发和电平触发是中断请求常用的两种方式。其中电平触发指外部设备使用逻辑电平1(高电平触发)或者0(低电平触发),提交中断请求。使用电平或者边沿方式提交中断请求时,外部设备一般通过中断线(IRQ_PIN#)与中断控制器相连,其中多个外部设备可能通过相同的中断线与中断控制器相连(线与或者与门)。

    外部设备在使用低电平触发,提交中断请求的过程中,首先需要将IRQ_PIN#信号驱动为低。当中断控制器将该中断请求提交给处理器,而且处理器将这个中断请求处理完毕后,处理器将通过写外部设备的某个寄存器来清除此中断源,此时外部设备将不再驱动IRQ_PIN#信号线,从而结束整个中断请求。

    IRQ_PIN#信号线可以被多个外部设备共享,在这种情况之下,只有所有外部设备都不驱动IRQ_PIN#信号线时,IRQ_PIN#信号才为高电平。采用电平触发方式进行中断请求的优点是不会丢失中断请求,而缺点是一个优先权较高的中断请求有可能会长期占用中断资源,从而使其他优先权较低的中断不能被及时提交。因为优先级别较高的中断源有可能会持续不断地驱动IRQ_PIN#信号。

    而边沿触发使用上升沿(0到1)或者下降沿(1到0)作为触发条件,但是中断控制器并不是使用这个“边沿”作为触发条件。中断控制器使用内部时钟对IRQ_PIN#信号进行采样,如果在前一个时钟周期,IRQ_PIN#信号为0,而后一个时钟周期,IRQ_PIN#信号为1,中断控制器认为外部设备提交了一个有效“上升沿”,中断控制器会锁定这个“上升沿”并向处理器发出中断请求。这也是外部设备至少需要将IRQ_PIN#信号保持一个时钟采样周期的原因,否则中断控制器可能无法识别本次边沿触发的中断请求,从而产生Spurious中断请求。

    外部设备使用“上升沿”进行中断申请时,不需要持续地将IRQ_PIN#信号驱动为1,而只需要保证中断控制器可以进行正确采样这些中断信号即可。在处理边沿触发中断请求时,处理器不需要清除中断源。

    使用边沿触发可以有效避免“优先级别”较高的中断源长期占用IRQ_PIN#信号的情况,使用“下降沿”触发进行中断请求与“上升沿”触发类似。

    但是外部设备使用边沿触发方式时,有可能会丢失一些中断请求。例如在一个处理器系统中,存在一个定时器,这个定时器使用上升沿触发方式向中断控制器定时提交中断。如果当处理器正在处理这个定时器的上一个中断请求时,将不会处理这个定时器发出的其他“边沿”中断请求,从而导致中断丢失。而使用电平触发方式不会出现这类问题,因为电平触发方式是一个“持续”过程,处理器只有处理完毕当前中断,并清除相应中断源之后,才会处理下一个中断源。

    MSI中断请求实际上和边沿触发方式非常类似,MSI中断请求通过存储器写TLP实现,这个写动作是一个瞬间的动作,并不是一个持续请求,因此在x86处理器中MSI中断请求使用边沿触发进行中断请求。

    还有一些外部设备可以通过I/OAPIC进行中断请求[②],这些I/O APIC接收的外部中断需要标明是使用边沿或者电平触发,I/O APIC使用FSB Interrupt Message总线事务将中断请求发向Local APIC,并由Local APIC向处理器提交中断请求。

    6.3.2 FSB InterruptMessage总线事务

    与MPC8572处理器处理MSI中断请求不同,x86处理器使用FSB的Interrupt Message总线事务,处理PCIe设备的MSI/MSI-X中断请求。由上文所示,MPC8572处理器处理MSI中断请求时,首先由MPIC中断控制器截获这个MSI中断请求,之后由MPIC中断控制器向CPU提交中断请求,而CPU通过中断响应周期从MPIC中断控制器的ACK寄存器中获得中断向量。

    采用这种方式的主要问题是,当一个处理器中存在多个CPU时,这些CPU都需要通过中断响应周期从MPIC中断控制器的ACK寄存器中获得中断向量。在一个中断较为密集的应用中,ACK寄存器很可能会成为系统瓶颈。而采用Interrupt Message总线事务可以有效地避免这种系统瓶颈,因为使用这种方式中断信息和中断向量将同时到达指定的CPU,而不需要使用中断响应周期获得中断向量。

    x86处理器也具有通过中断控制器提交MSI/MSI-X中断请求的方法,在I/O APIC具有一个“The IRQ Pin AssertionRegister”寄存器,该寄存器地址为0xFEC00020[③],其第4~0位存放IRQ Number。系统软件可以将PCIe设备的Message Address寄存器设置为0xFEC00020,将Meaasge Data寄存器设置为相应的IRQ Number。

    当PCIe设备需要提交MSI中断请求时,将向PCI总线域的0xFEC00020地址写入Message Data寄存器中的数据。此时这个存储器写请求将数据写入I/O APIC的The IRQ Pin Assertion Register中,并由I/O APIC将这个MSI中断请求最终发向Local APIC,之后再由Local APIC通过INTR#信号向CPU提交中断请求。

    上述步骤与MPC8572处理器传递MSI中断的方法类似。在x86处理器中,这种方式基本上已被弃用。下文以图6‑9为例,说明x86处理器如何使用FSB总线的Interrupt Message总线事务,向CPU提交MSI/MSI-X中断请求。


    6.3 <wbr>x86处理器如何处理MSI-X中断请求


    PCIe设备在发送MSI/MSI-X中断请求之前,系统软件需要合理设置PCIe设备MSI/MSI-X Capability寄存器,使Message Address寄存器的值为0xFEExx00y[④],同时合理地设置Message Data寄存器Vector字段。

    PCIe设备提交MSI/MSI-X中断请求时,需要向0xFEExx00y地址写Message Data寄存器中包含的数据,并以存储器写TLP的形式发送到RC。如果ICH收到这个存储器写TLP时,将通过DMI接口将这个TLP提交到MCH。MCH收到这个TLP后,发现这个TLP的目的地址在FSB Interrupts存储器空间中,则将PCIe总线的存储器写请求转换为Interrupt Message总线事务,并在FSB总线上广播。

    FSB总线上的CPU,根据APIC ID信息,选择是否接收这个Interrupt Message总线事务,并进入中断状态,之后该CPU将直接从这个总线事务中获得中断向量号,执行相应的中断服务例程,而不需要从APIC中断控制器获得中断向量。与PowerPC处理器的MPIC中断控制器相比,这种方法更具优势。

    6.4 小结

    本章详细描述了MSI/MSI-X中断机制的原理,并以PowerPC和x86两个处理器系统为例说明这两种中断机制实现机制。本章因为篇幅有限,并没有详细讲述这两个处理器使用的中断控制器。而理解这些中断控制器的实现机制是进一步理解MSI/MSI-X中断机制的要点。对此部分有兴趣的读者可以继续阅读MPIC中断控制器和APIC中断控制器的实现机制,以加深对MSI/MSI-X中断机制的理解。

    设备的中断处理是局部总线的设计难点和重要组成部分,而中断处理的效率直接决定了局部总线的数据传送效率。在一个处理器系统的设计与实现中,中断处理的优化贯彻始终。




    [①] P4080处理器也提供了一种类似于FSB Interrupt Message总线事务的中断请求方法。

    [②] 与I/OAPIC的IRQX#引脚链接的外部设备。

    [③] 该寄存器在存储器域和PCI总线域中的地址都为0xFEC00020。

    [④] 其中xx表示APIC ID,而y为RH+DM。


    展开全文
  • 程序中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,...
  • 8237dma的四种传送方式简介

    千次阅读 2018-01-05 11:07:23
    8237A有四种工作方式:单字节传送、数据块传送、请求传送和多片级联。  (1)单字节传送(single mode)  单字节传送方式是每次DMA传送时,仅传送一个字节。传送一个字节之后,当前字节计数器减1,地址寄存器加1或...
  • 中断方式与轮询方式

    千次阅读 2010-08-13 14:41:11
    中断方式与轮询方式 中断的基本概念 ...二、80x86微处理器的中断 80x86微处理器的中断类型一般分为2类,即由于执行某些指令引起的软中断和由处理器以外其他控制电路发出中断请求信号引起的硬中断。 CPU要从主...
  • I/O方式 —— 程序中断方式

    千次阅读 多人点赞 2019-09-01 12:06:01
    中断请求:中断源向CPU发送中断请求信号。 中断判优:多个中断源同时提出请求时,通过中断判优逻辑响应一个中断源。 中断响应及中断隐指令。 中断向量:中断服务程序寻址 执行中断服务程序 步骤一:中断请求 (1...
  • 中断方式与轮询方式比较

    千次阅读 2014-09-12 09:32:57
    中断的基本概念 ...二、80x86微处理器的中断 80x86微处理器的中断类型一般分为2类,即由于执行某些指令引起的软中断和由处理器以外其他控制电路发出中断请求信号引起的硬中断。 CPU要从主程序转入中断服务程序
  • 中断和轮询的方式

    千次阅读 2016-12-25 13:04:57
    中断方式与轮询方式 ...二、80x86微处理器的中断 80x86微处理器的中断类型一般分为2类,即由于执行某些指令引起的软中断和由处理器以外其他控制电路发出中断请求信号引起的硬中断。 CPU要从主程
  • 程序查询方式的流程 1.测试指令,用来查询I/O设备是否准备就绪 2.传送指令,当I/O设备已准备就绪时,执行传送指令。 3.转移指令,若I/O设备未准备就绪,...但是设备如果要提出中断请求,其设备本身必须准备就绪,即
  • 程序方式: 指用输入/输出指令,来控制信息传输的方式,是一种软件控制方式,根据程序控制的方法不同,又...当外设准备好时,由外设通过接口电路向CPU发出中断请求信号,CPU在允许的情况下,暂停执行当前正在执行的程
  • 【计算机基础】CPU与外设传送方式

    千次阅读 2019-08-30 18:16:36
    在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下。7.2.1 程序传送方式 程序传送方式是指直接在程序控制下进行数据的输入/输出操作。...
  • 7.4.2 程序中断方式

    千次阅读 2016-09-22 17:21:05
    程序中断是指在计算机执行现行程序的过场中,出现某些急需处理的异常情况或特殊请求,CPU暂停中断现行程序,而专区对这些异常情况或特殊情况进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序...
  • CPU与外设之间的数据传送方式

    万次阅读 2018-01-02 15:49:32
    在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下。 7.2.1 程序传送方式 程序传送方式是指直接在程序控制下进行数据的输入/输出...
  • 中断I/O控制方式和DMA

    2018-11-29 15:49:00
    中断方式:要求为每个外设分配一个中断请求号和针对此设备的中断程序,此外还需要一个中断控制器来管理外设提出的各种中断请求,例如,能传送申请中断的设备的地址信息以识别需要服务的外设的类...
  • CPU与I/O设备的数据传送方式

    千次阅读 2021-05-05 17:40:15
    三种数据传送方式2.1 程序查询方式2.2 程序中断方式2.3 DMA控制方式 1. 基本概念 1. I/O接口 计算机工作过程中,CPU要不断地和I/O设备进行信息交换。CPU和主存可以直接进行信息交换;而CPU与I/O设备不可以直接进行...
  • DMA与普通中断方式的区别

    万次阅读 2016-06-30 22:46:04
    普通中断方式是在数据缓冲寄存器满后,发中断请求,CPU进行中断处理 DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,大大减少了CPU进行中断处理的次数 总结:DMA方式不...
  • CPU与外设传送数据方式

    千次阅读 2014-04-28 16:30:00
    在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下。7.2.1 程序传送方式程序传送方式是指直接在程序控制下进行数据的输入/输出操作。...
  • 计算机组成原理之中断方式

    千次阅读 2019-10-18 16:33:58
    首先要了解非门和与非门: 非门: ...1. 配置中断请求触发器和中断屏蔽触发器 INTR:中断请求触发器 INTR = 1 时发出中断请求 MASK:中断屏蔽触发器 MASK 的Q端 = 1 时被屏蔽 D:完成触发器...
  • 主要内容有:外部设备的分类、输入输出设备的分配算法、外部设备和CPU之间的数据传送控制方式(程序直接控制方式中断控制方式、DMA方式和通道方式)和设备驱动程序等。 1、设备管理的任务 (1) 按用户需求提出的...
  • 中断和轮询方式比较

    万次阅读 2016-08-26 09:30:00
    中断的基本概念 ...二、80x86微处理器的中断 80x86微处理器的中断类型一般分为2类,即由于执行某些指令引起的软中断和由处理器以外其他控制电路发出中断请求信号引起的硬中断。 CPU要从主程序转入中断服务程序
  • (1)程序查询、程序中断方式的数据传送主要依赖软件,DMA 主要依赖硬件。 (2)程序查询、程序中断传送数据的基本单位为字或字节,DMA 为数据块。...程序中断及 DMA 方式时CPU被动接受 I/O 中断请求
  • STM32 DMA方式中断方式查询的区别

    千次阅读 2018-10-24 16:38:59
    要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。  2: 中断传送 是由CPU通过中断服务程序来传送,每次要...
  • 前言 输入输出信息传送控制方式是指主机与I/O设备之间的信息传送。 程序直接传送方式 程序直接传送方式是指完全...程序中断传送方式 在程序直接传送方式中,CPU需要不断地查询外设的状态。这显然是浪费的,所以我...
  • 中断传送方式 直接存器存取方式(DMA) I/O 通道方式 I/O 处理机方式 本章只介绍,前四种 1 程序控制方式 1.1 无条件传送方式 工作过程 输入时输入设备数据准备好 输出时输出设备空闲 所带来的问题:不知道外设...
  • 文章目录一、程序查询方式二、程序中断方式三、DMA方式 一、程序查询方式 1、程序查询方式的接口电路 2、符号说明 &与非门 B工作触发器 D完成触发器 3、程序查询工作过程(输入) (1)当CPU通过I/O指令启动...
  • DMA是l/O设备与主存之间由硬件组成的直接数据通路,主要用于高速I/O设备与主存之间的成组数据传送。(外设快、慢了没意义。然后数据多,少了也没多大...外设向cpu发出中断请求,cpu响应中断后进行数据传输。但是如...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,427
精华内容 23,770
关键字:

中断请求线的传送方式