資源描述:
《SMP結(jié)構(gòu)中的中斷機(jī)制和進(jìn)程調(diào)度》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Linux源代碼閱讀SMP結(jié)構(gòu)中的中斷機(jī)制和進(jìn)程調(diào)度張飛概要SMP結(jié)構(gòu)中的中斷機(jī)制分布式中斷處理中斷初始化處理器間中斷IPISMP結(jié)構(gòu)中的進(jìn)程調(diào)度分布式中斷處理APIC簡介SMP結(jié)構(gòu)中的中斷控制硬件機(jī)構(gòu)全局APIC本地APIC高級可編程中斷控制器APIC為了充分利用smp體系結(jié)構(gòu)的并行性,要求動(dòng)態(tài)分配中斷請求,也就是說可以向任意cpu發(fā)出中斷請求.傳統(tǒng)的i386處理器都采用8259A中斷控制器,其作用是提供多個(gè)外部中斷源與單一cpu之間的連接.如果在SMP結(jié)構(gòu)中還是采用8259A中斷控制器,那就只能靜態(tài)的把所有的外部中斷源劃分成若干組,分別把每一組都連接
2、到一個(gè)8259A,而8259A則與cpu有一對一的連接.這樣就達(dá)不到動(dòng)態(tài)分配中斷請求的目的.為了更好的支持smp結(jié)構(gòu),從Pentium開始,Intel設(shè)計(jì)了一種更為通用的中斷控制器,稱為高級可編程中斷控制器APIC(AdvancedProgrammableInterruptController).SMP結(jié)構(gòu)中的中斷控制硬件機(jī)構(gòu)cpu0本地APICcpu1本地APIC本地APICcpun全局APIC本地中斷請求本地中斷請求本地中斷請求ICC(中斷控制器通信)總線外部中斷請求分布式中斷處理硬件機(jī)制概述兩種APIC:本地APIC和全局APIC,通過中斷控制器通
3、信(InterruptControllerCommunication,ICC)總線相連.本地APIC集成在cpu內(nèi)部,通過內(nèi)部APIC可以向其他cpu發(fā)送中斷請求.全局APIC負(fù)責(zé)把來自外部設(shè)備的中斷請求提交和分配給系統(tǒng)中各個(gè)cpu的任務(wù).全局APIC組成全局APIC由一組IRQ線路,一個(gè)有24個(gè)表項(xiàng)的中斷重定向表(InterruptRedirectionTable),一個(gè)可編程寄存器和一個(gè)用來發(fā)送和接受經(jīng)過ICC總線的APIC消息的消息單元組成.和8259A的IRQ引腳不同,中斷優(yōu)先級和引腳號無關(guān),重定向表中的每個(gè)表項(xiàng)都可以被單獨(dú)編程來說明中斷向量和優(yōu)
4、先級,目標(biāo)處理器以及如何選定處理器.重定向表中的消息用來把外部IRQ信號轉(zhuǎn)換成通過ICC總線發(fā)往一個(gè)或多個(gè)本地APIC單元的消息.全局APIC工作模式固定模式把IRQ信號發(fā)送到相應(yīng)的重定向表表項(xiàng)所列出的本地APIC上.最低優(yōu)先級模式把IRQ信號發(fā)送到正在執(zhí)行優(yōu)先級最低的進(jìn)程的處理器的本地APIC上.所有的本地APIC都有一個(gè)可編程任務(wù)優(yōu)先級寄存器(taskpriorityregister),它包含了當(dāng)前正在運(yùn)行的進(jìn)程的優(yōu)先級.在每次任務(wù)切換時(shí)這個(gè)寄存器的值必須由內(nèi)核進(jìn)行修改.本地APIC組成每個(gè)本地APIC都有幾個(gè)32位的寄存器,一個(gè)內(nèi)部時(shí)鐘,一個(gè)定時(shí)器
5、設(shè)備,240個(gè)不同的中斷向量(從0x20~0xff,0~0x1f用于cpu本身的陷阱)以及兩條為局部中斷保留的IRQ線路,這兩條線路用于重啟系統(tǒng).本地APIC的一個(gè)重要功能是實(shí)現(xiàn)處理器間中斷IPI當(dāng)一個(gè)cpu想要向其他cpu發(fā)送中斷時(shí),將中斷向量和目標(biāo)處理器的本地apic標(biāo)志符保存到自己本地apic的中斷命令寄存器中,然后通過ICC總線向目標(biāo)處理器的本地apic發(fā)送一條消息,目標(biāo)處理器的本地apic就向自己的cpu發(fā)出相應(yīng)的中斷.SMP結(jié)構(gòu)中的中斷控制硬件機(jī)構(gòu)cpu0本地APICcpu1本地APIC本地APICcpun全局APIC本地中斷請求本地中斷請求
6、本地中斷請求ICC(中斷控制器通信)總線外部中斷請求概要SMP結(jié)構(gòu)中的中斷機(jī)制分布式中斷處理中斷初始化處理器間中斷IPISMP結(jié)構(gòu)中的進(jìn)程調(diào)度中斷初始化smp相關(guān)的幾個(gè)主要中斷向量設(shè)置中斷門中斷響應(yīng)程序的建立相關(guān)中斷處理程序代碼smp_reschedule_interrupt()smp_call_function_interrupt()smp相關(guān)的幾個(gè)主要中斷向量smp結(jié)構(gòu)專用的幾個(gè)IRQ向量定義在include/asm-i386/apic.h中#defineSPURIOUS_APIC_VECTOR0xff#defineERROR_APIC_VECTOR
7、0xfe#defineINVALIDATE_TLB_VECTOR0xfd#defineRESCHEDULE_VECTOR0xfc#defineCALL_FUNCTION_VECTOR0xfb#defineLOCAL_TIMER_VECTOR0xef其他不常用的向量合并到CALL_FUNCTION_VECTOR中以節(jié)省向量空間,使用比較頻繁的是TLB、reschedule和localAPIC中斷向量.設(shè)置中斷門void__initinit_IRQ(void){…for(i=0;i8、VECTOR+i;if(vector!=SYSCALL_VECTOR)set_i