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