孫悅,周洲
(北京聯(lián)合大學(xué)智慧城市學(xué)院,北京100101)
目前,操作系統(tǒng)原理課程的教學(xué),仍然是以四大管理功能為基礎(chǔ),即處理機(jī)管理、存儲(chǔ)器管理、設(shè)備管理和文件管理[1]。操作系統(tǒng)是中斷驅(qū)動(dòng)的,中斷技術(shù)對(duì)操作系統(tǒng)非常重要,如何介紹中斷技術(shù)及其在操作系統(tǒng)中的作用,很多教材并沒(méi)有系統(tǒng)的講解,而中斷技術(shù)又貫穿在四大管理功能中,以中斷為主線(xiàn),系統(tǒng)闡述多道程序設(shè)計(jì)的內(nèi)部實(shí)現(xiàn)過(guò)程,講解操作系統(tǒng)運(yùn)轉(zhuǎn)原理,幫助學(xué)生對(duì)操作系統(tǒng)形成完整的概念,在操作系統(tǒng)教學(xué)中有重要意義[2]。本文主要從理論教學(xué)和實(shí)踐教學(xué)兩個(gè)角度對(duì)中斷技術(shù)教學(xué)安排展開(kāi)探討。
在介紹完第一章操作系統(tǒng)概論后,介紹進(jìn)程管理之前,先引入中斷技術(shù)教學(xué),統(tǒng)一介紹中斷技術(shù)的基本概念。由于學(xué)生在學(xué)習(xí)計(jì)算機(jī)組成原理或微機(jī)原理與接口等硬件課程中已經(jīng)對(duì)中斷技術(shù)有了認(rèn)識(shí),這部分教學(xué)內(nèi)容可以根據(jù)學(xué)生前面學(xué)習(xí)情況進(jìn)行調(diào)整。然后介紹操作系統(tǒng)內(nèi)核和處理機(jī)狀態(tài),分析中斷技術(shù)對(duì)操作系統(tǒng)的重要性,最后在不同的管理模塊指明其作用。
中斷也稱(chēng)外中斷,指來(lái)自CPU 執(zhí)行指令以外的事件發(fā)生,如設(shè)備發(fā)出的各種I∕O結(jié)束中斷。異常也稱(chēng)為內(nèi)中斷、例外或陷入,指源自CPU 執(zhí)行指令內(nèi)部的事件,如程序的非法操作碼、地址越界、算術(shù)溢出、虛存系統(tǒng)的缺頁(yè)及專(zhuān)門(mén)的陷入指令(系統(tǒng)調(diào)用)等[3]。這里要突出軟中斷的概念,系統(tǒng)調(diào)用的執(zhí)行是通過(guò)軟中斷的方式實(shí)現(xiàn)的,即當(dāng)用戶(hù)程序調(diào)用系統(tǒng)程序時(shí),由中斷技術(shù)實(shí)現(xiàn)。
現(xiàn)代計(jì)算機(jī)都提供了中斷機(jī)制,中斷作為一種提高CPU 效率的機(jī)制,一是可以使 CPU 在I∕O 操作的執(zhí)行過(guò)程中能夠執(zhí)行其他指令,二是允許中斷處理器正常的處理過(guò)程,轉(zhuǎn)去處理中斷請(qǐng)求。時(shí)鐘部件一般以中斷方式對(duì)外提供服務(wù),由CPU 內(nèi)部的計(jì)時(shí)器產(chǎn)生,允許操作系統(tǒng)以一定規(guī)律執(zhí)行函數(shù)[4]。
這部分要引導(dǎo)學(xué)生思考,操作系統(tǒng)程序和用戶(hù)程序都在系統(tǒng)中運(yùn)行,操作系統(tǒng)程序如何獲得處理機(jī)并取得管理地位?由此引入操作系統(tǒng)內(nèi)核、系統(tǒng)態(tài)和用戶(hù)態(tài)的概念,說(shuō)明處理機(jī)狀態(tài)至少劃分為系統(tǒng)態(tài)和用戶(hù)態(tài)兩種狀態(tài),操作系統(tǒng)內(nèi)核包括中斷處理程序、時(shí)鐘管理、進(jìn)程調(diào)度和設(shè)備驅(qū)動(dòng)程序等操作系統(tǒng)中核心的程序,必須在核心態(tài)執(zhí)行,所以操作系統(tǒng)內(nèi)核執(zhí)行時(shí),處理機(jī)狀態(tài)要轉(zhuǎn)換為核心態(tài),以保證操作系統(tǒng)內(nèi)核執(zhí)行時(shí)具有最高權(quán)限,而核心態(tài)到用戶(hù)態(tài)轉(zhuǎn)換的唯一途徑是通過(guò)中斷,這就說(shuō)明了中斷對(duì)操作系統(tǒng)的重要性[1]。
中斷機(jī)制是操作系統(tǒng)得以正常工作的最重要的手段,它使得操作系統(tǒng)可以捕獲普通程序發(fā)出的系統(tǒng)功能調(diào)用;及時(shí)處理設(shè)備的中斷請(qǐng)求;防止用戶(hù)程序中破壞性的活動(dòng)等。系統(tǒng)運(yùn)行過(guò)程中,無(wú)論是用戶(hù)進(jìn)程還是系統(tǒng)進(jìn)程之間的切換都離不開(kāi)中斷技術(shù)。中斷對(duì)于操作系統(tǒng)的重要性就像機(jī)器中的驅(qū)動(dòng)齒輪一樣,所以有人把操作系統(tǒng)稱(chēng)為是由“中斷驅(qū)動(dòng)”的。
中斷是多道程序得以并發(fā)執(zhí)行的基礎(chǔ),沒(méi)有中斷,就不可能實(shí)現(xiàn)多道程序,進(jìn)程之間的切換是通過(guò)中斷來(lái)完成的。另外,中斷也是設(shè)備管理的基礎(chǔ),為了提高處理機(jī)的利用率,實(shí)現(xiàn)CPU 與I∕O 設(shè)備并行執(zhí)行,也必須有中斷的支持。中斷處理程序是I∕O 系統(tǒng)中最低的一層,它是整個(gè)I∕O 系統(tǒng)的基礎(chǔ)。所以在后續(xù)進(jìn)程管理和設(shè)備管理相關(guān)功能講解時(shí)要強(qiáng)調(diào)中斷的作用。
(1)進(jìn)程同步
在單處理機(jī)多道程序操作系統(tǒng)中,中斷的發(fā)生是隨機(jī)的,某個(gè)進(jìn)程在訪(fǎng)問(wèn)資源時(shí),由于中斷的發(fā)生,導(dǎo)致其他進(jìn)程獲得執(zhí)行機(jī)會(huì),會(huì)出現(xiàn)其他進(jìn)程競(jìng)爭(zhēng)或同時(shí)訪(fǎng)問(wèn)資源的情況,造成系統(tǒng)混亂,所以必須采用同步機(jī)制對(duì)進(jìn)程同步訪(fǎng)問(wèn)資源加以控制,例如開(kāi)關(guān)中斷、信號(hào)量和管程等進(jìn)程同步機(jī)制。其中開(kāi)關(guān)中斷是最簡(jiǎn)單的解決方法,避免了一個(gè)進(jìn)程執(zhí)行時(shí)其他進(jìn)程獲得執(zhí)行的機(jī)會(huì),但是代價(jià)太大,其他的解決方法在實(shí)現(xiàn)的過(guò)程中降低了代價(jià)或者比較友好,但是同樣要借助開(kāi)關(guān)中斷來(lái)實(shí)現(xiàn)某些功能。這部分內(nèi)容是學(xué)生學(xué)習(xí)時(shí)感覺(jué)最困難的,引入同步機(jī)制前,要先說(shuō)明原因,有助于學(xué)生理解各種同步機(jī)制。
(2)進(jìn)程切換
進(jìn)程的切換使系統(tǒng)中的各進(jìn)程均有機(jī)會(huì)占用CPU,由中斷、異常、系統(tǒng)調(diào)用等觸發(fā)中斷,當(dāng)前運(yùn)行的進(jìn)程被中斷,先將CPU 切換為核心態(tài),保存硬件未來(lái)得及保存的現(xiàn)場(chǎng)信息;然后由操作系統(tǒng)調(diào)用中斷服務(wù)程序處理出現(xiàn)的中斷事件;中斷處理后,某些進(jìn)程的狀態(tài)會(huì)發(fā)生變化,也可能又創(chuàng)建了一些新的進(jìn)程。進(jìn)程調(diào)度程序根據(jù)預(yù)定的調(diào)度算法從就緒隊(duì)列選一個(gè)進(jìn)程占用CPU,這個(gè)占用CPU 運(yùn)行的進(jìn)程可能仍是被中斷的進(jìn)程,也可能是另一個(gè)進(jìn)程;保存原來(lái)進(jìn)程的CPU現(xiàn)場(chǎng)信息,恢復(fù)待運(yùn)行進(jìn)程的CPU 現(xiàn)場(chǎng)信息;中斷返回,將CPU 切換為用戶(hù)態(tài)。這說(shuō)明中斷發(fā)生后,可能會(huì)導(dǎo)致進(jìn)程切換,有進(jìn)程切換則一定是由于中斷發(fā)生了,中斷處理過(guò)程中要進(jìn)行處理機(jī)狀態(tài)切換。
(3)設(shè)備管理中中斷處理程序
因?yàn)檩斎胼敵鲋袛嘧顬槌R?jiàn),所以多數(shù)操作系統(tǒng)教材把中斷技術(shù)的介紹放在設(shè)備管理章節(jié)。前面已經(jīng)介紹過(guò)中斷技術(shù)的相關(guān)概念,講到這個(gè)章節(jié)時(shí)側(cè)重中斷處理程序和其他輸入輸出軟件的關(guān)系。操作系統(tǒng)的中斷處理程序位于 I∕O 系統(tǒng)的底層,直接與 I∕O 硬件進(jìn)行交互,當(dāng)I∕O 設(shè)備發(fā)出中斷請(qǐng)求信號(hào)時(shí),中斷硬件完成初步處理后便會(huì)轉(zhuǎn)向中斷處理程序,由中斷處理程序?qū)χ袛嗾?qǐng)求信號(hào)進(jìn)行處理[4]。
操作系統(tǒng)實(shí)踐教學(xué)目前主要有三種方式,第一種是采用某些公司或高校自主研發(fā)的操作系統(tǒng)實(shí)驗(yàn)平臺(tái),并開(kāi)發(fā)相應(yīng)的實(shí)驗(yàn),可以對(duì)該操作系統(tǒng)進(jìn)行一些驗(yàn)證性實(shí)驗(yàn)或直接修改系統(tǒng)源代碼。第二種是要求學(xué)生從零開(kāi)始自制操作系統(tǒng)。第三種是比較傳統(tǒng)的一種,在目前常用的計(jì)算機(jī)操作系統(tǒng)中實(shí)現(xiàn)某些命令操作和算法模擬。由于第三種比較受限制,以下主要對(duì)前兩種教學(xué)方式中的實(shí)驗(yàn)內(nèi)容安排進(jìn)行討論。
這種方式與實(shí)驗(yàn)環(huán)境密切相關(guān),操作系統(tǒng)實(shí)驗(yàn)平臺(tái)一般都允許通過(guò)驗(yàn)證或補(bǔ)充代碼的方式實(shí)現(xiàn)實(shí)驗(yàn)環(huán)節(jié),可以更密切地結(jié)合教材內(nèi)的內(nèi)容,體現(xiàn)中斷技術(shù)在不同資源管理中的作用,幫助學(xué)生理解消化教材里的內(nèi)容。以《操作系統(tǒng)實(shí)驗(yàn)教程》為例,它以自主開(kāi)發(fā)的EOS 操作系統(tǒng)為實(shí)例,并配有集成開(kāi)發(fā)實(shí)驗(yàn)環(huán)境可直接查看或修改操作系統(tǒng)源代碼,設(shè)計(jì)有如下一些實(shí)驗(yàn)與中斷技術(shù)關(guān)系密切[5]。
(1)基本輸入輸出部分
這部分實(shí)驗(yàn)用以加深對(duì)操作系統(tǒng)設(shè)備管理基本原理的認(rèn)識(shí),以鍵盤(pán)設(shè)備為例,鍵盤(pán)設(shè)備是一種典型的中斷驅(qū)動(dòng)的設(shè)備,需要為鍵盤(pán)中斷設(shè)置一個(gè)中斷服務(wù)程序,每當(dāng)鍵盤(pán)設(shè)備上的一個(gè)鍵被按下或者彈起時(shí)就會(huì)觸發(fā)一次鍵盤(pán)中斷,鍵盤(pán)中斷服務(wù)程序就會(huì)被調(diào)用??梢哉{(diào)試EOS 內(nèi)核中鍵盤(pán)中斷服務(wù)程序的執(zhí)行過(guò)程和顯示字符的方式,從多個(gè)層面上理解控制臺(tái)的工作原理,即從鍵盤(pán)輸入數(shù)據(jù),從顯示器輸出數(shù)據(jù),修改EOS的鍵盤(pán)設(shè)備和顯示設(shè)備處理代碼,對(duì)鍵盤(pán)輸入和字符顯示進(jìn)行非常規(guī)的控制,深入理解鍵盤(pán)設(shè)備和顯示器終端的處理過(guò)程。
(2)設(shè)備驅(qū)動(dòng)程序
此實(shí)驗(yàn)配合設(shè)備管理中設(shè)備驅(qū)動(dòng)程序內(nèi)容,通過(guò)調(diào)試EOS 串口驅(qū)動(dòng)程序向串口發(fā)送數(shù)據(jù)的功能,了解設(shè)備驅(qū)動(dòng)程序的工作原理,進(jìn)一步理解設(shè)備工作過(guò)程中中斷技術(shù)的作用。在為EOS 串口驅(qū)動(dòng)程序添加從串口接收數(shù)據(jù)的功能之前,先通過(guò)調(diào)試向串口發(fā)送數(shù)據(jù)的源代碼,了解向串口發(fā)送數(shù)據(jù)的工作原理,以串口控制器8250 為例,在中斷模式下,操作系統(tǒng)每發(fā)送或接收一個(gè)字節(jié)會(huì)觸發(fā)一次中斷,掌握中斷處理程序和設(shè)備驅(qū)動(dòng)程序之間的關(guān)系。
(3)實(shí)現(xiàn)缺頁(yè)中斷處理功能和頁(yè)面置換
此實(shí)驗(yàn)配合存儲(chǔ)管理章節(jié)中缺頁(yè)中斷處理和頁(yè)面置換算法的理論教學(xué)部分。當(dāng)一個(gè)應(yīng)用程序開(kāi)始運(yùn)行時(shí),操作系統(tǒng)通常并沒(méi)有將應(yīng)用程序可執(zhí)行文件中的代碼和數(shù)據(jù)立即加載到內(nèi)存中,所以程序從入口點(diǎn)開(kāi)始運(yùn)行時(shí),就會(huì)立刻導(dǎo)致CPU 產(chǎn)生一個(gè)缺頁(yè)異常,內(nèi)核的缺頁(yè)異常處理程序會(huì)根據(jù)引起缺頁(yè)異常的線(xiàn)性地址把可執(zhí)行文件中對(duì)應(yīng)的代碼頁(yè)從文件系統(tǒng)中加載到物理內(nèi)存頁(yè)面中,并映射到進(jìn)程邏輯地址對(duì)應(yīng)的位置。當(dāng)異常處理程序返回后,CPU 就會(huì)重新執(zhí)行之前導(dǎo)致異常的那條指令,使得程序能夠得以繼續(xù)執(zhí)行。設(shè)計(jì)缺頁(yè)中斷處理程序?qū)崿F(xiàn)按需加載功能,可仿照EOS 中已經(jīng)提供的中斷處理程序(例如鍵盤(pán)中斷、定時(shí)器中斷)來(lái)添加缺頁(yè)中斷處理程序[5]。頁(yè)面置換算法可以選擇實(shí)現(xiàn)教材中介紹的算法并通過(guò)頁(yè)面序列測(cè)試置換結(jié)果。
(4)使用軟中斷實(shí)現(xiàn)系統(tǒng)調(diào)用
此實(shí)驗(yàn)配合操作系統(tǒng)接口部分中的系統(tǒng)調(diào)用內(nèi)容,幫助學(xué)生進(jìn)一步理解系統(tǒng)調(diào)用是通過(guò)軟中斷的方式實(shí)現(xiàn)的。實(shí)驗(yàn)過(guò)程中可以通過(guò)調(diào)試直接從EOS 應(yīng)用程序進(jìn)入操作系統(tǒng)內(nèi)核,觀(guān)察函數(shù)的調(diào)用層次。由于Windows 操作系統(tǒng)采用中斷號(hào)0x2E 作為應(yīng)用程序接口的軟中斷,實(shí)驗(yàn)時(shí)可以采用類(lèi)似的方式,首先添加中斷號(hào)為0x2E 的中斷處理器程序,并使用寄存器存儲(chǔ)系統(tǒng)調(diào)用號(hào),在中斷處理程序中根據(jù)不同的系統(tǒng)調(diào)用號(hào)來(lái)調(diào)用不同的內(nèi)核函數(shù)[5]。
如果實(shí)踐教學(xué)安排是由學(xué)生自己實(shí)現(xiàn)一個(gè)操作系統(tǒng),這部分內(nèi)容可以先以實(shí)現(xiàn)鍵盤(pán)和鼠標(biāo)中斷為例,通過(guò)這部分實(shí)驗(yàn),學(xué)生可以非常直觀(guān)地認(rèn)識(shí)到如果沒(méi)有中斷技術(shù),設(shè)計(jì)的操作系統(tǒng)是無(wú)法進(jìn)行交互的。
選用《30 天自制操作系統(tǒng)》這本教材為例,在以自制操作系統(tǒng)為實(shí)踐內(nèi)容時(shí),第一部分實(shí)驗(yàn)都是操作系統(tǒng)的啟動(dòng),對(duì)應(yīng)著教材第一天至第三天的內(nèi)容。第二部實(shí)驗(yàn)就是要解決中斷處理,在教材第四天至第八天的內(nèi)容中,安排了畫(huà)面顯示,實(shí)現(xiàn)了字符的顯示和鍵盤(pán)鼠標(biāo)事件的中斷處理[6]。說(shuō)明操作系統(tǒng)啟動(dòng)后,用戶(hù)要想和系統(tǒng)進(jìn)行交互,在所有管理功能實(shí)現(xiàn)之前,首先要能夠響應(yīng)鍵盤(pán)中斷和鼠標(biāo)中斷。要使用中斷,先將全局段號(hào)記錄表和中斷記錄表正確無(wú)誤地初始化,接著初始化可編程中斷控制器,最后完成中斷處理程序的制作。另外后面定時(shí)器和多任務(wù)的實(shí)現(xiàn)等功能都同樣避不開(kāi)中斷技術(shù)的使用。
選擇自制操作系統(tǒng),更能直觀(guān)地說(shuō)明中斷對(duì)操作系統(tǒng)的重要性。只有解決了中斷,才能通過(guò)鼠標(biāo)和鍵盤(pán)同操作系統(tǒng)交互,才能繼續(xù)實(shí)現(xiàn)后面的內(nèi)存管理、多任務(wù)管理和設(shè)備管理等功能,隨著后續(xù)功能的實(shí)現(xiàn),學(xué)生會(huì)發(fā)現(xiàn)中段技術(shù)的應(yīng)用幾乎貫徹了自制操作系統(tǒng)的整個(gè)過(guò)程。這種直接的認(rèn)知會(huì)加深學(xué)生對(duì)中斷和操作系統(tǒng)關(guān)系的透徹理解,但在實(shí)現(xiàn)上需要更多學(xué)時(shí)。
中斷技術(shù)作為操作系統(tǒng)原理課程中不可或缺的一部分內(nèi)容,要求學(xué)生在學(xué)習(xí)操作系統(tǒng)各管理功能之前就要有個(gè)宏觀(guān)概念,有助于對(duì)后續(xù)課程內(nèi)容的理解和靈活應(yīng)用。文章探討中斷技術(shù)和操作系統(tǒng)理論及實(shí)踐部分的結(jié)合方式,幫助學(xué)生理解中斷技術(shù)在操作系統(tǒng)課程不同功能模塊中的作用,在教學(xué)過(guò)程中起到了較好的效果,幫助學(xué)生理解概念的同時(shí)提高設(shè)計(jì)操作系統(tǒng)的能力。由于操作系統(tǒng)是個(gè)龐大的系統(tǒng)軟件,文中探討還有不完善之處,后期的教學(xué)活動(dòng)中會(huì)進(jìn)一步研究。