清華大學MOOC《作業系統》第1講:“作業系統概述”總結(轉)
阿新 • • 發佈:2019-01-04
課程內容概述
這一講對課程內容和作業系統做了一個概括性的介紹,主要包括以下幾塊內容:
- 教學安排
- 什麼是作業系統
- 作業系統的演變
- 作業系統結構的分類
教學安排
本課程將講述的內容包括:
- 作業系統結構
- 中斷和系統呼叫
- 記憶體管理
- 程序和執行緒
- 處理機排程
- 同步互斥
- 檔案系統
- I/O子系統
實驗共有8個,包括:
- 0:實驗環境準備
- 1:系統啟動及中斷
- 2:實體記憶體管理
- 3:虛擬記憶體管理
- 4:核心執行緒管理
- 5:使用者程序管理
- 6:CPU排程
- 7:同步與互斥
- 8:檔案系統
實驗安排與教學安排是基本匹配的。
什麼是作業系統
作業系統可以是:
- 一個控制程式
- 一個資源管理器
- 一套標準庫
作業系統通常由核心、命令列和GUI組成。我們研究的主要是核心。以uCore為例,可以分成以下4個層次:
- 應用程式
- 命令列程式、編譯器、直譯器、系統庫
- 核心
- 核心向上提供系統呼叫介面
- 同時呼叫下層提供的硬體抽象
- 硬體裝置
作業系統核心的特徵:
- 併發:OS需要管理和排程多個同時執行的程式
- 共享:對資源的互斥共享
- 虛擬:對CPU和記憶體資源的虛擬化
- 非同步:程式的執行是時常會停止的,OS需要保證程式暫停之後狀態不變
作業系統的演變
- 單使用者系統:1945-1955
- OS=裝載器+通用子程式庫
- 問題是,任務完全為序列執行,由於讀卡時間過長,執行時間比例降低
- 批處理系統:1955-1965
- 每個任務在每個元件中序列執行,總體看來是並行執行的
- 解決了利用率問題
- 多道程式系統:1965-1980
- 將多個程式儲存在記憶體中,複用CPU
- 在程式進行I/O操作時將其阻塞,切換到別的程式
- 分時系統:1970-
- 定時中斷當前程式,實現對CPU的複用
- 個人電腦作業系統
- 分散式作業系統
- ……
作業系統結構的分類
作業系統的結構可以分為以下幾種:
- 簡單結構:沒有拆分為模組,沒有很好地分離介面和功能
- 應用程式可以直接訪問最底層的服務,也可以使用作業系統的服務
- 例:MS-DOS
- 分層結構:將作業系統分為多層,每層建立在底層上
- 優點:可移植性強
- 缺點:層次過多會導致效率降低
- 例:UNIX
- 微核心結構:將一些核心服務移動到使用者態,核心只保留程序通訊和硬體支援功能
- 優點:靈活,安全
- 缺點:效能差
- 例:目前的系統結構是微核心結構和分層結構的混合體
- 外核結構:核心只起到資源的保護和隔離功能,作業系統原有功能由使用者態作業系統庫支援
- 虛擬機器結構:作業系統與虛擬機器管理器互動,虛擬機器管理器負責和硬體互動
習題
選擇填空題
- 當前常見的作業系統主要用C,C++,ASM程式語言編寫。
- "Operating system"這個單詞起源於Operator。
指的是原來的系統操作員。
- 在計算機系統中,控制和管理各種資源、有效地組織多道程式執行的系統軟體稱作作業系統。
對作業系統定義的考察。當然我覺得這個答案並不全面,加上“提供了一套標準庫”(也就是系統呼叫)會更好。
- 允許多使用者將若干個作業提交給計算機系統集中處理的作業系統稱為批處理作業系統。
這說明單使用者系統是每個任務手動提交上去的。
- 你瞭解的當前世界上使用最多的32bit CPU是ARM,其上執行最多的作業系統是Android。
答案如此,沒有找到信源。不過知道這個也沒什麼意義。
- 應用程式通過系統呼叫介面獲得作業系統的服務。
系統呼叫是非常重要的。這是應用程式主動進入核心態的方式。
- 現代作業系統的特徵包括併發性,共享性,虛擬性,非同步性,永續性。
特徵到底應該包括哪些也是見仁見智。OSTEP中總結出的三點是虛擬,併發和永續性。非同步性和共享性大概可以歸入併發性。同時我也覺得永續性未必是作業系統的特點,而是儲存裝置的特點。當然這也可能是我的理解不夠。
UPD:作業系統本身也是需要從永續性儲存裝置中讀入的。檔案系統也是OS的重要組成成分。所以我想得可能太片面了。
- 作業系統核心的架構包括巨集核心,微核心,外核。
這個答案和上面講的並不相符。那麼,當然應該填簡單結構、分層結構、微核心結構、外核結構和虛擬機器結構了。
簡答題
請總結你認為作業系統應該具有的特徵有什麼?並對其特徵進行簡要闡述。
作業系統應該具有的特徵有:虛擬性、併發性、非同步性、共享性和永續性。
- 虛擬性:虛擬是指把一個物理上的實體變為若干個邏輯上的對應物。在作業系統中利用了多種虛擬技術,分別用來實現虛擬處理器、虛擬記憶體和虛擬外部裝置。
- 併發性:併發是指兩個或多個事件在同一時間間隔內發生,在多道程式環境下,一段時間內巨集觀上有多個程式在同時執行,而在同一時刻,單處理器環境下實際上只有一個程式在執行,故微觀上這些程式還是在分時的交替進行。作業系統的併發是通過分時得以實現的。作業系統的併發性是指計算機系統中同時存在多個執行著的程式,因此它具有處理和排程多個程式同時執行的能力。
- 非同步性:在多道程式環境下,允許多個程式併發執行,但由於資源有限,程序的執行不是一貫到底,而是走走停停,以不可預知的速度向前推進,這就是程序的非同步性。非同步性使得作業系統執行在一種隨機的環境下,可能導致程序產生於時間有關的錯誤。但是隻要執行環境相同,作業系統必須保證多次執行程序,都獲得相同的結果。
- 共享性:系統中的資源可供記憶體中多個併發執行的程序共同使用。(事實上,只能做到互斥共享,或者說同時。)
- 永續性:通過實現檔案系統,作業系統可以將程式以及資料儲存在磁碟等儲存介質中。 詳細解釋可以參考作業系統的特徵。
為什麼現在的作業系統基本上用C語言來實現?為什麼沒有人用python,java來實現作業系統?
C語言是編譯型語言,有良好的效能,能夠直接嵌入彙編,可以方便地操作硬體;Python,Java無法保證效能,不能直接操作硬體。
不過,仍然是有人用這些語言來編寫作業系統的,比如:
實踐題
此次的實踐題全部與V9-computer相關,和本課程關係不大,所以先不做了。