文章目錄
- 前言
- 1. 作業系統的目标和功能
-
- 1.1 作為使用者/計算機接口的作業系統
- 1.2 作為資料總管的作業系統
- 1.3 作業系統的易擴充性
- 2. 作業系統的發展
-
- 2.1 手工作業系統(無作業系統)
- 2.2 單道批處理系統
- 2.3 多道批處理系統
- 2.4 分時系統
- 3. 主要的成就
-
- 3.1 程序
- 3.2 記憶體管理
- 3.3 資訊保護和安全
- 3.4 排程和資源管理
- 3.5 系統結構
- 4. 現代操作系的特征
- 5. 總結
前言
上一篇文章主要對計算機硬體部分作了簡要的介紹,從本文開始将慢慢深入對作業系統的學習。本文将會介紹作業系統的發展史,作業系統的功能以及現代作業系統的特征,其中作業系統的功能将會在後文中進行具體介紹,本文隻做簡要介紹。
1. 作業系統的目标和功能
作業系統是控制應用程式執行的程式,屏蔽了底層硬體的細節,隻暴露給上層應用程式接口以友善調用。它有下面三個目标:
- 友善:作業系統使計算機更容易使用。
- 有效:作業系統使計算機資源得到更有效的利用。
- 擴充能力:在不妨礙服務的前提下,作業系統更容易擴充新的功能。
接下來将依次介紹作業系統的這三個目标。
1.1 作為使用者/計算機接口的作業系統
為使用者提供的硬體和軟體可以看做是一種層次結構,如圖2.1 所示。終端使用者通常不關心計算機的硬體細節。是以終端使用者把計算機系統看做是一組應用程式。
簡單來說,作業系統通常提供一下幾方面的服務:
- 程式開發:作業系統提供各種各樣的工具和服務,如編輯器和調試器,用于幫助程式員開發程式。通常,這些服務以實用工具的形式出現,嚴格來說并不屬于作業系統核心的一部分;它們由作業系統提供,稱做應用程式開發工具。
- 程式運作:運作一個程式需要很多步驟,包括必須把指令和資料載入到記憶體、初始化 I/O 裝置和檔案、準備一些其它資源。作業系統為使用者處理這些排程問題。
- I/O 裝置通路:每個 I/O 裝置的操作都需要特有的指令集或控制信号,作業系統隐藏這些細節并提供了統一的接口,友善程式員使用接口來通路這些裝置。
- 檔案通路控制:對于作業系統而言,關于檔案的控制不僅必須詳細了解 I/O 裝置(磁盤驅動器、錄音帶驅動器)的特性,而且必須詳細了解存儲媒體中檔案資料的結構。此外,對有多個使用者的系統,作業系統還可以提供保護機制來控制對檔案的通路。
- 系統通路
- 錯誤檢測和響應
- 記賬
1.2 作為資料總管的作業系統
一台計算機就是一組資源,包括 CPU、記憶體、I/O 裝置等,作業系統就是負責管理這些資源。
圖2.2 顯示了作業系統主要管理的資源。作業系統中有一部分在記憶體中,其中包括 核心程式(kernel) 和目前正在使用的其它作業系統程式,核心程式包含作業系統中最常使用的功能。記憶體的剩餘部分包含使用者程式和資料,它的配置設定由作業系統和處理器中的存儲管理硬體聯合控制。
作業系統決定在程式運作過程中何時使用 I/O 裝置,并控制檔案的通路和使用,以及運作一個使用者程式時可以配置設定多少處理器時間等。
1.3 作業系統的易擴充性
一個好的作業系統應該能夠不斷發展,其原因如下:
- 硬體的更新和新型硬體的出現:例如,早期運作 Unix 的處理器沒有 “分頁” 的硬體,是以 Unix 也沒有使用分頁機制,而較新的版本經過修改,具備了分頁的功能。
- 新的服務:為适應使用者的要求或滿足系統管理者的需要,需擴充作業系統以提供新的服務。
- 糾正錯誤:任何一個作業系統都會有bug,在發現bug後需要引入相應的更新檔程式。
是以在構造作業系統時應該采用子產品化的設計,清楚的定義子產品間的接口。而對于現代作業系統來說,簡單的子產品化是不夠的。
2. 作業系統的發展
2.1 手工作業系統(無作業系統)
對于早期的計算機,從 20 世紀 40 年代後期到 50 年代中期,程式員都是直接與計算機硬體打交道的,因為當時還沒有作業系統。
當時的計算機每次隻能運作一個程式,程式員在打孔紙卡上寫程式,然後拿到一個計算機操作房間,交給操作員,等計算機空下來後,操作員會把程式放入,然後運作、輸出結果、停機。 以前計算機慢,這種手動做法可以接受,運作一個程式通常需要幾個小時,幾天甚至幾周。但随着計算機的計算能力變得越來越快,越來越快呈指數級增長,很快,放程式的時間比運作時間還長,我們需要一種方式讓計算機自動運作,于是作業系統誕生了。
2.2 單道批處理系統
為了提高使用率,在 20 世紀 50 年代中期開發出了第一個單道批處理作業系統。
工作方式:
使用者把卡片或錄音帶中的作業送出給計算機操作員,由他把這些作業按順序組織成一批,并将整個作業輸入到磁盤形成作業隊列,作業系統依次自動處理隊列中的每個作業:裝入 → 運作 → 撤出……,運作完畢,通知使用者取結果
工作特點:
批量:作業隊列
自動:程式的裝入和撤出自動完成,效率高
單道:依次、串行(在記憶體中總是隻有一個程式在運作,所有的作業都是依次、串行運作的)
2.3 多道批處理系統
即便對于單道批處理系統提供的自動作業隊列,處理器任然經常處于空閑狀态。因為 I/O 裝置相對于處理器的速度太慢,是以有了多道批處理系統。
工作方式:
在記憶體中存放多道程式,當某道程式因為某種原因(例如執行 I/O 操作時)不能繼續運作而放棄 CPU 時,作業系統便排程另一程式投入運作。這樣可以使 CPU 盡量忙碌,進而提高使用率。
工作特點:
多道:記憶體同時存放多道程式
并行:宏觀上多道程式同時執行
串行:微觀上處理器一次隻能處理一道程式
多道批處理系統的缺點:
作業處理時間長
互動能力差
運作過程不确定
2.4 分時系統
分時作業系統出現的背景
- 事務性任務的湧現(互動性高,響應快速)
- 要求支援多任務/多使用者
- 多終端計算機
由于多道批處理系統無法勝任這些需求,因而分時系統應運而生。
分時系統不僅可以同時處理多個批作業,它還可以用于處理多個互動作業。對于後一種情況,由于多個使用者共享處理器時間,因而該技術稱做 分時。在分時系統中,多個使用者可以通過終端同時通路系統,由作業系統控制每個使用者程式以很短的時間為機關交替執行。由于終端使用者反應時間相對計算機比較慢,因而每個終端使用者都感覺到是獨占主機。
事務性任務與科學計算性任務
- 科學計算性任務:耗 CPU,在 CPU 上進行大量運算
- 事務性任務:使用者在整個程式運作過程中需要不斷和程式進行互動,輸入和輸出很頻繁;要求計算機能夠快速響應
3. 主要的成就
作業系統在發展過程中為了達到最初的目标(友善、有效和易擴充性)提出了 5 個重要的理論進展:程序、記憶體管理、資訊保護和安全、排程和資源管理、系統結構。
每個進展都是為了解決實際的難題,并由相關原理或抽象概念來描述的。這 5 個領域包括了現代作業系統設計和實作中的關鍵問題。本節對這 5 個領域進行簡要介紹。
3.1 程序
程序是作業系統配置設定資源的基本機關。
簡單來說,一個程序可以看作是由以下三部分構成的:
- 一段可執行的程式
- 程式所需要的相關資料(變量、工作空間、緩沖區等)
- 程式執行的上下文
其中最後一部分是根本。執行上下文 又稱做 程序狀态,是作業系統用來管理和控制程序所需的内部資料。這種内部資訊是和程序分開的,因為作業系統資訊不允許被程序直接通路,上下文包括作業系統管理程序以及處理器正确執行程序所需要的所有資訊。包括了各種處理器寄存器的内容,如程式計數器、和資料寄存器;還包括作業系統使用的資訊,如程序的優先級以及程序是否在等待特定的 I/O 事件的完成。
下圖2.8 給出了一種程序管理的方法。兩個程序 A 和 B,存放在記憶體的某些部分。也就是說,給每個程序(包含程式、資料和上下文資訊)配置設定一塊記憶體區域,并且在由 作業系統建立和維護的程序表 中進行記錄。程序表包含記錄每個程序的表項,表項内容包括指向包含程序的記憶體位址的指針,還包括該程序的部分或全部執行上下文。程序索引器包含目前正在控制處理器的程序在程序表中的索引。程式計數器指向該程序中下一條待執行的指令。基址寄存器和界限寄存器定義了該程序所占據的記憶體區域:基址寄存器中儲存該記憶體區域的開始位址,界限寄存器儲存了該區域的大小(以位元組或字為機關)。程式計數器和所有的資料引用相對于基址寄存器被解釋,并且不能超過界限寄存器的值,這就可以保護内部程序間不會幹涉。
圖2.8 中程序索引寄存器表明程序 B 正在執行。以前執行的程序被臨時中斷,在 A 中斷的同時,所有寄存器的内容被記錄在它的執行上下文環境中,以後作業系統就可以執行切換,恢複程序 A 的執行。程序切換過程包括儲存 B 的上下文和恢複 A 的上下文。當在程式計數器中載入指向 A 的程式區域的值時,程序 A 自動恢複執行。
是以,程序被當做資料結構來實作(可以和 C語言的結構體進行類比,所謂結構體就是把若幹個資料項彙集到一處并賦予其名字後所形成的一個整體)。一個程序可以是正在執行,也可以是等待執行。任何時候整個程序狀态都包含在它的上下文環境中。這個結構使得作業系統可以友善地擴充和引入新的功能(如優先級),這可以通過擴充上下文環境來支援這些新的功能。
3.2 記憶體管理
為了有效且有條理地控制存儲器配置設定,作業系統負責以下 5 個基本的存儲器管理責任:
- 程序隔離:作業系統必須保護獨立程序,防止互相幹涉各自的存儲空間,包括資料和指令。
- 自動配置設定和管理:程式應該根據需要自動在存儲層次間動态地配置設定,配置設定對程式員是透明的。
- 支援子產品化程式設計:程式員應該能夠定義程式子產品,并且動态地建立、銷毀子產品,動态地改變子產品大小。
- 保護和通路控制:不管在存儲層次的哪一級,存儲器的共享都會産生一個程式通路另一個程式存儲空間的潛在可能性。
- 長期存儲:許多應用程式需要在計算機關機後長期儲存資訊。
在典型情況下,作業系統使用 虛拟存儲器 和 檔案系統 機制來滿足這些要求。檔案系統實作了長期存儲,它在檔案中儲存資訊。對程式員來說,檔案是一個很友善的概念;對作業系統來說,檔案是通路控制和保護的一個有用單元。
虛拟存儲器機制允許程式從邏輯的角度通路存儲器,而不考慮實體記憶體上可用的空間數量。虛拟存儲器的構想是為了滿足有多個使用者程式同時駐留在記憶體中的要求,這樣,當一個程序被寫出到輔助存儲器中并且後繼程序被讀入時,在連續的程序執行之間将不會脫節。
由于程序大小不同,如果處理器在很多程序間切換,則很難把它們放在連續的記憶體中,是以引進了 分頁系統。在分頁系統中,程序由許多固定大小的塊組成,這些塊稱做 頁。程式通過 虛位址 通路字,虛位址由頁号和頁中的偏移量組成。程序的每一頁都可以放在記憶體中的任何地方,分頁系統提供了程式在使用的虛位址和記憶體位址中的 實位址 或實體位址之間的動态映射。
如圖2.9,剛開始時,一個程序的所有頁都保留在磁盤中,當程序執行時,一部分頁在記憶體中。如果需要通路的某一頁不在記憶體中時,存儲管理硬體可以檢測到,然後安排載入這個缺頁。這個配置稱做 虛拟記憶體。
可以通過給每個程序一個唯一的不重疊的虛拟存儲空間來實作程序隔離;可以通過使兩個虛拟存儲器空間的一部分重疊來實作記憶體共享。
圖2.10 顯示了虛拟存儲器方案中的尋址關系。存儲器由記憶體和低速的輔助存儲器組成,記憶體可以直接通路到(通過機器指令),外存可以通過把塊載入記憶體間接通路到。位址轉換硬體(映射器)位于處理器和記憶體之間。程式使用虛位址通路,虛位址将映射成真實的記憶體位址。如果通路的虛位址不在實際記憶體中,記憶體不夠的話,實際記憶體中的一部分内容将換到外存中,然後換入所需的資料塊。在這個活動過程中,産生的這個位址通路的程序必須被挂起。
3.3 資訊保護和安全
資訊保護是在使用分時系統是提出的。
大多數與作業系統相關的安全和保護問題可以分為 4 類:
- 可用性:保護系統不被打斷
- 保密性:保證使用者不能讀到未授權通路的資料
- 資料完整性:保護資料不被未授權修改
- 認證:涉及使用者身份的正确認證和消息或資料的合法性
3.4 排程和資源管理
作業系統的一個關鍵任務是管理各種可用資源(記憶體空間、I/O 裝置、處理器),并排程各種活動程序使用這些資源。任何資源配置設定和排程政策都必須考慮三個因素:
- 公平性
- 有差别的響應性
- 有效性
3.5 系統結構
對于運作數百萬到數千萬條代碼的大型作業系統,僅僅有子產品化程式設計是不夠的,軟體體系結構和資訊抽象的概念正得到越來越廣泛的使用。現代作業系統的層次結構按照複雜性、時間刻度、抽象級進行功能劃分。我們可以把系統看做是一系列的層。每一層執行作業系統所需功能的相關子集。它依賴于下一個較低層,較低層執行更為原始的功能并隐藏這些功能的細節。它還給相鄰的高層提供服務。下圖給出一張層次設計模型表。
4. 現代操作系的特征
現代作業系統的特征可以參考下面這篇文章,這篇文章和我所看書的内容差不多相同:
https://www.jianshu.com/p/5535f6301721
5. 總結
本文首先介紹了作業系統的三個目标 —— 友善、有效、擴充性,并對功能進行了簡要的描述。之後介紹了作業系統的發展史:最初的批處理系統實作了自動加載程式,解決了人手工裝填程式效率極其低下的問題,但由于 CPU 的速度很快,是以經常處于空閑狀态;多道批處理系統的出現更大程度的提高了 CPU 的使用率,在宏觀上一次可以執行多個程式,在微觀上 CPU 交替執行每一個程式;分時系統可以使使用者和計算機實時互動,并且支援多使用者互動。本文還描述了作業系統發展過程中所取得的 5 個重要理論進展,最後叙述了現代作業系統的特征。從下一章開始将具體研究作業系統的程序部分。