這個階段的課程講授操作系統的原理和Linux系統給應用層提供的C編程接口。操作系統通過系統調用提供的抽象層是一切中間層和應用軟件的根本。
課程建設思路-傳統誤區
長久以來這個階段的課程是按照《UNIX環境高級編程》這本書進行講解的。這個環節的課程甚至曾因此被稱為"高級編程"。但是與此同時,這個環節的教學思路也被這本書束縛住了。操作系統底層提供出來的編程接口是復雜的。學員在這個階段的學習往往會陷入到這種復雜性的泥潭中。一般性的編程接口需要照顧到各種情況,所以比較復雜。但在更高的軟件層次會有簡化的接口出現。這是因為在更高的軟件層次,問題被具體化了,自然可以把與問題本身無關的接口或解決這類問題的固定代碼隱藏起來。課時有限,教師在有限時間內在甚至無法全面地講授Linux所提供的全部系統調用。而追求系統調用細節的結果就是課程被瑣碎的復雜性所累,從而導致學員無法在遇到實際問題的時候利用這些知識。
課程改革
我們對課程做了如下改進:首先在全課程體系中重新加入了操作系統理論。不論是在本環節,還是整個體系的其它環節,課程都會加入深入探討操作系統的理論話題。課程不再把精力浪費在瑣碎的細節上,轉而著重講授操作系統提供的關鍵性功能以及這些功能的編程模型。在全課程序列的其它環節也加入了配合環節:通過在全課程體系的各個部分講述操作系統相關機制的底層實現,讓學員加深對關鍵知識的認識;通過在中間層階段講述高層次的抽象模型,讓學員從本質上理解操作系統提供的編程模型。
課程結構-操作系統原理
進程概念 線程概念 異步和并發 死鎖 處理器調度 虛擬內存 文件系統 TCP/IP協議 分布式系統
讀者可以在任何一本操作系統的書籍上查到上述知識。但是本課程環節的重點在于把這些知識和實際的操作系統編程接口結合講授。
系統調用和編程模型
進程控制 進程間通信 文件系統接口 多線程設計 套接字編程 文件IO接口
這個環節學員會接觸到各個門類的Linux系統調用。這是在操作系統下深入開發應用程序的基礎。課程在這個階段講授IO模型、進程間通信模型、并發設計模型和客戶機服務器模型這幾種編程模型。課程會集中辨析在每個模型中的不同設計手段的適用性問題。比如在進程間通信模型中,課程會析析各種機制(信號、管道、套接字、共享內存)之間的差別;在并發設計模型中對比線程并發和進程并發各自的優缺點;在客戶機服務器模型的環節中討論各種不同負載形態對服務器設計的影響;在IO模型中講解同步阻塞、異步IO和多路復用等技術的優劣。
跨階段配合
異步執行模型 虛擬文件系統 阻塞機制 中間層接口 進程調度器 并發服務器
操作系統是軟件體系結構的核心,本階段的理論模型和編程接口和其它環節是緊密結合的。跨階段配合的課程就顯得尤為重要。在體系結構階段的課程會在講授中斷處理的時候講授一般性的異步執行緒理論,這是操作系統課程中信號和異步IO的基礎。在設備驅動階段我們會完整講述虛擬文件系統中間層的實現細節,通過VFS和字符設備的學習,學員能夠徹底理解文件和文件系統的操作接口。通過講授阻塞和非阻塞IO和進程調度,讓學生徹底明白進程的調度過程。課程通過中間層提供的明確而清晰的設計模型把學員從復雜的底層系統調用中解放出來。課程通過講解服務器端腳本技術向學員展示高并發事件服務器的核心模型。