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