- 作業系統教程
- 作業系統 - 首頁
- 作業系統 - 需求
- 作業系統 - 概述
- 作業系統 - 歷史
- 作業系統 - 組成部分
- 作業系統 - 結構
- 作業系統 - 架構
- 作業系統 - TAT & WAT
- 作業系統 - 型別
- 作業系統 - 服務
- 作業系統 - 屬性
- 作業系統 - 程序
- 作業系統 - 程序排程
- 作業系統 - 排程演算法
- 作業系統 - 多執行緒
- 作業系統 - 記憶體管理
- 作業系統 - 虛擬記憶體
- 作業系統 - I/O 硬體
- 作業系統 - I/O 軟體
- 作業系統 - 檔案系統
- 作業系統 - 安全性
- 作業系統 - Linux
- 作業系統 - 考試題及答案
- 作業系統 - 考試題及答案
- 作業系統有用資源
- 作業系統 - 快速指南
- 作業系統 - 有用資源
- 作業系統 - 討論
作業系統 - 快速指南
作業系統 - 概述
作業系統(OS)是計算機使用者和計算機硬體之間的介面。作業系統是一個軟體,它執行所有基本任務,例如檔案管理、記憶體管理、程序管理、處理輸入和輸出以及控制外圍裝置(如磁碟驅動器和印表機)。
一些流行的作業系統包括 Linux 作業系統、Windows 作業系統、VMS、OS/400、AIX、z/OS 等。
定義
作業系統是一個程式,它充當使用者和計算機硬體之間的介面,並控制各種程式的執行。
以下是作業系統的一些重要功能。
- 記憶體管理
- 處理器管理
- 裝置管理
- 檔案管理
- 安全
- 控制系統性能
- 作業記賬
- 錯誤檢測輔助工具
- 協調其他軟體和使用者
記憶體管理
記憶體管理是指主記憶體或主儲存器的管理。主記憶體是一個大型的字或位元組陣列,每個字或位元組都有自己的地址。
主記憶體提供一個 CPU 可以直接訪問的快速儲存器。要執行程式,它必須位於主記憶體中。作業系統為記憶體管理執行以下活動:
跟蹤主記憶體,即哪些部分被誰使用,哪些部分未使用。
在多道程式設計中,作業系統決定哪個程序何時以及獲得多少記憶體。
當程序請求時分配記憶體。
當程序不再需要記憶體或已被終止時,釋放記憶體。
處理器管理
在多道程式設計環境中,作業系統決定哪個程序何時以及獲得多長時間的處理器。此功能稱為**程序排程**。作業系統為處理器管理執行以下活動:
跟蹤處理器和程序的狀態。負責此任務的程式稱為**流量控制器**。
將處理器 (CPU) 分配給程序。
當不再需要程序時,釋放處理器。
裝置管理
作業系統透過其相應的驅動程式管理裝置通訊。它為裝置管理執行以下活動:
跟蹤所有裝置。負責此任務的程式稱為**I/O 控制器**。
決定哪個程序何時以及獲得多長時間的裝置。
以高效的方式分配裝置。
釋放裝置。
檔案管理
檔案系統通常組織成目錄,以便於導航和使用。這些目錄可能包含檔案和其他目錄。
作業系統為檔案管理執行以下活動:
跟蹤資訊、位置、用途、狀態等。這些集體設施通常被稱為**檔案系統**。
決定誰獲得資源。
分配資源。
釋放資源。
其他重要活動
以下是作業系統執行的一些重要活動:
**安全性** - 透過密碼和類似的其他技術,它可以防止未經授權訪問程式和資料。
**控制系統性能** - 記錄服務請求與系統響應之間的延遲。
**作業記賬** - 跟蹤各種作業和使用者使用的時間和資源。
**錯誤檢測輔助工具** - 生成轉儲、跟蹤、錯誤訊息和其他除錯和錯誤檢測輔助工具。
**協調其他軟體和使用者** - 協調和分配編譯器、直譯器、彙編器和其他軟體給計算機系統的各種使用者。
作業系統型別
作業系統從第一代計算機就已經存在,並且隨著時間的推移不斷發展。在本章中,我們將討論一些最常用的重要作業系統型別。
批處理作業系統
批處理作業系統的使用者不直接與計算機互動。每個使用者都在離線裝置(如穿孔卡片)上準備他的作業,並將其提交給計算機操作員。為了加快處理速度,具有相似需求的作業被批次在一起並作為一個組執行。程式設計師將他們的程式交給操作員,然後操作員將具有相似要求的程式分類到批次中。
批處理系統的問題如下:
- 使用者和作業之間缺乏互動。
- CPU 經常空閒,因為機械 I/O 裝置的速度比 CPU 慢。
- 難以提供所需的優先順序。
分時作業系統
分時是一種技術,它使許多位於不同終端的人能夠同時使用特定的計算機系統。分時或多工處理是多道程式設計的邏輯擴充套件。處理器的時間在多個使用者之間同時共享稱為分時。
多道程式批處理系統和分時系統的主要區別在於,對於多道程式批處理系統,目標是最大化處理器使用率,而對於分時系統,目標是最小化響應時間。
CPU 透過在多個作業之間切換來執行多個作業,但切換非常頻繁。因此,使用者可以立即收到響應。例如,在事務處理中,處理器以短暫的突發或計算量子來執行每個使用者程式。也就是說,如果存在 **n** 個使用者,則每個使用者可以獲得一個時間量子。當用戶提交命令時,響應時間最多為幾秒鐘。
作業系統使用 CPU 排程和多道程式設計為每個使用者提供一小部分時間。最初設計為批處理系統的計算機系統已被修改為分時系統。
分時作業系統的優點如下:
- 提供快速響應的優勢。
- 避免軟體重複。
- 減少 CPU 空閒時間。
分時作業系統的缺點如下:
- 可靠性問題。
- 使用者程式和資料安全性和完整性問題。
- 資料通訊問題。
分散式作業系統
分散式系統使用多箇中央處理器來服務多個即時應用程式和多個使用者。資料處理作業將相應地分佈在處理器之間。
處理器透過各種通訊線路(例如高速匯流排或電話線)相互通訊。這些被稱為**鬆散耦合系統**或分散式系統。分散式系統中的處理器的大小和功能可能各不相同。這些處理器被稱為站點、節點、計算機等等。
分散式系統的優點如下:
- 使用資源共享功能,一個站點上的使用者可以使用另一個站點提供的資源。
- 透過電子郵件加快資料交換速度。
- 如果分散式系統中的一個站點發生故障,其餘站點可以繼續執行。
- 為客戶提供更好的服務。
- 減少主機計算機的負載。
- 減少資料處理延遲。
網路作業系統
網路作業系統執行在伺服器上,併為伺服器提供管理資料、使用者、組、安全、應用程式和其他網路功能的能力。網路作業系統的首要目的是允許在網路中的多臺計算機之間共享檔案和印表機訪問,通常是區域網 (LAN)、專用網路或其他網路。
網路作業系統的示例包括 Microsoft Windows Server 2003、Microsoft Windows Server 2008、UNIX、Linux、Mac OS X、Novell NetWare 和 BSD。
網路作業系統的優點如下:
- 集中式伺服器高度穩定。
- 安全由伺服器管理。
- 新技術和硬體的升級可以輕鬆整合到系統中。
- 可以從不同位置和型別的系統遠端訪問伺服器。
網路作業系統的缺點如下:
- 購買和執行伺服器的成本很高。
- 大多數操作依賴於中心位置。
- 需要定期維護和更新。
即時作業系統
即時系統定義為一種資料處理系統,其中處理和響應輸入所需的時間間隔非常小,以至於它可以控制環境。系統響應輸入並顯示所需更新資訊所需的時間稱為**響應時間**。因此,在這種方法中,響應時間比聯機處理要短得多。
當對處理器的操作或資料流有嚴格的時間要求時,可以使用即時系統,並且即時系統可以用作專用應用程式中的控制裝置。即時作業系統必須具有定義明確的、固定的時間約束,否則系統將失敗。例如,科學實驗、醫學成像系統、工業控制系統、武器系統、機器人、空中交通管制系統等。
即時作業系統主要分為兩種。
硬即時系統
硬即時系統保證關鍵任務按時完成。在硬即時系統中,輔助儲存器有限或缺失,資料儲存在ROM中。這些系統幾乎從不使用虛擬記憶體。
軟即時系統
軟即時系統限制較少。關鍵即時任務優先於其他任務,並保持優先順序直到完成。與硬即時系統相比,軟即時系統的實用性有限。例如,多媒體、虛擬現實、高階科學專案(如海底探測和行星探測器)等。
作業系統 - 服務
作業系統為使用者和程式提供服務。
- 它為程式提供執行環境。
- 它為使用者提供以便捷方式執行程式的服務。
以下是作業系統提供的一些常見服務:
- 程式執行
- I/O 操作
- 檔案系統操作
- 通訊
- 錯誤檢測
- 資源分配
- 保護
程式執行
作業系統處理各種活動,從使用者程式到系統程式,例如印表機後臺處理程式、名稱伺服器、檔案伺服器等。這些活動中的每一個都被封裝為一個程序。
一個程序包含完整的執行上下文(要執行的程式碼、要操作的資料、暫存器、正在使用的作業系統資源)。以下是作業系統在程式管理方面的主要活動:
- 將程式載入到記憶體中。
- 執行程式。
- 處理程式的執行。
- 提供程序同步機制。
- 提供程序間通訊機制。
- 提供死鎖處理機制。
I/O 操作
I/O 子系統包含 I/O 裝置及其相應的驅動程式軟體。驅動程式隱藏了特定硬體裝置對使用者的特殊性。
作業系統管理使用者和裝置驅動程式之間的通訊。
- I/O 操作是指對任何檔案或任何特定 I/O 裝置進行讀或寫操作。
- 作業系統在需要時提供對所需 I/O 裝置的訪問。
檔案系統操作
檔案表示相關資訊的集合。為了長期儲存的目的,計算機可以將檔案儲存在磁碟(輔助儲存器)上。儲存介質的示例包括磁帶、磁磁碟和光碟驅動器(如CD、DVD)。這些介質中的每一個都有其自身的屬性,例如速度、容量、資料傳輸速率和資料訪問方法。
檔案系統通常組織成目錄,以便於導航和使用。這些目錄可能包含檔案和其他目錄。以下是作業系統在檔案管理方面的主要活動:
- 程式需要讀取或寫入檔案。
- 作業系統授予程式對檔案的操作許可權。
- 許可權範圍從只讀、讀寫到拒絕訪問等。
- 作業系統為使用者提供建立/刪除檔案的介面。
- 作業系統為使用者提供建立/刪除目錄的介面。
- 作業系統提供建立檔案系統備份的介面。
通訊
對於分散式系統(一系列不共享記憶體、外圍裝置或時鐘的處理器),作業系統管理所有程序之間的通訊。多個程序透過網路中的通訊線路相互通訊。
作業系統處理路由和連線策略,以及爭用和安全問題。以下是作業系統在通訊方面的主要活動:
- 兩個程序通常需要在它們之間傳輸資料。
- 這兩個程序可以位於一臺計算機上,也可以位於不同的計算機上,但透過計算機網路連線。
- 通訊可以透過兩種方法實現:共享記憶體或訊息傳遞。
錯誤處理
錯誤隨時隨地都可能發生。錯誤可能發生在 CPU、I/O 裝置或記憶體硬體中。以下是作業系統在錯誤處理方面的主要活動:
- 作業系統持續檢查可能的錯誤。
- 作業系統採取適當的措施以確保正確和一致的計算。
資源管理
在多使用者或多工環境中,主記憶體、CPU 週期和檔案儲存等資源需要分配給每個使用者或作業。以下是作業系統在資源管理方面的主要活動:
- 作業系統使用排程程式管理各種資源。
- CPU 排程演算法用於更好地利用 CPU。
保護
考慮到具有多個使用者和多個程序併發執行的計算機系統,各個程序必須受到保護,以免受到彼此活動的干擾。
保護是指一種機制或方法,用於控制程式、程序或使用者對計算機系統定義的資源的訪問。以下是作業系統在保護方面的主要活動:
- 作業系統確保對系統資源的所有訪問都受到控制。
- 作業系統確保外部 I/O 裝置免受無效的訪問嘗試。
- 作業系統透過密碼為每個使用者提供身份驗證功能。
作業系統 - 屬性
批處理
批處理是一種技術,其中作業系統在處理開始之前將程式和資料一起收集到批處理中。作業系統執行與批處理相關的以下活動:
作業系統定義一個作業,該作業具有預定義的命令、程式和資料序列作為單個單元。
作業系統在記憶體中保留一定數量的作業,並在沒有任何人工干預的情況下執行它們。
作業按提交順序處理,即先到先服務方式。
作業完成執行後,其記憶體被釋放,作業的輸出被複制到輸出池中,以便稍後列印或處理。
優點
批處理將操作員的大部分工作轉移到計算機上。
效能提升,因為新的作業在之前的作業完成後的立即啟動,無需人工干預。
缺點
- 難以除錯程式。
- 作業可能進入無限迴圈。
- 由於缺乏保護方案,一個批處理作業可能會影響待處理的作業。
多工處理
多工處理是指 CPU 透過在多個作業之間切換來同時執行多個作業。切換髮生得非常頻繁,以至於使用者可以在程式執行時與每個程式進行互動。作業系統執行與多工處理相關的以下活動:
使用者直接向作業系統或程式發出指令,並立即收到響應。
作業系統以可以同時處理多個操作/執行多個程式的方式來處理多工處理。
多工作業系統也稱為分時系統。
這些作業系統是為了以合理的成本提供計算機系統的互動式使用而開發的。
分時作業系統使用 CPU 排程和多道程式設計的概念,為每個使用者提供分時 CPU 的一小部分時間。
每個使用者在記憶體中至少有一個單獨的程式。
載入到記憶體中並正在執行的程式通常稱為程序。
程序執行時,通常只執行很短的時間,然後才會完成或需要執行 I/O。
由於互動式 I/O 通常以較慢的速度執行,因此完成可能需要很長時間。在此期間,另一個程序可以使用 CPU。
作業系統允許使用者同時共享計算機。由於分時系統中的每個操作或命令都傾向於很短,因此每個使用者只需要很少的 CPU 時間。
當系統快速地將 CPU 從一個使用者/程式切換到另一個使用者/程式時,每個使用者都會產生擁有自己的 CPU 的印象,而實際上只有一個 CPU 被許多使用者共享。
多道程式設計
當兩個或多個程式同時駐留在記憶體中時共享處理器,稱為多道程式設計。多道程式設計假設單個共享處理器。多道程式設計透過組織作業來提高 CPU 利用率,以便 CPU 始終有一個作業可執行。
下圖顯示了多道程式設計系統的記憶體佈局。(此處應插入圖片)
作業系統執行與多道程式設計相關的以下活動。
作業系統同時在記憶體中保留多個作業。
這組作業是作業池中保留的作業的子集。
作業系統選擇並開始執行記憶體中的一個作業。
多道程式設計作業系統使用記憶體管理程式監視所有活動程式和系統資源的狀態,以確保 CPU 從不空閒,除非沒有作業可處理。
優點
- 高且高效的 CPU 利用率。
- 使用者感覺許多程式幾乎同時分配了 CPU。
缺點
- 需要 CPU 排程。
- 為了在記憶體中容納許多作業,需要記憶體管理。
互動性
互動性是指使用者與計算機系統互動的能力。作業系統執行與互動性相關的以下活動:
- 為使用者提供與系統互動的介面。
- 管理輸入裝置以接收使用者的輸入。例如,鍵盤。
- 管理輸出裝置以向用戶顯示輸出。例如,顯示器。
作業系統的響應時間需要很短,因為使用者提交併等待結果。
即時系統
即時系統通常是專用的嵌入式系統。作業系統執行與即時系統活動相關的以下活動。
- 在這些系統中,作業系統通常從感測器資料讀取並對其做出反應。
- 作業系統必須保證在固定時間段內對事件做出響應,以確保正確的效能。
分散式環境
分散式環境是指計算機系統中的多個獨立 CPU 或處理器。作業系統執行與分散式環境相關的以下活動:
作業系統在多個物理處理器之間分配計算邏輯。
處理器不共享記憶體或時鐘。相反,每個處理器都有自己的本地記憶體。
作業系統管理處理器之間的通訊。它們透過各種通訊線路相互通訊。
假離線
假離線是同時外圍操作線上的縮寫。假離線是指將各種 I/O 作業的資料放入緩衝區。該緩衝區是記憶體或硬碟中一個特殊的區域,I/O 裝置可以訪問該區域。
作業系統執行與分散式環境相關的以下活動:
處理 I/O 裝置資料假離線,因為裝置具有不同的資料訪問速率。
維護假離線緩衝區,該緩衝區提供一個等待站,資料可以在較慢的裝置趕上來時在此處停留。
由於卷軸處理(spooling)過程可以並行執行I/O操作,因此可以保持平行計算。計算機可以同時從磁帶讀取資料、向磁碟寫入資料以及向磁帶印表機輸出資料,同時執行其計算任務。
優點
- 卷軸操作使用磁碟作為非常大的緩衝區。
- 卷軸能夠將一個作業的I/O操作與另一個作業的處理器操作重疊。
作業系統 - 程序
程序
程序基本上是正在執行的程式。程序的執行必須以順序方式進行。
程序定義為代表系統中要實現的基本工作單元的實體。
簡單來說,我們將計算機程式寫入文字檔案,當我們執行此程式時,它就變成了一個執行程式中所有任務的程序。
當程式載入到記憶體中併成為一個程序時,它可以分為四個部分——堆疊、堆、文字和資料。下圖顯示了主記憶體中程序的簡化佈局:
| 序號 | 組成部分及描述 |
|---|---|
| 1 | 堆疊 程序堆疊包含臨時資料,例如方法/函式引數、返回地址和區域性變數。 |
| 2 | 堆 這是在執行時動態分配給程序的記憶體。 |
| 3 | 文字 這包括由程式計數器的值和處理器暫存器的內容表示的當前活動。 |
| 4 | 資料 此部分包含全域性變數和靜態變數。 |
程式
程式是一段程式碼,可以是一行或數百萬行。計算機程式通常由計算機程式設計師使用程式語言編寫。例如,這是一個用C語言編寫的簡單程式:
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
計算機程式是由一系列指令組成的集合,當計算機執行這些指令時,會執行特定的任務。當我們將程式與程序進行比較時,我們可以得出結論:程序是計算機程式的動態例項。
執行明確定義的任務的計算機程式的一部分稱為演算法。計算機程式、庫和相關資料的集合稱為軟體。
程序生命週期
當程序執行時,它會經過不同的狀態。這些階段在不同的作業系統中可能有所不同,這些狀態的名稱也不規範。
一般來說,程序一次可以處於以下五種狀態之一。
| 序號 | 狀態及描述 |
|---|---|
| 1 |
開始 這是程序首次啟動/建立時的初始狀態。 |
| 2 |
就緒 程序正在等待分配到處理器。就緒程序正在等待作業系統為其分配處理器,以便它們可以執行。程序可能在開始狀態後進入此狀態,或者在執行過程中被排程程式中斷以將CPU分配給其他程序。 |
| 3 | 執行 一旦作業系統排程程式將程序分配給處理器,程序狀態將設定為執行,並且處理器將執行其指令。 |
| 4 | 等待 如果程序需要等待資源(例如等待使用者輸入或等待檔案可用),則程序將進入等待狀態。 |
| 5 | 終止或退出 一旦程序完成執行或被作業系統終止,它將被移至終止狀態,在那裡等待從主記憶體中刪除。 |
程序控制塊 (PCB)
程序控制塊是作業系統為每個程序維護的資料結構。PCB 由一個整數程序 ID (PID) 標識。PCB 保持跟蹤程序所需的所有資訊,如下表所示:
| 序號 | 資訊及描述 |
|---|---|
| 1 | 程序狀態 程序的當前狀態,即它是否就緒、執行、等待或其他狀態。 |
| 2 | 程序許可權 這是允許/不允許訪問系統資源所必需的。 |
| 3 | 程序ID 作業系統中每個程序的唯一標識。 |
| 4 | 指標 指向父程序的指標。 |
| 5 | 程式計數器 程式計數器是指向此程序要執行的下一條指令的地址的指標。 |
| 6 | CPU暫存器 程序在執行狀態下需要儲存在其中的各種CPU暫存器。 |
| 7 | CPU排程資訊 程序優先順序和其他排程資訊,這些資訊是排程程序所必需的。 |
| 8 | 記憶體管理資訊 這包括頁面表、記憶體限制、段表的資訊,具體取決於作業系統使用的記憶體。 |
| 9 | 會計資訊 這包括程序執行使用的CPU數量、時間限制、執行ID等。 |
| 10 | I/O狀態資訊 這包括分配給程序的I/O裝置列表。 |
PCB的架構完全取決於作業系統,並且在不同的作業系統中可能包含不同的資訊。這是一個簡化的PCB示意圖:
在程序的整個生命週期中都為其維護PCB,並且一旦程序終止,PCB就會被刪除。
作業系統 - 程序排程
定義
程序排程是程序管理器處理從CPU中移除正在執行的程序以及根據特定策略選擇另一個程序的活動。
程序排程是多道程式作業系統的重要組成部分。這種作業系統允許將多個程序同時載入到可執行記憶體中,並且載入的程序使用時間多路複用來共享CPU。
程序排程佇列
作業系統將所有PCB儲存在程序排程佇列中。作業系統為每個程序狀態維護一個單獨的佇列,並且處於相同執行狀態的所有程序的PCB都放置在同一個佇列中。當程序的狀態發生變化時,其PCB將從其當前佇列中解鏈,並移動到其新的狀態佇列。
作業系統維護以下重要的程序排程佇列:
作業佇列 - 此佇列保留系統中的所有程序。
就緒佇列 - 此佇列保留駐留在主記憶體中、已準備好並等待執行的所有程序的集合。新程序總是放入此佇列。
裝置佇列 - 由於I/O裝置不可用而被阻塞的程序構成此佇列。
作業系統可以使用不同的策略來管理每個佇列(FIFO、輪詢、優先順序等)。作業系統排程程式確定如何將程序在就緒佇列和執行佇列之間移動,執行佇列在系統上每個處理器核心只能有一個條目;在上圖中,它已與CPU合併。
二態程序模型
二態程序模型指的是執行狀態和非執行狀態,如下所述:
| 序號 | 狀態及描述 |
|---|---|
| 1 | 執行 當建立一個新程序時,它將作為執行狀態進入系統。 |
| 2 | 非執行 未執行的程序儲存在佇列中,等待輪到它們執行。佇列中的每個條目都是指向特定程序的指標。佇列使用連結串列實現。排程程式的使用如下。當程序中斷時,該程序將被轉移到等待佇列。如果程序已完成或中止,則該程序將被丟棄。在這兩種情況下,排程程式都會從佇列中選擇一個程序來執行。 |
排程程式
排程程式是特殊的系統軟體,它們以各種方式處理程序排程。它們的主要任務是選擇要提交到系統的作業,並決定執行哪個程序。排程程式有三種類型:
- 長期排程程式
- 短期排程程式
- 中期排程程式
長期排程程式
它也稱為作業排程程式。長期排程程式確定哪些程式被允許進入系統進行處理。它從佇列中選擇程序並將它們載入到記憶體中以執行。程序載入到記憶體中以進行CPU排程。
作業排程程式的主要目標是提供均衡的作業組合,例如I/O繫結和處理器繫結。它還控制多道程式設計的程度。如果多道程式設計的程度穩定,則程序建立的平均速率必須等於離開系統的程序的平均離開速率。
在某些系統上,長期排程程式可能不可用或最小化。分時作業系統沒有長期排程程式。當程序將狀態從新建更改為就緒時,則使用長期排程程式。
短期排程程式
它也稱為CPU排程程式。其主要目標是根據所選的標準提高系統性能。它是程序狀態從就緒狀態更改為執行狀態。CPU排程程式從已準備好執行的程序中選擇一個程序,併為其中一個程序分配CPU。
短期排程程式(也稱為排程程式)決定接下來執行哪個程序。短期排程程式比長期排程程式快。
中期排程程式
中期排程是交換的一部分。它從記憶體中移除程序。它降低了多道程式設計的程度。中期排程程式負責處理交換出的程序。
正在執行的程序如果發出I/O請求,可能會變為掛起狀態。掛起的程序無法朝完成方向取得任何進展。在這種情況下,為了從記憶體中移除程序併為其他程序騰出空間,將掛起的程序移動到輔助儲存器。此過程稱為交換,並且據說該程序已交換出或推出。交換可能需要改進程序組合。
排程程式比較
| 序號 | 長期排程程式 | 短期排程程式 | 中期排程程式 |
|---|---|---|---|
| 1 | 它是作業排程程式 | 它是CPU排程程式 | 它是程序交換排程程式。 |
| 2 | 速度低於短期排程程式 | 速度是其他兩種中最快的 | 速度介於短期和長期排程程式之間。 |
| 3 | 它控制多道程式設計的程度 | 它對多道程式設計的程度的控制較少 | 它降低了多道程式設計的程度。 |
| 4 | 在分時系統中幾乎不存在或最小化 | 在分時系統中也最小化 | 它是分時系統的一部分。 |
| 5 | 它從程序池中選擇程序並將其載入到記憶體中以執行。 | 它選擇那些準備執行的程序。 | 它可以將程序重新引入記憶體,並可以繼續執行。 |
上下文切換
上下文切換是一種儲存和恢復CPU在程序控制塊中狀態或上下文的機制,以便稍後可以從同一點恢復程序執行。使用此技術,上下文切換器使多個程序能夠共享單個CPU。上下文切換是多工作業系統功能的重要組成部分。
當排程程式將CPU從執行一個程序切換到執行另一個程序時,當前執行程序的狀態將儲存到程序控制塊中。在此之後,下一個要執行的程序的狀態將從其自身的PCB載入,並用於設定PC、暫存器等。此時,第二個程序可以開始執行。
上下文切換在計算上是密集型的,因為必須儲存和恢復暫存器和記憶體狀態。為了避免上下文切換時間過長,一些硬體系統採用兩組或多組處理器暫存器。當程序切換時,以下資訊將被儲存以供以後使用。
- 程式計數器
- 排程資訊
- 基址和界限暫存器值
- 當前使用的暫存器
- 已更改的狀態
- I/O狀態資訊
- 會計資訊
作業系統排程演算法
程序排程程式根據特定的排程演算法排程不同的程序分配給CPU。本章將討論六種常用的程序排程演算法:
- 先來先服務 (FCFS) 排程
- 最短作業優先 (SJN) 排程
- 優先順序排程
- 剩餘時間最短
- 輪詢 (RR) 排程
- 多級佇列排程
這些演算法要麼是**非搶佔式**的,要麼是**搶佔式**的。非搶佔式演算法的設計使得一旦一個程序進入執行狀態,它就不能被搶佔,直到它完成分配的時間,而搶佔式排程是基於優先順序的,排程程式可以在任何時候搶佔低優先順序的執行程序,只要高優先順序的程序進入就緒狀態。
先來先服務 (FCFS)
- 作業按照先來先服務的順序執行。
- 這是一種非搶佔式,可搶佔的排程演算法。
- 易於理解和實現。
- 其實現基於FIFO佇列。
- 效能較差,平均等待時間較長。
每個程序的**等待時間**如下:
| 程序 | 等待時間:服務時間 - 到達時間 |
|---|---|
| P0 | 0 - 0 = 0 |
| P1 | 5 - 1 = 4 |
| P2 | 8 - 2 = 6 |
| P3 | 16 - 3 = 13 |
平均等待時間:(0+4+6+13) / 4 = 5.75
最短作業優先 (SJN)
這也被稱為**最短作業優先**,或SJF。
這是一種非搶佔式,可搶佔的排程演算法。
最小化等待時間的最佳方法。
易於在批處理系統中實現,其中所需的CPU時間是預先知道的。
無法在互動式系統中實現,因為所需的CPU時間是未知的。
處理器應該預先知道程序需要多長時間。
已知:程序表及其到達時間、執行時間
| 程序 | 到達時間 | 執行時間 | 服務時間 |
|---|---|---|---|
| P0 | 0 | 5 | 0 |
| P1 | 1 | 3 | 5 |
| P2 | 2 | 8 | 14 |
| P3 | 3 | 6 | 8 |
每個程序的**等待時間**如下:
| 程序 | 等待時間 |
|---|---|
| P0 | 0 - 0 = 0 |
| P1 | 5 - 1 = 4 |
| P2 | 14 - 2 = 12 |
| P3 | 8 - 3 = 5 |
平均等待時間:(0 + 4 + 12 + 5)/4 = 21 / 4 = 5.25
基於優先順序的排程
優先順序排程是一種非搶佔式演算法,也是批處理系統中最常見的排程演算法之一。
每個程序都被分配一個優先順序。優先順序最高的程序將首先執行,依次類推。
具有相同優先順序的程序按照先來先服務的順序執行。
優先順序可以根據記憶體需求、時間需求或任何其他資源需求來決定。
已知:程序表及其到達時間、執行時間和優先順序。這裡我們認為1是最低優先順序。
| 程序 | 到達時間 | 執行時間 | 優先順序 | 服務時間 |
|---|---|---|---|---|
| P0 | 0 | 5 | 1 | 0 |
| P1 | 1 | 3 | 2 | 11 |
| P2 | 2 | 8 | 1 | 14 |
| P3 | 3 | 6 | 3 | 5 |
每個程序的**等待時間**如下:
| 程序 | 等待時間 |
|---|---|
| P0 | 0 - 0 = 0 |
| P1 | 11 - 1 = 10 |
| P2 | 14 - 2 = 12 |
| P3 | 5 - 3 = 2 |
平均等待時間:(0 + 10 + 12 + 2)/4 = 24 / 4 = 6
剩餘時間最短
最短剩餘時間 (SRT) 是 SJN 演算法的搶佔式版本。
處理器分配給最接近完成的作業,但它可以被一個新的、完成時間更短的就緒作業搶佔。
無法在互動式系統中實現,因為所需的CPU時間是未知的。
它通常用於批處理環境中,需要優先處理短作業。
輪詢排程
輪詢是一種搶佔式程序排程演算法。
每個程序都被提供一個固定的執行時間,這被稱為**時間片**。
一旦一個程序執行了給定的時間段,它就會被搶佔,另一個程序將執行給定的時間段。
上下文切換用於儲存被搶佔程序的狀態。
每個程序的**等待時間**如下:
| 程序 | 等待時間:服務時間 - 到達時間 |
|---|---|
| P0 | (0 - 0) + (12 - 3) = 9 |
| P1 | (3 - 1) = 2 |
| P2 | (6 - 2) + (14 - 9) + (20 - 17) = 12 |
| P3 | (9 - 3) + (17 - 12) = 11 |
平均等待時間:(9+2+12+11) / 4 = 8.5
多級佇列排程
多級佇列不是一種獨立的排程演算法。它們利用其他現有演算法對具有共同特徵的作業進行分組和排程。
- 為具有共同特徵的程序維護多個佇列。
- 每個佇列都可以有自己的排程演算法。
- 為每個佇列分配優先順序。
例如,CPU密集型作業可以安排在一個佇列中,所有I/O密集型作業安排在另一個佇列中。然後,程序排程程式交替地從每個佇列中選擇作業,並根據分配給佇列的演算法將它們分配給CPU。
作業系統 - 多執行緒
什麼是執行緒?
執行緒是透過程序程式碼的執行流,它有自己的程式計數器來跟蹤下一個要執行的指令,系統暫存器儲存其當前的工作變數,以及包含執行歷史的堆疊。
執行緒與其對等執行緒共享一些資訊,例如程式碼段、資料段和開啟的檔案。當一個執行緒改變程式碼段記憶體項時,所有其他執行緒都會看到這一點。
執行緒也稱為**輕量級程序**。執行緒透過並行性提供了一種提高應用程式效能的方法。執行緒代表了一種軟體方法,透過減少開銷來提高作業系統的效能,執行緒相當於經典程序。
每個執行緒都屬於一個程序,並且任何執行緒都不能存在於程序之外。每個執行緒代表一個單獨的控制流。執行緒已成功用於實現網路伺服器和Web伺服器。它們也為在共享記憶體多處理器上並行執行應用程式提供了合適的框架。下圖顯示了單執行緒和多執行緒程序的工作方式。
程序和執行緒的區別
| 序號 | 程序 | 執行緒 |
|---|---|---|
| 1 | 程序是重量級或資源密集型的。 | 執行緒是輕量級的,比程序佔用更少的資源。 |
| 2 | 程序切換需要與作業系統互動。 | 執行緒切換不需要與作業系統互動。 |
| 3 | 在多處理環境中,每個程序執行相同的程式碼,但擁有自己的記憶體和檔案資源。 | 所有執行緒可以共享同一組開啟的檔案、子程序。 |
| 4 | 如果一個程序被阻塞,則在第一個程序解除阻塞之前,任何其他程序都不能執行。 | 當一個執行緒被阻塞並等待時,同一任務中的第二個執行緒可以執行。 |
| 5 | 不使用執行緒的多程序使用更多資源。 | 多執行緒程序使用更少的資源。 |
| 6 | 在多程序中,每個程序獨立於其他程序執行。 | 一個執行緒可以讀取、寫入或更改另一個執行緒的資料。 |
執行緒的優點
- 執行緒最小化上下文切換時間。
- 使用執行緒可以在程序內提供併發性。
- 高效的通訊。
- 建立和上下文切換執行緒更經濟。
- 執行緒允許更大規模和效率地利用多處理器架構。
執行緒型別
執行緒的實現方式如下:
**使用者級執行緒** - 使用者管理的執行緒。
**核心級執行緒** - 作業系統管理的執行緒,作用於核心(作業系統核心)。
使用者級執行緒
在這種情況下,執行緒管理核心不知道執行緒的存在。執行緒庫包含用於建立和銷燬執行緒、線上程之間傳遞訊息和資料、排程執行緒執行以及儲存和恢復執行緒上下文的程式碼。應用程式以單個執行緒啟動。
優點
- 執行緒切換不需要核心模式許可權。
- 使用者級執行緒可以在任何作業系統上執行。
- 排程可以在使用者級執行緒中是特定於應用程式的。
- 使用者級執行緒建立和管理速度快。
缺點
- 在典型的作業系統中,大多數系統呼叫都是阻塞的。
- 多執行緒應用程式無法利用多處理。
核心級執行緒
在這種情況下,執行緒管理由核心完成。應用程式區域中沒有執行緒管理程式碼。核心執行緒直接由作業系統支援。任何應用程式都可以被程式設計為多執行緒的。應用程式中的所有執行緒都支援在一個程序內。
核心維護整個程序以及程序內各個執行緒的上下文資訊。核心的排程是基於執行緒進行的。核心在核心空間執行執行緒建立、排程和管理。核心執行緒的建立和管理通常比使用者執行緒慢。
優點
- 核心可以同時排程來自同一程序的多個執行緒到多個程序上。
- 如果程序中的一個執行緒被阻塞,核心可以排程同一程序的另一個執行緒。
- 核心例程本身可以是多執行緒的。
缺點
- 核心執行緒的建立和管理通常比使用者執行緒慢。
- 從同一程序中的一個執行緒到另一個執行緒的控制轉移需要模式切換到核心。
多執行緒模型
一些作業系統提供組合的使用者級執行緒和核心級執行緒功能。Solaris就是一個很好的結合方法的例子。在一個組合系統中,同一應用程式中的多個執行緒可以在多個處理器上並行執行,並且阻塞系統呼叫不必阻塞整個程序。多執行緒模型有三種類型
- 多對多關係。
- 多對一關係。
- 一對一關係。
多對多模型
多對多模型將任意數量的使用者執行緒多路複用到相同數量或更少的核心執行緒上。
下圖顯示了多對多執行緒模型,其中6個使用者級執行緒與6個核心級執行緒多路複用。在這個模型中,開發人員可以根據需要建立任意數量的使用者執行緒,相應的核心執行緒可以在多處理器機器上並行執行。該模型提供了對併發的最佳精度,當執行緒執行阻塞系統呼叫時,核心可以排程另一個執行緒執行。
多對一模型
多對一模型將許多使用者級執行緒對映到一個核心級執行緒。執行緒管理由使用者空間中的執行緒庫完成。當執行緒進行阻塞系統呼叫時,整個程序將被阻塞。一次只有一個執行緒可以訪問核心,因此多個執行緒無法在多處理器上並行執行。
如果使用者級執行緒庫在作業系統中以系統不支援的方式實現,則核心執行緒使用多對一關係模式。
一對一模型
使用者級執行緒與核心級執行緒之間存在一對一的關係。該模型比多對一模型提供更多的併發性。當執行緒進行阻塞系統呼叫時,它也允許另一個執行緒執行。它支援在微處理器上並行執行多個執行緒。
這種模型的缺點是建立使用者執行緒需要相應的核心執行緒。OS/2、Windows NT和Windows 2000使用一對一的關係模型。
使用者級執行緒與核心級執行緒的區別
| 序號 | 使用者級執行緒 | 核心級執行緒 |
|---|---|---|
| 1 | 使用者級執行緒建立和管理速度更快。 | 核心級執行緒建立和管理速度較慢。 |
| 2 | 透過使用者級的執行緒庫實現。 | 作業系統支援建立核心執行緒。 |
| 3 | 使用者級執行緒是通用的,可以在任何作業系統上執行。 | 核心級執行緒是特定於作業系統的。 |
| 4 | 多執行緒應用程式無法利用多處理。 | 核心例程本身可以是多執行緒的。 |
作業系統 - 記憶體管理
記憶體管理是作業系統的功能,它處理或管理主記憶體,並在執行過程中將程序在主記憶體和磁碟之間移動。記憶體管理跟蹤每個記憶體位置,無論它是否分配給某個程序或它是空閒的。它檢查要分配給程序的記憶體量。它決定哪個程序將在何時獲得記憶體。它跟蹤何時一些記憶體被釋放或未分配,並相應地更新狀態。
本教程將教你與記憶體管理相關的基本概念。
程序地址空間
程序地址空間是程序在其程式碼中引用的邏輯地址集。例如,當使用32位定址時,地址範圍可以從0到0x7fffffff;也就是說,2^31個可能的數字,理論總大小為2GB。
作業系統負責在向程式分配記憶體時將邏輯地址對映到物理地址。在分配記憶體之前和之後,程式中使用了三種類型的地址:
| 序號 | 記憶體地址及說明 |
|---|---|
| 1 |
符號地址 在原始碼中使用的地址。變數名、常量和指令標籤是符號地址空間的基本元素。 |
| 2 |
相對地址 在編譯時,編譯器將符號地址轉換為相對地址。 |
| 3 | 物理地址 載入器在程式載入到主記憶體時生成這些地址。 |
在編譯時和載入時地址繫結方案中,虛擬地址和物理地址相同。在執行時地址繫結方案中,虛擬地址和物理地址不同。
程式生成的所有邏輯地址的集合稱為**邏輯地址空間**。與這些邏輯地址對應的所有物理地址的集合稱為**物理地址空間**。
虛擬地址到物理地址的執行時對映由記憶體管理單元 (MMU) 完成,MMU 是一種硬體裝置。MMU 使用以下機制將虛擬地址轉換為物理地址。
基址暫存器的值加到使用者程序生成的每個地址上,在傳送到記憶體時將其視為偏移量。例如,如果基址暫存器值為10000,則使用者嘗試使用地址位置100將動態重新分配到位置10100。
使用者程式處理虛擬地址;它永遠不會看到實際的物理地址。
靜態載入與動態載入
在開發計算機程式時需要選擇靜態載入或動態載入。如果必須靜態載入程式,則在編譯時,將編譯和連結完整的程式,而不會留下任何外部程式或模組依賴項。連結器將目標程式與其他必要的目標模組組合成一個絕對程式,其中也包括邏輯地址。
如果編寫的是動態載入程式,則編譯器將編譯程式,並且對於要動態包含的所有模組,僅提供引用,其餘工作將在執行時完成。
在載入時,使用**靜態載入**,將絕對程式(和資料)載入到記憶體中以啟動執行。
如果使用**動態載入**,庫的動態例程將以可重定位的形式儲存在磁碟上,並且僅在程式需要時才載入到記憶體中。
靜態連結與動態連結
如上所述,當使用靜態連結時,連結器將程式所需的所有其他模組組合到單個可執行程式中,以避免任何執行時依賴項。
當使用動態連結時,不需要將實際的模組或庫與程式連結,而是在編譯和連結時提供對動態模組的引用。Windows中的動態連結庫 (DLL) 和Unix中的共享物件是動態庫的良好示例。
交換
交換是一種機制,其中可以暫時將程序從主記憶體(或移動)交換到輔助儲存器(磁碟),並將該記憶體提供給其他程序。在稍後的某個時間,系統將程序從輔助儲存器交換回主記憶體。
雖然交換程序通常會影響效能,但它有助於並行執行多個大型程序,這就是**交換也稱為記憶體壓縮技術**的原因。
交換過程的總時間包括將整個程序移動到輔助磁碟然後將其複製回記憶體所需的時間,以及程序恢復主記憶體所需的時間。
讓我們假設使用者程序的大小為2048KB,並且進行交換的標準硬碟的資料傳輸速率約為每秒1MB。將1000K程序實際傳輸到記憶體或從記憶體傳輸需要
2048KB / 1024KB per second = 2 seconds = 2000 milliseconds
現在考慮進出時間,它將需要完整的4000毫秒加上其他開銷,其中程序競爭以恢復主記憶體。
記憶體分配
主記憶體通常有兩個分割槽:
**低記憶體** - 作業系統駐留在該記憶體中。
**高記憶體** - 使用者程序儲存在高記憶體中。
作業系統使用以下記憶體分配機制。
| 序號 | 記憶體分配及說明 |
|---|---|
| 1 | 單分割槽分配 在這種型別的分配中,使用重定位暫存器方案來保護使用者程序彼此不受影響,並防止更改作業系統程式碼和資料。重定位暫存器包含最小物理地址的值,而限制暫存器包含邏輯地址的範圍。每個邏輯地址都必須小於限制暫存器。 |
| 2 | 多分割槽分配 在這種型別的分配中,主記憶體被劃分為多個固定大小的分割槽,每個分割槽應只包含一個程序。當分割槽空閒時,從輸入佇列中選擇一個程序並將其載入到空閒分割槽中。當程序終止時,該分割槽可用於另一個程序。 |
碎片
隨著程序載入到記憶體和從記憶體中刪除,空閒記憶體空間被分割成小塊。有時會發生這種情況,由於程序大小較小,因此無法將程序分配到記憶體塊,並且記憶體塊保持未使用狀態。這個問題稱為碎片。
碎片分為兩種型別:
| 序號 | 碎片及說明 |
|---|---|
| 1 | 外部碎片 總記憶體空間足以滿足請求或在其上駐留程序,但它不連續,因此無法使用。 |
| 2 | 內部碎片 分配給程序的記憶體塊較大。部分記憶體未被使用,因為它不能被另一個程序使用。 |
下圖顯示了碎片如何導致記憶體浪費以及如何使用壓縮技術從碎片記憶體中建立更多空閒記憶體:
可以透過壓縮或整理記憶體內容來減少外部碎片,以便將所有空閒記憶體放在一個大的塊中。為了使壓縮可行,重定位應該是動態的。
可以透過有效地分配最小但足夠大的分割槽來減少內部碎片。
分頁
計算機可以定址的記憶體量超過系統上實際安裝的記憶體量。這部分額外的記憶體實際上稱為虛擬記憶體,它是硬碟的一個部分,用於模擬計算機的RAM。分頁技術在實現虛擬記憶體中起著重要作用。
分頁是一種記憶體管理技術,其中程序地址空間被分成相同大小的塊,稱為**頁**(大小為2的冪,介於512位元組和8192位元組之間)。程序的大小以頁數來衡量。
類似地,主記憶體被分成稱為**幀**的小型固定大小的(物理)記憶體塊,並且幀的大小與頁的大小相同,以最佳化主記憶體的利用率並避免外部碎片。
地址轉換
頁地址稱為**邏輯地址**,用**頁號**和**偏移量**表示。
Logical Address = Page number + page offset
幀地址稱為**物理地址**,用**幀號**和**偏移量**表示。
Physical Address = Frame number + page offset
一個稱為**頁表**的資料結構用於跟蹤程序的頁與物理記憶體中幀之間的關係。
當系統將幀分配給任何頁時,它會將此邏輯地址轉換為物理地址,並在頁表中建立條目,以便在程式執行期間使用。
當要執行程序時,其相應的頁將載入到任何可用的記憶體幀中。假設您有一個8KB的程式,但您的記憶體在給定時間點只能容納5KB,那麼分頁概念就會出現。當計算機記憶體不足時,作業系統 (OS) 將將空閒或不需要的記憶體頁移動到輔助記憶體,以便為其他程序釋放RAM,並在程式需要時將其取回。
此過程在程式的整個執行過程中持續進行,其中作業系統不斷將空閒頁從主記憶體中刪除並將其寫入輔助記憶體,並在程式需要時將其取回。
分頁的優缺點
以下是分頁的優缺點列表:
分頁減少了外部碎片,但仍然存在內部碎片。
分頁易於實現,並被認為是一種有效的記憶體管理技術。
由於頁和幀的大小相等,因此交換變得非常容易。
頁表需要額外的記憶體空間,因此對於RAM較小的系統可能不太好。
分段
分段是一種記憶體管理技術,其中每個作業被分成幾個不同大小的段,每個段包含執行相關功能的片段。每個段實際上是程式的不同邏輯地址空間。
當要執行程序時,其對應的段將載入到非連續記憶體中,儘管每個段都載入到可用的連續記憶體塊中。
分段記憶體管理的工作方式與分頁非常相似,但這裡的段是可變長度的,而分頁中的頁是固定大小的。
程式段包含程式的主函式、實用函式、資料結構等等。作業系統為每個程序維護一個段對映表,以及包含段號、大小和主存中對應記憶體位置的空閒記憶體塊列表。表中為每個段儲存段的起始地址和長度。記憶體位置的引用包括標識段的值和偏移量。
作業系統 - 虛擬記憶體
計算機可以定址的記憶體量超過系統實際安裝的物理記憶體量。這部分額外的記憶體實際上稱為虛擬記憶體,它是硬碟上的一部分割槽域,用於模擬計算機的RAM。
這種方案的主要可見優勢在於程式可以大於物理記憶體。虛擬記憶體有兩個用途。首先,它允許我們透過使用磁碟來擴充套件物理記憶體的使用。其次,它允許我們擁有記憶體保護,因為每個虛擬地址都轉換為物理地址。
以下是一些不需要將整個程式完全載入到主記憶體的情況。
使用者編寫的錯誤處理例程僅在資料或計算中發生錯誤時使用。
程式的某些選項和功能可能很少使用。
許多表被分配了固定數量的地址空間,即使實際上只使用了表的一小部分。
能夠執行僅部分載入到記憶體中的程式會抵消許多好處。
載入或交換每個使用者程式到記憶體所需的I/O次數會減少。
程式將不再受可用物理記憶體量的限制。
每個使用者程式可以使用更少的物理記憶體,可以同時執行更多程式,從而提高CPU利用率和吞吐量。
現代用於通用用途的微處理器內建了記憶體管理單元 (MMU)。MMU 的工作是將虛擬地址轉換為物理地址。下面給出一個基本的例子:
虛擬記憶體通常透過按需分頁來實現。它也可以在分段系統中實現。按需分段也可以用於提供虛擬記憶體。
按需分頁
按需分頁系統與帶交換的分頁系統非常相似,其中程序駐留在輔助儲存器中,頁面僅按需載入,而不是預先載入。當發生上下文切換時,作業系統不會將任何舊程式的頁面複製到磁碟,也不會將任何新程式的頁面複製到主記憶體。相反,它只在載入第一頁後開始執行新程式,並在引用時獲取該程式的頁面。
在執行程式期間,如果程式引用一個在主記憶體中不可用的頁面(因為它不久前被交換出去了),處理器將此無效記憶體引用視為頁面錯誤,並將控制權從程式轉移到作業系統,以請求將頁面調回記憶體。
優點
以下是按需分頁的優點:
- 大型虛擬記憶體。
- 更有效地利用記憶體。
- 多道程式設計的程度沒有限制。
缺點
處理頁面中斷所需的表數量和處理器開銷大於簡單的分頁管理技術。
頁面置換演算法
頁面置換演算法是作業系統用來決定哪些記憶體頁面需要交換出去,寫入磁碟的技術,當需要分配記憶體頁面時。當發生頁面錯誤並且無法使用空閒頁面進行分配時發生分頁,原因是頁面不可用或空閒頁面的數量少於所需頁面。
當選擇的要替換並已分頁出的頁面再次被引用時,它必須從磁碟讀取,這需要I/O完成。這個過程決定了頁面置換演算法的質量:等待頁面調入的時間越短,演算法越好。
頁面置換演算法檢視硬體提供的關於訪問頁面的有限資訊,並嘗試選擇哪些頁面應該被替換以最大限度地減少頁面錯誤的總數,同時平衡主儲存器的成本和演算法本身的處理器時間。有很多不同的頁面置換演算法。我們透過在一個特定的記憶體引用字串上執行演算法並計算頁面錯誤的數量來評估演算法。
引用串
記憶體引用的字串稱為引用串。引用串是人工生成的,或者透過跟蹤給定的系統並記錄每個記憶體引用的地址來生成的。後者會產生大量資料,我們要注意兩點。
對於給定的頁面大小,我們只需要考慮頁號,而不是整個地址。
如果我們有一個對頁面p的引用,那麼任何緊隨其後的對頁面p的引用都不會導致頁面錯誤。頁面p將在第一次引用後駐留在記憶體中;緊隨其後的引用不會出錯。
例如,考慮以下地址序列:123, 215, 600, 1234, 76, 96
如果頁面大小為100,則引用串為1, 2, 6, 12, 0, 0
先進先出 (FIFO) 演算法
主記憶體中最舊的頁面將被選擇替換。
易於實現,保持一個列表,從尾部替換頁面,並在頭部新增新頁面。
最優頁面演算法
最優頁面置換演算法具有所有演算法中最低的頁面錯誤率。存在最優頁面置換演算法,被稱為 OPT 或 MIN。
替換在最長時間內不會被使用的頁面。使用頁面將要使用的時間。
最近最少使用 (LRU) 演算法
主記憶體中使用時間最長的頁面將被選擇替換。
易於實現,保持一個列表,透過回顧時間來替換頁面。
頁面緩衝演算法
- 為了快速啟動程序,保留一個空閒幀池。
- 頁面錯誤時,選擇一個頁面進行替換。
- 將新頁面寫入空閒池的幀中,標記頁表並重新啟動程序。
- 現在將髒頁面寫入磁碟,並將包含被替換頁面的幀放入空閒池中。
最不經常使用 (LFU) 演算法
計數最小的頁面將被選擇替換。
該演算法存在這樣的情況:在程序的初始階段大量使用一個頁面,但之後再也不會使用。
最經常使用 (MFU) 演算法
該演算法基於這樣的論點:計數最小的頁面可能剛剛被調入,尚未使用。
作業系統 - I/O 硬體
作業系統的重要的工作之一是管理各種 I/O 裝置,包括滑鼠、鍵盤、觸控板、磁碟驅動器、顯示介面卡、USB 裝置、點陣圖螢幕、LED、模數轉換器、開關、網路連線、音訊 I/O、印表機等。
I/O 系統需要接收應用程式的 I/O 請求並將其傳送到物理裝置,然後接收從裝置返回的任何響應並將其傳送到應用程式。I/O 裝置可以分為兩類:
塊裝置 - 塊裝置是指驅動程式透過傳送整個資料塊進行通訊的裝置。例如,硬碟、USB攝像頭、隨身碟等。
字元裝置 - 字元裝置是指驅動程式透過傳送和接收單個字元(位元組、八位位元組)進行通訊的裝置。例如,序列埠、並口、音效卡等。
裝置控制器
裝置驅動程式是可以插入作業系統的軟體模組,用於處理特定裝置。作業系統藉助裝置驅動程式來處理所有I/O裝置。
裝置控制器充當裝置和裝置驅動程式之間的介面。I/O 單元(鍵盤、滑鼠、印表機等)通常由機械部件和電子部件組成,其中電子部件稱為裝置控制器。
每個裝置都有一個裝置控制器和一個裝置驅動程式與作業系統通訊。一個裝置控制器可能能夠處理多個裝置。作為介面,它的主要任務是將序列位元流轉換為位元組塊,並在必要時執行錯誤校正。
任何連線到計算機的裝置都透過插頭和插座連線,插座連線到裝置控制器。以下是連線 CPU、記憶體、控制器和 I/O 裝置的模型,其中 CPU 和裝置控制器都使用公共匯流排進行通訊。
同步與非同步 I/O
同步 I/O - 在此方案中,CPU 執行在 I/O 進行時等待。
非同步 I/O - I/O 與 CPU 執行併發進行。
與 I/O 裝置的通訊
CPU 必須有一種方法可以將資訊傳遞到 I/O 裝置和從 I/O 裝置接收資訊。有三種方法可用於與 CPU 和裝置通訊。
- 特殊指令 I/O
- 記憶體對映 I/O
- 直接記憶體訪問 (DMA)
特殊指令 I/O
這使用專門用於控制 I/O 裝置的 CPU 指令。這些指令通常允許將資料傳送到 I/O 裝置或從 I/O 裝置讀取資料。
記憶體對映 I/O
使用記憶體對映 I/O 時,記憶體和 I/O 裝置共享相同的地址空間。該裝置直接連線到某些主記憶體位置,以便 I/O 裝置可以將資料塊直接傳輸到記憶體或從記憶體傳輸資料,而無需經過 CPU。
使用記憶體對映 I/O 時,作業系統在記憶體中分配緩衝區並通知 I/O 裝置使用該緩衝區將資料傳送到 CPU。I/O 裝置與 CPU 非同步執行,在完成時中斷 CPU。
這種方法的優點是每個可以訪問記憶體的指令都可以用來操作 I/O 裝置。記憶體對映 I/O 用於大多數高速 I/O 裝置,如磁碟、通訊介面。
直接記憶體訪問 (DMA)
像鍵盤這樣的慢速裝置會在傳輸每個位元組後向主 CPU 生成中斷。如果像磁碟這樣的快速裝置為每個位元組生成中斷,作業系統將花費大部分時間處理這些中斷。因此,典型的計算機使用直接記憶體訪問 (DMA) 硬體來減少這種開銷。
直接記憶體訪問 (DMA) 意味著 CPU 將讀取或寫入記憶體的許可權授予 I/O 模組,而無需參與。DMA 模組本身控制主記憶體和 I/O 裝置之間的資料交換。CPU 僅參與傳輸的開始和結束,並且僅在整個塊傳輸完成後才中斷。
直接記憶體訪問需要一個稱為 DMA 控制器 (DMAC) 的特殊硬體,該硬體管理資料傳輸並仲裁對系統匯流排的訪問。控制器使用源和目標指標(在哪裡讀取/寫入資料)進行程式設計,使用計數器跟蹤已傳輸的位元組數,並設定包括 I/O 和記憶體型別、中斷和 CPU 週期的狀態在內的設定。
作業系統使用DMA硬體的方式如下:
| 步驟 | 描述 |
|---|---|
| 1 | 指示裝置驅動程式將磁碟資料傳輸到緩衝區地址X。 |
| 2 | 然後,裝置驅動程式指示磁碟控制器將資料傳輸到緩衝區。 |
| 3 | 磁碟控制器啟動DMA傳輸。 |
| 4 | 磁碟控制器將每個位元組傳送到DMA控制器。 |
| 5 | DMA控制器將位元組傳輸到緩衝區,增加記憶體地址,減少計數器C,直到C變為零。 |
| 6 | 當C變為零時,DMA中斷CPU以發出傳輸完成訊號。 |
輪詢與中斷I/O
計算機必須有一種方法來檢測任何型別的輸入的到達。這可以透過兩種方式實現,分別稱為輪詢和中斷。這兩種技術都允許處理器處理任何時候可能發生的、與其當前執行的程序無關的事件。
輪詢I/O
輪詢是I/O裝置與處理器通訊的最簡單方式。週期性地檢查裝置狀態以檢視是否到了下一個I/O操作的時間,這個過程稱為輪詢。I/O裝置只需將資訊放入狀態暫存器中,處理器必須來獲取資訊。
大多數情況下,裝置不需要處理,而當一個裝置需要處理時,它必須等到輪詢程式下次對其進行詢問。這是一種低效的方法,處理器的很多時間都浪費在不必要的輪詢上。
將此方法與一位老師不斷地一個接一個地詢問班上每個學生是否需要幫助進行比較。顯然,更有效的方法是學生在需要幫助時通知老師。
中斷I/O
處理I/O的另一種方案是中斷驅動方法。中斷是裝置向微處理器發出的需要處理的訊號。
當裝置需要CPU的注意時,裝置控制器會在總線上發出中斷訊號;當CPU接收到中斷時,它會儲存其當前狀態並使用中斷向量(處理各種事件的作業系統例程的地址)呼叫相應的中斷處理程式。處理完中斷裝置後,CPU繼續執行其原始任務,就好像從未中斷過一樣。
作業系統 - I/O軟體
I/O軟體通常按以下幾層組織:
使用者級庫 - 為使用者程式提供簡單的介面來執行輸入和輸出。例如,stdio是C和C++程式語言提供的庫。
核心級模組 - 為裝置驅動程式提供與裝置控制器互動的介面,以及裝置驅動程式使用的與裝置無關的I/O模組。
硬體 - 此層包含實際的硬體和硬體控制器,它們與裝置驅動程式互動並使硬體執行。
I/O軟體設計中的一個關鍵概念是它應該是與裝置無關的,即應該能夠編寫能夠訪問任何I/O裝置的程式,而無需預先指定裝置。例如,將檔案作為輸入讀取的程式應該能夠讀取軟盤、硬碟或CD-ROM上的檔案,而無需針對每個不同的裝置修改程式。
裝置驅動程式
裝置驅動程式是可以插入作業系統的軟體模組,用於處理特定裝置。作業系統藉助裝置驅動程式來處理所有I/O裝置。裝置驅動程式封裝了與裝置相關的程式碼並實現了標準介面,這樣程式碼就包含了與裝置相關的暫存器讀/寫操作。裝置驅動程式通常由裝置製造商編寫,並隨裝置一起在CD-ROM上提供。
裝置驅動程式執行以下任務:
- 接受來自上層裝置無關軟體的請求。
- 與裝置控制器互動以進行I/O操作並執行必要的錯誤處理。
- 確保請求成功執行。
裝置驅動程式處理請求的方式如下:假設有一個讀取塊N的請求。如果驅動程式當時空閒,則立即開始執行請求。否則,如果驅動程式正忙於處理其他請求,則將新請求放入掛起請求佇列中。
中斷處理程式
中斷處理程式,也稱為中斷服務例程或ISR,是作業系統或更具體地說是在裝置驅動程式中的一段軟體或更具體地說是一個回撥函式,其執行由接收中斷觸發。
當中斷髮生時,中斷程式會執行必要的操作以處理中斷,更新資料結構並喚醒正在等待中斷髮生的程序。
中斷機制接受一個地址——一個數字,它從一小組中選擇一個特定的中斷處理例程/函式。在大多數架構中,此地址是在稱為中斷向量表的表中儲存的偏移量。該向量包含專用中斷處理程式的記憶體地址。
與裝置無關的I/O軟體
與裝置無關的軟體的基本功能是執行所有裝置通用的I/O功能,併為使用者級軟體提供統一的介面。雖然很難編寫完全與裝置無關的軟體,但我們可以編寫一些所有裝置通用的模組。以下是與裝置無關的I/O軟體的功能列表:
- 裝置驅動程式的統一介面
- 裝置命名 - 助記符名稱對映到主裝置號和次裝置號
- 裝置保護
- 提供與裝置無關的塊大小
- 緩衝,因為來自裝置的資料無法儲存在最終目的地。
- 塊裝置上的儲存分配
- 分配和釋放專用裝置
- 錯誤報告
使用者空間I/O軟體
這些是提供更豐富和簡化的介面來訪問核心功能或最終與裝置驅動程式互動的庫。大多數使用者級I/O軟體由庫過程組成,一些例外情況,例如後臺列印系統,它是在多程式設計系統中處理專用I/O裝置的一種方式。
I/O庫(例如,stdio)位於使用者空間,以提供與作業系統駐留的與裝置無關的I/O軟體的介面。例如,putchar()、getchar()、printf()和scanf()是C程式語言中可用的使用者級I/O庫stdio的示例。
核心I/O子系統
核心I/O子系統負責提供許多與I/O相關的服務。以下是提供的一些服務。
排程 - 核心排程一組I/O請求以確定執行它們的良好順序。當應用程式發出阻塞I/O系統呼叫時,請求將被放入該裝置的佇列中。核心I/O排程程式重新安排佇列的順序以提高整體系統效率和應用程式體驗的平均響應時間。
緩衝 - 核心I/O子系統維護一個稱為緩衝區的記憶體區域,該區域在兩個裝置之間或裝置與應用程式操作之間傳輸資料時儲存資料。緩衝是為了應對資料流的生產者和消費者之間的速度不匹配,或者適應具有不同資料傳輸大小的裝置。
快取 - 核心維護快取記憶體,這是一個儲存資料副本的快速記憶體區域。訪問快取副本比訪問原始副本更有效。
後臺列印和裝置預留 - 後臺列印是一個緩衝區,用於儲存裝置(例如印表機)的輸出,這些裝置無法接受交錯的資料流。後臺列印系統一次將一個排隊的後臺列印檔案複製到印表機。在某些作業系統中,後臺列印由系統守護程序管理。在其他作業系統中,它由核心執行緒處理。
錯誤處理 - 使用受保護記憶體的作業系統可以防止許多型別的硬體和應用程式錯誤。
作業系統 - 檔案系統
檔案
檔案是記錄在輔助儲存器(例如磁磁碟、磁帶和光碟)上的相關資訊的命名集合。一般來說,檔案是一系列位、位元組、行或記錄,其含義由檔案的建立者和使用者定義。
檔案結構
檔案結構應符合作業系統可以理解的所需格式。
檔案根據其型別具有某種定義的結構。
文字檔案是由字元組成的一系列行。
原始檔是一系列過程和函式。
目標檔案是由位元組組成的一系列塊,機器可以理解。
當作業系統定義不同的檔案結構時,它還包含支援這些檔案結構的程式碼。Unix、MS-DOS支援最少數量的檔案結構。
檔案型別
檔案型別是指作業系統區分不同型別檔案(例如文字檔案、原始檔和二進位制檔案等)的能力。許多作業系統支援許多型別的檔案。像MS-DOS和UNIX這樣的作業系統具有以下型別的檔案:
普通檔案
- 這些檔案包含使用者資訊。
- 它們可能包含文字、資料庫或可執行程式。
- 使用者可以對這些檔案應用各種操作,例如新增、修改、刪除甚至刪除整個檔案。
目錄檔案
- 這些檔案包含檔名列表以及與這些檔案相關的其他資訊。
特殊檔案
- 這些檔案也稱為裝置檔案。
- 這些檔案代表物理裝置,例如磁碟、終端、印表機、網路、磁帶驅動器等。
這些檔案有兩種型別:
字元特殊檔案 - 資料逐個字元處理,例如終端或印表機。
塊特殊檔案 - 資料按塊處理,例如磁碟和磁帶。
檔案訪問機制
檔案訪問機制是指訪問檔案記錄的方式。有幾種訪問檔案的方法:
- 順序訪問
- 直接/隨機訪問
- 索引順序訪問
順序訪問
順序訪問是指按某種順序訪問記錄,即按順序處理檔案中的資訊,一次處理一條記錄。這種訪問方法是最原始的一種。示例:編譯器通常以這種方式訪問檔案。
直接/隨機訪問
隨機訪問檔案組織提供直接訪問記錄的功能。
每個記錄在檔案中都有其自身的地址,藉助該地址可以直接訪問記錄進行讀取或寫入。
記錄在檔案內不必按任何順序排列,也不必在儲存介質上的相鄰位置。
索引順序訪問
- 此機制建立在順序訪問的基礎上。
- 為每個檔案建立一個索引,其中包含指向各個塊的指標。
- 順序搜尋索引,並使用其指標直接訪問檔案。
空間分配
檔案由作業系統分配磁碟空間。作業系統採用以下三種主要方式為檔案分配磁碟空間。
- 連續分配
- 連結分配
- 索引分配
連續分配
- 每個檔案在磁碟上佔用一個連續的地址空間。
- 分配的磁碟地址按線性順序排列。
- 易於實現。
- 外部碎片是這種分配技術的重大問題。
連結分配
- 每個檔案都包含一個指向磁碟塊的連結列表。
- 目錄包含指向檔案第一個塊的連結/指標。
- 沒有外部碎片
- 有效地用於順序訪問檔案。
- 在直接訪問檔案中效率低下。
索引分配
- 解決了連續分配和連結分配的問題。
- 建立一個索引塊,其中包含所有指向檔案的指標。
- 每個檔案都有自己的索引塊,其中儲存檔案佔用的磁碟空間地址。
- 目錄包含檔案的索引塊地址。
作業系統 - 安全性
安全性是指為計算機系統資源(例如CPU、記憶體、磁碟、軟體程式以及最重要的是儲存在計算機系統中的資料/資訊)提供保護系統。如果未經授權的使用者執行計算機程式,則他/她可能會對計算機或其中儲存的資料造成嚴重損壞。因此,必須保護計算機系統免受未經授權的訪問、惡意訪問系統記憶體、病毒、蠕蟲等。本章將討論以下主題。
- 身份驗證
- 一次性密碼
- 程式威脅
- 系統威脅
- 計算機安全分類
身份驗證
身份驗證是指識別系統的每個使用者並將正在執行的程式與這些使用者關聯。作業系統的責任是建立一個保護系統,以確保執行特定程式的使用者是真實的。作業系統通常使用以下三種方式識別/驗證使用者:
使用者名稱/密碼 - 使用者需要輸入註冊的使用者名稱和密碼才能登入到系統。
使用者卡/金鑰 - 使用者需要在讀卡器中刷卡,或在作業系統提供的選項中輸入金鑰生成器生成的金鑰才能登入到系統。
使用者屬性 - 指紋/虹膜/簽名 - 使用者需要透過作業系統使用的指定輸入裝置傳遞其屬性才能登入到系統。
一次性密碼
一次性密碼除了正常的身份驗證外,還提供了額外的安全性。在一次性密碼系統中,每次使用者嘗試登入系統時都需要一個唯一的密碼。一次性密碼一旦使用,就不能再次使用。一次性密碼的實現方式多種多樣。
隨機數 - 為使用者提供印有數字及其對應字母的卡片。系統會隨機選擇一些字母,要求輸入對應的數字。
金鑰 - 為使用者提供可以建立與使用者 ID 對映的金鑰的硬體裝置。系統會要求輸入此金鑰,該金鑰需要在每次登入前生成。
網路密碼 - 一些商業應用程式會將一次性密碼傳送到使用者註冊的手機/郵箱,需要在登入前輸入。
程式威脅
作業系統的程序和核心執行指定的指令任務。如果使用者程式使這些程序執行惡意任務,則稱為程式威脅。程式威脅的一個常見示例是在計算機中安裝的程式,該程式可以透過網路將使用者憑據儲存併發送給某些駭客。以下是某些眾所周知的程式威脅的列表。
特洛伊木馬 - 此類程式會竊取使用者登入憑據並將它們儲存起來,傳送給惡意使用者,惡意使用者隨後可以登入到計算機並訪問系統資源。
陷阱門 - 如果設計的程式按要求工作,但在其程式碼中存在安全漏洞,並在使用者不知情的情況下執行非法操作,則稱其具有陷阱門。
邏輯炸彈 - 邏輯炸彈是指程式僅在滿足特定條件時才會出現故障,否則它會像正規程式一樣工作。它更難以檢測。
病毒 - 正如其名稱所示,病毒可以在計算機系統上自我複製。它們非常危險,可以修改/刪除使用者檔案,使系統崩潰。病毒通常是嵌入程式中的少量程式碼。當用戶訪問程式時,病毒開始嵌入其他檔案/程式中,並可能使系統無法使用。
系統威脅
系統威脅是指濫用系統服務和網路連線以給使用者帶來麻煩。系統威脅可用於在整個網路上啟動程式威脅,稱為程式攻擊。系統威脅會建立這樣的環境:濫用作業系統資源/使用者檔案。以下是某些眾所周知的系統威脅的列表。
蠕蟲 - 蠕蟲是一個程序,它可以透過將系統資源使用到極端程度來降低系統性能。蠕蟲程序會生成多個副本,每個副本都使用系統資源,阻止所有其他程序獲得所需的資源。蠕蟲程序甚至可以關閉整個網路。
埠掃描 - 埠掃描是一種機制或方法,駭客可以透過它檢測系統漏洞以對系統進行攻擊。
拒絕服務 - 拒絕服務攻擊通常會阻止使用者合法使用系統。例如,如果拒絕服務攻擊瀏覽器的內容設定,則使用者可能無法使用網際網路。
計算機安全分類
根據美國國防部可信計算機系統評估標準,計算機系統有四種安全分類:A、B、C 和 D。這是廣泛使用的規範,用於確定和建模系統和安全解決方案的安全性。以下是每種分類的簡要說明。
| 序號 | 分類型別和說明 |
|---|---|
| 1 | A 類 最高級別。使用正式的設計規範和驗證技術。授予高度的流程安全保證。 |
| 2 | B 類 提供強制保護系統。具有 C2 級系統的所有屬性。將敏感性標籤附加到每個物件。它有三種類型。
|
| 3 | C 類 使用稽核功能提供保護和使用者問責制。它有兩種型別。
|
| 4 | D 類 最低級別。最低限度的保護。MS-DOS、Window 3.1 屬於此類別。 |
作業系統 - Linux
Linux 是流行的 UNIX 作業系統版本之一。它是開源的,因為其原始碼是免費提供的。它是免費使用的。Linux 的設計考慮了與 UNIX 的相容性。其功能列表與 UNIX 非常相似。
Linux 系統元件
Linux 作業系統主要有三個元件
核心 - 核心是 Linux 的核心部分。它負責此作業系統的全部主要活動。它由各種模組組成,並直接與底層硬體互動。核心提供必要的抽象,以向系統或應用程式程式隱藏低階硬體細節。
系統庫 - 系統庫是特殊的函式或程式,應用程式程式或系統實用程式可以使用它們訪問核心的功能。這些庫實現了作業系統的絕大部分功能,不需要核心模組的程式碼訪問許可權。
系統實用程式 - 系統實用程式負責執行專門的、個體級別的任務。
核心模式與使用者模式
核心元件程式碼在稱為核心模式的特權模式下執行,可以完全訪問計算機的所有資源。此程式碼表示單個程序,在單個地址空間中執行,不需要任何上下文切換,因此非常高效和快速。核心執行每個程序並向程序提供系統服務,向程序提供對硬體的受保護訪問。
不需要在核心模式下執行的支援程式碼位於系統庫中。使用者程式和其他系統程式在使用者模式下工作,使用者模式無法訪問系統硬體和核心程式碼。使用者程式/實用程式使用系統庫訪問核心函式以獲得系統的低階任務。
基本功能
以下是 Linux 作業系統的一些重要功能。
可移植性 - 可移植性意味著軟體可以在不同型別的硬體上以相同的方式工作。Linux 核心和應用程式程式支援在其任何型別的硬體平臺上安裝。
開源 - Linux 原始碼是免費提供的,它是一個基於社群的開發專案。多個團隊協作以增強 Linux 作業系統的能力,並且它在不斷發展。
多使用者 - Linux 是一個多使用者系統,這意味著多個使用者可以同時訪問系統資源,如記憶體/RAM/應用程式程式。
多程式設計 - Linux 是一個多程式設計系統,這意味著多個應用程式可以同時執行。
分層檔案系統 - Linux 提供一個標準的檔案結構,其中系統檔案/使用者檔案被組織起來。
Shell - Linux 提供一個特殊的直譯器程式,可用於執行作業系統的命令。它可用於執行各種型別的操作,呼叫應用程式程式等。
安全性 - Linux 使用身份驗證功能(如密碼保護/對特定檔案的受控訪問/資料加密)來提供使用者安全性。
架構
下圖顯示了 Linux 系統的架構:
Linux 系統的架構由以下幾層組成:
硬體層 - 硬體包括所有外圍裝置(RAM/HDD/CPU 等)。
核心 - 它是作業系統的核心元件,直接與硬體互動,為上層元件提供低階服務。
Shell - 核心的介面,向用戶隱藏核心功能的複雜性。Shell 從使用者那裡獲取命令並執行核心的功能。
實用程式 - 提供使用者大部分作業系統功能的實用程式。
