当咱们在操作电脑时,很多事情在同时出现,磁盘在飞速读写,网络在收发信息,而你也往往开了不少个义务在同时运转。这些能够出现,终止系统表演了关键角色。在终止系统出现之前,人们(那时都是计算机专家)往往要等上一个义务完结能力启动下一个义务,这在当天是不能构想的。理想上终止系统出现的很早,Intel的传奇终止管理芯片8259在1976年就被用在8085系列产品中。PC在1981年出世时自创了这种思维,8259的更新版8259A被用于终止管理,而其统治PC长达近10年,直到486电脑的降生!
1。PIC时代
PIC(ProgrammableInterruptController)就是咱们的8259A,让咱们来瞻仰一下它的样子:
其中最关键的管脚是IR0~IR7,也就是能相应8个终止。前期因为终止无余,被裁减为级联的方式,如图:
分为主和从两块8259,这样咱们就有了16-1=15个终止源。8259不时上班的很好,终止假设还不够咱们还可以经过终止共享或许再多级联几个8259,就可处置疑问,直到多CPU的出现。这时刻疑问出现了,咱们的主8259究竟衔接哪个CPU好呢?这是个大疑问。
2。APIC来了
80486DX在1990年上市,其引入了SMP的概念,即多CPU(留意不是多核)。Intel为了顺应SMP提出APIC(AdvancedProgrammableInterruptController,初级终止管理器)的新技术。APIC由两局部组成,一个称为LAPIC(LocalAPIC,本地初级终止管理器),一个称为IOAPIC(I/OAPIC,I/O初级终止管理器)。前者位于CPU中,在SMP平台,每个CPU都有一个自己的LAPIC(前期多核后,每个逻辑核都有个LAPIC)。后者理论位于外部设施芯片上,例如南桥上。像PIC一样,衔接各个发生终止的设施。而IOAPIC和LAPIC经过APICBus衔接在一同。如图:
3。XAPIC,小小的改良
独自的3根线的APICbus给系统设计带来了不少困扰,在奔流4上其被敞开而由系统总线替代,其余则区别不大,新的示用意如下:
系统中的IOAPIC可以有很多,在北桥被并入CPU中后,甚至CPU中也有IOAPIC(同时有LAPIC,觉得好繁难)。这种架构极具伸缩性,被经常使用了很多年,直到核抗争的迸发。
核抗争,什么鬼?!其实是内核数目的抗争。Intel和AMD不时的参与内核的数目,加上SMT(HT)技术,内核数目不时回升。在主机上,至强CPU往往提供高达40到60个内核,假设是8路主机,内核总数目可以高达60×8=480个!即使实践没有这么多内核,虚构机技术的出现也往往成倍的须要虚构内核。而惟一标识CPU内核身份的APICID在APIC寄存器中却只要8位(其细分为多个域,这里略过),也就是最多可以有255个内核(1个保管做广播用)。APIC不够用了!Intel大手一挥,推出了X2APIC,把APICID从8位裁减为32个bit,这下可以允许4G-1(1个保管做广播用)个逻辑核,你们该满足了吧!顺便将原来略显怪异的MMIO访问方式变成MSR方式(后文具体引见)。
咱们如今的计算机简直都是用APIC方式处置终止的,咱们接上去看看他们是怎样上班的。
CPU在运转目前义务时,当有特意事情出现时,CPU应当暂停正在口头的程序,转向口头处置该事情的子程序;事情处置终了后,恢还原来的形态,再继续口头原来的程序。这种对这些事情的处置形式,称为程序终止(Interrupt)管理形式,简称终止管理或终止。这种处置紧急事情的服务子程序称为终止子程序。这种惹起终止的事情称为终止源。这些事情包含磁盘、键盘等等输入输入设施,意外失误的出现甚至另一个CPU的调用。
1。PIC形式
在PIC时代,外部终止源都要衔接到8259的IRQ引脚上,8259会经过INTR通知CPU出现了终止。这时OS或许BIOS的终止管理程序会审核谁出现了终止,从而调用相应的终止相应历程。其中的细节咱们这里就不细述了,其环节大略分为以下几步:
、一个或多个IR引脚被触发终止(脉冲或许边缘),若对应的终止没有被屏蔽,8259拉高INTR管脚通知CPU或上一级8259终止出现。
CPU经过INTA引脚照应8259,表示终止恳求收到。8259则将IRR中具备最高优先级位清零,并设置ISR中对应的位。在CPU收回终止查问脉冲后,8259将终止号提交到数据线上。
、终止号对应的终止向量处置程序被调用,OS或许BIOS终止处置程序开局处置终止,终了后写EOI并结尾。
在这样一个周期终了后,CPU继续处置之前的义务,像什么事也没有出现一样,普通用户甚至感触不到(实践上OS的终止处置例程有严厉的期间要求,处置过长会触发watchdog造成蓝屏)。
新鲜的PC留下了很多兼容性的疑问,很多新鲜的设施占据了少量终止源,如图:
如今谁还有这么多串口并口呢,还有键盘和FDD?可是为了向前兼容,这些IRQ都被保管而不能做它用,甚至在APIC形式也是这样。向前兼容真是个繁重的包袱!
留意这里终止是有优先级的,IRQ数字越小优先级就越高。
2。APIC形式
如前所述,APIC由两局部组成,一个称为LAPIC(LocalAPIC,本地初级终止管理器),一个称为IOAPIC(I/OAPCI,I/O初级终止管理器)。前者位于CPU中,在SMP平台,每个内核都有一个自己的LAPIC。后者理论位于外部设施芯片上,例如南桥上。典型的衔接相关如下图:
每个LAPIC都有自己惟一的APICID,每个IOAPIC也有自己惟一的ID。和PIC形式清楚的区别是衔接相关不再是配件连线而是经过message。IOAPIC外部有个PRT(ProgrammableRedirectionTable)表,外面的DestinationField标识了终止的目的地。在Physical形式下,含有指标APICID(Logical形式略)。在终止出现时,IOAPIC收到终止,会将终止转化为message放入系统总线,而CPU中只要APICID和DestinationField域中分歧的LAPIC才会处置这条终止。用于处置来自IOAPIC的终止信息的LAPIC内容就更多了,但最关键的寄存器还是IRR、ISR以及EOI。其流程和PIC相似,这里就不在详述了。OS如何处置咱们会在下一篇中引见。
值得一提的是,为了保障向前兼容性,Intel在1997年颁布的MultiProcessorSpecification(MPspec)中要求APIC提供PIC兼容形式或VirtualWireMode(虚构连线形式)。PIC形式如下图:
虚线代表了终止传递的环节,留意其中的IOAPIC被旁路了,而一个8259A的模拟配件(理论是南桥芯片内置)则起到作用,它衔接了CPU的INTR引脚。这样会对主板电路设计形成很多费事,而虚构连线形式则愈加经常出现,其如下图:
IOAPIC会将8259A模拟配件的信号放入ICCBus(后是系统总线),由LAPIC处置交给BSP,处置成果和原来一样而不要参与连线。
普通的PCI设施允许四个INTx,MSI(MessageSignaledInterrupts)在1999年随着PCI2.2规范被引入,在PCI3.0中提出了MSI-X。MSI允许32个终止,而MSI-X将其裁减到了2048个。当一个PCI设施想发送终止时,它会向其PCI性能空间Capability结构中的MessageAddress的地址(理论是0xFEExxxxx)写Message>微软在Vista后片面允许MSI和MSI-x,而Linux也早曾经允许MSI。
还有些杂项这里要特意说明一下
APICID并必定从0开局,数字也不必定延续,在任何中央的代码里都不能有这种假定。APICID可以被BIOS重置,但简直没有BIOS这样做。
2。IOAPICID
随着北桥被移入了CPU,一些北桥的除了内存管理器外其余的性能也被引入CPU。其中最关键的是PCIe的rootcomplex和一个至少x16的rootport用于衔接显卡。假设CPU内置的显卡,也会衔接到这个rootport上,所以Intel平台除了在南桥外,在CPU内也有IOAPIC。在一个4路的志强主机中就会有4+1=5个IOAPIC,每个IOAPIC有24个入口,就可以允许24*5=120个终止入口。
除了IOAPIC能发送终止信息外,内核的LAPIC也可以经过发送IPI(Inter-ProcessorInterrupts)的方式发送终止给其余的内核。这种方式是OS和BIOS调度CPU内核的基本方式。
1.那么关于多CPU的状况下,初始的APICID是谁来选择的呢?留意CPU可以调换。
2.IOAPIC都要有不同的ID,这些ID是谁给设置上去的呢?
BIOS培训云课堂:
终止体系其余文章:
欢迎大家关注本专栏和用微信扫描下方二维码参与微信群众号"UEFIBlog",在那里有最新的文章。
本文地址: https://yihaiquanyi.com/article/48a983aeb31927df61b5.html
上一篇:cpu风扇停转是什么原因CPU风扇停转后会发生...