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