版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、同濟大學《操作系統(tǒng)》UNIX中斷中斷處理過程處理過程源代碼分析源代碼分析1.PDP11中斷類型與中斷向量中斷類型與中斷向量PDP11對各種中斷設置不同的處理程序入口。當處理機對某個設備的中斷請求作出響應后,首先應獲取下列兩種信息:相應中斷處理程序的入口地址;中斷處理時處理機的狀態(tài)字。PDP11將這兩種信息組合起來,稱其為中斷矢量(interruptvect)。所有設備的中斷矢量都集中存放在總線地址最低部分的內(nèi)存中。表1中列出了主要設備的
2、中斷矢量以及它們所在的總線請求級。表1:外部設備的中斷矢量和總線請求等級外部設備名外部設備名中斷矢量地址中斷矢量地址中斷處理程序地址中斷處理程序地址新處理機狀態(tài)字新處理機狀態(tài)字總線請求級總線請求級設備處理子程序設備處理子程序電傳輸入060kilnbr44klrint電傳輸出064kloubr44klxint紙帶輸入070pcinbr44pcrint紙帶輸出074pcoubr44pcpint線頻時鐘100kwlpbr66clock程序時鐘
3、104kwlpbr66clock行式打印機200lpoubr44lpintRK磁盤220rkiobr55rkintr表1中各中斷矢量的定義在low.s文件中,如下所示。0525.=60^.以下內(nèi)容寫入60開始的內(nèi)存單元0526klinbr40527kloubr405280529.=70^.0530pcinbr40531pcoubr405320533.=100^.0534kwlpbr60535kwlpbr605360537.=114^.0
4、538trapbr77.1170parity05390540.=200^.0541lpoubr405420543.=220^.0544rkiobr5由上述代碼可以看出,在PDP11的內(nèi)存低地址部分,中斷向量的分布如圖1所示。2.中斷響應過程中斷響應過程UNIX中斷響應過程分為三個部分,分別是:中斷隱指令(硬件完成)、中斷現(xiàn)場保護與恢復(匯編指令)、設備處理子程序部分(C語言)。下面將分別闡述這三部分的詳細過程。2.1.中斷隱指令中斷隱指
5、令CPU響應中斷后,首先由硬件完成一部分現(xiàn)場保護的工作,其具體內(nèi)容及流程如圖2所示。中斷隱指令執(zhí)行結束后,由于PC中的值為中斷處理程序的地址,則下一個時鐘周期開始,CPU轉(zhuǎn)去執(zhí)行中斷處理程序。同濟大學《操作系統(tǒng)》2.2.UNIX現(xiàn)場保護與恢復過程現(xiàn)場保護與恢復過程表1中所列的UNIXV6中所有的中斷處理程序只包含一條跳轉(zhuǎn)指令,代碼如下所示(位于low.s文件中)。可以看出,中斷處理程序的代碼都很類似,都是由一條jsr指令和隨后的函數(shù)入口
6、地址組成(此時,兩條指令放在同一行時,使用分號隔開,但這里第二句代碼并不是指令,而只是一個函數(shù)地址)。這兩句代碼的含義是:r0的值被壓入棧,pc的值(即:第二句中的函數(shù)地址)存入r0,call函數(shù)的入口地址放入pc。這樣,下一個時鐘周期,程序?qū)⑻D(zhuǎn)到一段入口地址為call的匯編指令。05510552interfacecodetoC055305540555.globlcalltrap05560557.globl_klrint0558kli
7、n:jsrr0call_klrint05590560.globl_klxint0561klou:jsrr0call_klxint05620563.globl_pcrint0564pcin:jsrr0call_pcrint05650566.globl_pcpint0567pcou:jsrr0call_pcpint05680569.globl_clock0570kwlp:jsrr0call_clock057105720573.globl_l
8、pint0574lpou:jsrr0call_lpint05750576.globl_rkintr0577rkio:jsrr0call_rkintr0578入口地址為call的這段匯編指令用于完成中斷現(xiàn)場保護、轉(zhuǎn)去執(zhí)行設備處理子程序及中斷返回前恢復現(xiàn)場的工作。這段匯編指令代碼位于文件m40.s中,具體代碼及程序流程圖如下所示。0776call:0777movPS(sp)新ps的值壓入棧07781:0779movr1(sp)r1的值壓入棧
9、0780mfpisp先前態(tài)的sp壓入當前棧頂0781mov4(sp)(sp)將0777語句壓入棧的新ps的值再次壓入棧(注(注1)0782bic$!37(sp)除最后五位,其他位皆清0,即dev0783bit$30000PS中斷前是否為用戶態(tài)0784beq1f如果前態(tài)為核心態(tài),跳轉(zhuǎn)到07970785jsrpc(r0)前態(tài)為用戶態(tài),轉(zhuǎn)去執(zhí)行r0指向的中斷服務子程序07862:0787bis$340PS處理機優(yōu)先級設為7,關中斷0788ts
10、tb_runrun檢測runrun標志0789beq2f如果runrun未設置,跳轉(zhuǎn)到07930790bic$340PS如果runrun設置,開中斷0791jsrps_swtch轉(zhuǎn)去執(zhí)行swtch0792br2bswtch返回后,跳轉(zhuǎn)到078607932:0794tst(sp)刪除棧頂元素:dev0795mtpisp前態(tài)為用戶態(tài),恢復先前態(tài)sp0796br2f跳轉(zhuǎn)到080107971:0798bis$30000PS先前態(tài)改為用戶態(tài)(注(
11、注2)0799jsrpc(r0)轉(zhuǎn)去執(zhí)行r0指向的中斷服務子程序0800cmp(sp)(sp)刪除兩個棧頂元素:dev和先前態(tài)sp08012:0802mov(sp)r1恢復r10803tst(sp)刪除棧頂元素:新ps0804mov(sp)r0恢復r00805rtt中斷返回(注(注3)注1:mov4(sp)(sp)指令中,源操作數(shù)采用索引模式的尋址方式,即源操作數(shù)位于sp指向的內(nèi)存單元向高地址方向加上4個字節(jié)(2個字)的單元中(此處即為
12、新PS,0777行語句處壓棧);而目的操作數(shù)采用自增減的尋址方式,即先將sp的值減去1(由于棧是以字為單位組織的,所以此處實際sp向低地址方向運動了2個字節(jié),即1個字的長度),此時sp指向目的操作數(shù)地址。注2:設置先前態(tài)為用戶態(tài),然后再跳轉(zhuǎn)到中斷處理程序的C語言部分運行。這里設置先前態(tài)為用戶態(tài),主要針對中斷中需要從內(nèi)核空間向用戶空間寫數(shù)據(jù),或者從用戶空間讀取數(shù)據(jù)到內(nèi)核空間的情況。上述兩種情況中使用到的mfpi和mtpi指令在硬件上要求先
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論