從零開始的操作系統60分速成

前言:後天考試,一學期沒去上課啥都不會,於是從零開始學OS了。打算邊學邊寫一篇博客,一些考不到或太繁雜的知識就不說了,面向60分學習(

如果文中有錯誤還請各位大佬指出QAQ

以下內容部分參考王道論壇的《操作系統考研複習指導》(@avgstuBoboge大佬發的pdf,有水印)。



(huj:)主觀題考點:進程同步和互斥,信號量的使用,死鎖和飢餓,虛擬頁式,虛擬段頁,虛擬多級分頁,地址轉換,缺頁中斷,頁面替換,進程調度,磁盤調度。

2.進程

2.1 概述

由於多道程序環境的併發執行,各程序失去了封閉性。此時,爲了控制調度程序的併發執行,我們引入了進程的概念。

進程可以看作程序的一次執行過程,是系統進行資源分配的最小單位。進程具有以下性質:

  • 動態性:進程並非一成不變,而是具有不同的狀態和過程,動態性是進程最基本的特徵
  • 併發性:多個進程能在一段時間內同時進行,顯著提高資源利用率。
  • 獨立性:進程是獨立運行、獲得資源、接受調度的基本單位。
  • 異步性:由於進程間的相互制約,導致了進程的間斷性,這也造成了執行結果的不可再現性。因此,操作系統必須配置相應的同步機制。
  • 結構性:進程實體由程序段數據段PCB(Process Control Block)組成。

創建/撤銷進程的本質是對PCB的創建/撤銷。

未建立PCB的程序無法作爲獨立單位參與運行,即PCB是進程存在的唯一標誌

2.2 五狀態模型

上回說到,進程具有動態性,由此可見,進程通常具有以下五種狀態,其中就緒、阻塞、運行是三個基本狀態。

在這裏插入圖片描述

進程執行過程

五狀態模型下進程執行的過程,簡而言之就是:

進程正在被創建時是創建態,創建完成就進入了就緒態,當該進程被調度,得到了資源就進入了運行態,如果:

(1)運行的時候需要等待某些事件(如I/O設備)就會進入阻塞態,等到所等待的事件發生就會回到就緒態

(2)運行的時間過長,用完了當前的時間片,就會讓出資源回到就緒態

(3)運行結束,一切正常,去往終止態等待消亡。

進程在狀態間的轉移,實質上是PCB的創建、刪除、入/出隊。

進程間通信

進程間要進行數據交換,就必然需要通信方法,效率較高的進程間通信方法主要有三類:

  • 共享存儲:通信的進程擁有共享空間,通過對空間進行直接訪問可以實現進程間通信。
  • 消息傳遞:進程通過系統提供的發送/接受消息的兩個原語來進行數據交換。可以直接發送給對方,也可以發送到一箇中間實體後轉運給對方。
  • 管道通信:管道(pipe)是連接一對進程以實現它們之間通信的共享文件,管道的本質是一個固定大小的緩衝區。可以理解爲共享存儲的優化和發展。

線程

線程可以理解爲一個輕量級進程,是基本的CPU執行單元,也是程序執行流的最小單元。

一個進程中有多個線程,線程不擁有系統資源,但是和同一進程中的其他線程共享該進程的所有資源。提高了操作系統的併發性能。

進程可以創建進程和線程,線程只可以創建其他線程。

每個線程和進程一樣,擁有唯一的標識符。

2.3 處理機調度

三級調度

一個作業從提交至完成,往往要經歷以下三級調度:

  1. 作業調度(高級調度):按一定原則分爲資源給一或多個作業並建立相應進程。
  2. 中級調度:掛起暫時不能運行的進程至外存,使外存中可以運行的進程變爲就緒態併入隊。
  3. 進程調度(低級調度):根據調度算法將CPU分配給某個進程。進程調度是最基本的一種調度

在這裏插入圖片描述

無法調度的情況

  • 在處理中斷的過程中:中斷過程複雜且不屬於某一進程,不應被剝奪CPU資源。
  • 進程在操作系統內核程序臨界區中:進入臨界區後需要獨佔式訪問共享數據。
  • 原子操作過程中。

進程調度方式

  • 剝奪調度方式:立即暫停當前執行的進程並搶佔CPU。
  • 非剝奪調度方式:等到當前進程執行完再搶佔CPU,無法適用於分時和大多數的實時系統。

調度性能評價

  • CPU利用率。
  • 系統吞吐量:單位時間內CPU完成作業的數量。
  • 週轉時間:作業從提交到完成所經歷的時間。
  • 在這裏插入圖片描述
  • 等待時間:進程處於等待CPU狀態的時間之和。調度算法實質上影響的是等待時間
  • 響應時間:用戶提交請求到系統首次產生響應的時間。

經典調度算法

  1. FCFS算法:FCFS,就是先提交的作業先運行,屬於不可剝奪算法
  2. SJF算法:短作業優先算法,不考慮作業緊迫程度,優先選擇運行時間最短的作業。可能導致長作業長期不被調度(飢餓現象)。
  3. 優先級調度算法:根據靜態和動態優先級將CPU分配給優先級最高的作業。
  4. 高響應比優先調度算法:綜合了FCFS和SJF算法,選出 [響應比=(等待時間+執行時間)/執行時間] 最高的作業運行。
  5. 時間片輪轉調度算法:以時間片爲單位按到達時間循環執行就緒隊列中的作業,主要用於分時系統。
  6. 多級反饋隊列調度算法:上述算法之集大成者,設置多個優先級、時間片大小不同的就緒隊列。高優先級隊列在時間片內無法完成,則壓入次級隊列,最後一級隊列進行時間片輪轉調度算法。當且僅當高優先級隊列爲空時纔會運行次級隊列中的作業。

(好像只考4&5來着

2.4 同步與互斥

由於進程具有異步性,爲了讓不同程序經過調度得到確定的結果,我們需要利用原語對進程進行同步,從而得到需要的結果。

PV操作

wait(S)//P
{
    while(S<=0);
	S--;
}
signal(S)//V
{
    S++;
}

同步問題

  • 生產者-消費者問題
  • 讀者-寫者問題
  • 哲學家進餐問題
  • 吸菸者問題

具體例子就略了,書上肯定有,這裏說一下做這類題目的思考方法:

假設所有進程並行,考慮各進程之間的關係與臨界資源制約的最壞情況,利用mutexmutex達到互斥的目的。

注意NN個臨界資源時,互斥信號量的範圍爲取值(N1)1-(N-1)-1

2.5 死鎖

當P進程擁有A資源請求B資源,Q進程擁有B資源請求A資源的時候就發生了死鎖

死鎖產生的條件

  • 互斥:進程擁有的資源無法同時被多個進程佔有。
  • 不剝奪:進程所擁有的資源無法被釋放,除非該進程主動釋放。
  • 請求和保持:進程擁有着某個資源的同時請求其他資源。
  • 循環等待:進程對資源的擁有與請求形成的有向圖是一個環。

當且僅當四個條件都被滿足的時候纔會發生死鎖。

死鎖的處理策略

  • 預防:設置限制使四個條件無法全部滿足以預防死鎖
  • 避免:分配資源時防止系統進入不安全狀態。
  • 檢測及解除:及時檢測死鎖的發生並解除。

銀行家算法

銀行家算法是最著名的死鎖避免算法,核心思想是讓系統時刻處於能夠滿足所有可能需求的安全狀態

數據結構

  • Available[m]Available[m]mm種可用資源的數量。
  • Max[n][m]Max[n][m]:所有nn個進程對mm種資源的最大需求。
  • Allocation[n][m]Allocation[n][m]:所有nn個進程當前擁有mm種資源的數量。
  • Need[n][m]Need[n][m]:所有nn個進程對mm種資源的剩餘需求。

顯然有Need=MaxAllocationNeed=Max-Allocation的關係。

安全性測試

  1. 置空安全隊列。
  2. 遍歷NeedNeed,尋找不在安全隊列中且Need[i]Need[i]不大於AvaliableAvaliable的進程PiP_i,找到進入過程3,找不到進入過程4。
  3. 釋放進程PiP_i佔用的資源並將PiP_i加入隊列,回到過程2。
  4. 如果安全隊列大小爲nn則安全,否則不安全。

算法過程

  1. 根據MaxMaxAllocationAllocation求出NeedNeed
  2. 根據當前請求更新各數據結構。
  3. 進行安全性測試。
  4. 若通過測試,則可以進行當前請求。

(啊這,剛聽說很行家算法不考大題

3.內存管理

(聽huj說這塊在期末考試中佔50分,重點

3.1 內存管理概念

由於無法將所有用戶進程與系統需要的程序和數據全部放入主存中,操作系統必須將內存進行合理劃分與動態分配,這就是內存管理的概念。

內存管理的功能

  • 內存空間的動態分配與回收。
  • 邏輯地址和物理地址的轉換。
  • 內存空間的擴充。
  • 存儲保護。

連續分配管理方式

內部碎片:一個任務分區內未被使用的空間。

外部碎片:內存中未被任務分區佔用的空間。

  • 單一連續分配:按照地址順序分配相應的空間,只能用於單任務的操作系統中,效率極低。
  • 固定分區分配:將內存空間劃分成多個大小相等/不等的分區,一個分區只有一個任務,內部碎片多。
  • 動態分區分配:在進程裝入內存的時候動態建立分區,外部碎片多。

分頁存儲管理

操作系統爲進程配置頁表,頁表中記錄了邏輯地址對應的物理地址。

在這裏插入圖片描述

映射關係爲頁表—>頁。

若邏輯地址AA,頁號PP,頁內偏移量WW,頁面大小LL,頁表項長度MM,頁表起始地址FFPP的頁表項地址GG,物理塊號bb,物理地址EE,則有

P=A/L, W=A%L, G=F+PM, Gb, E=bL+WP=A/L,\ W=A\%L,\ G=F+P*M,\ G\rightarrow b,\ E=b*L+W

在這裏插入圖片描述

二級分頁存儲管理就是對頁表再次進行分頁,即一級頁表—>二級頁表—>頁。

分段存儲管理

分段式和分頁式差不多,區別在於段表中記錄的是段長和段的基址(起始地址),定址方法類比即可。

在這裏插入圖片描述

注意,分頁式是一維的,分段式是二維的,即段表—>段。

(火大,今天聽室友說huj說過段式也不考

段頁式存儲管理

在這裏插入圖片描述

如圖,就是將段式和頁式結合起來,即”段表—>頁表—>頁“的映射關係。

地址計算方法本質都是一樣的,根據映射關係一級一級算過去就行。

3.2 虛擬內存管理

虛擬內存

局部性原理:計算機在某一時間內會多次訪問同一部分內容。

由於局部性原理,我們可以知道一個任務在被調用的時候,往往會重複訪問同一段內容,因此不妨把這一段內容單獨從程序中取出放入內存以提高效率,之後根據某種算法進行這段內容的置換。這樣看來,內存就像比以前更大了,這就是稱之爲”虛擬“的原因。

請求管理

  • 請求分頁式存儲管理
  • 請求分段存式儲管理
  • 請求段頁式存儲管理

其中頁表長這樣:
在這裏插入圖片描述
比起純分頁管理增加了四個部分:

  • 狀態位P:程序訪問時使用,記錄頁面是否在內存中。
  • 訪問字段A:置換頁面時使用,記錄的內容根據置換算法有所不同。
  • 修改位M:記錄調入內存後是否被修改過。
  • 外存地址:調入頁面時使用,記錄該頁在外存上的地址。

缺頁中斷

當要訪問的頁面不在內存中時就要產生中斷以將要訪問的頁面置換進內存。

過程:
在這裏插入圖片描述

其中”選擇一頁換出“就是利用了頁表中的狀態位執行調度算法。

和一般的中斷不同,缺頁中斷在指令執行期間產生和處理中斷信號,屬於內部中斷,因此在一條指令執行過程中可能產生多次中斷。

頁面置換

  • 最佳置換算法OPT:先換出下次出現時間最晚的頁面。
  • 先進先出算法FIFO:先換出最先進來的頁面。
  • 最近最久未使用算法LRU:先換出上次被訪問時間最早的頁面。
  • 時鐘置換算法CLOCK:訪問爲權值,循環遍歷緩衝區並將權值依次置零,先換出首次訪問到的權值爲0的頁面。
  • 改進CLOCK算法:訪問和修改分別爲第一、二權值,然後執行CLOCK算法。

4.文件與設備管理

(感覺這裏佔不了多少分,隨便背幾道題8

  • 磁帶上的文件只能順序存取。
  • 訪問磁盤的時間包括尋道、讀寫、旋轉等待時間。
  • 爲了允許不同用戶文件名相同於是採用多級目錄結構。
  • 用戶設置的設備名通常是邏輯涉設備名。

(算了還是正經學爲好

4.1 文件

文件分配方式

  • 連續分配:原始方法,效率低。
  • 鏈接分配:適用於經常更新且經常按一定順序訪問的情況。
  • 索引分配:適用於不經常更新但經常隨機訪問的情況。

在這裏插入圖片描述

4.2 磁盤

在這裏插入圖片描述

磁盤長這樣↑

扇區\in磁道\in磁盤。

在這裏插入圖片描述

磁盤驅動器長這樣↑

磁盤調度

基本概念:

  • 尋找時間TsT_s:將磁頭移動到指定磁道的時間,和跨越磁道的時間常數mm、跨越磁道的條數nn、啓動磁臂的時間ss有關。Ts=m×n+sT_s=m\times n+s
  • 延遲時間TrT_r

等會,這些東西好像不考,那就鴿了(?

調度算法:

  • 先來先服務算法FCFS:老活了,不會的回去看。
  • 最短尋找時間算法SSTF:每次找離當前位置最近的磁道,可能導致飢餓。
  • 掃描算法/電梯算法SCAN:先找一個方向上的所有磁道,然後反方向再來一遍。
  • 循環掃描C-SCAN:單向移動結束後回到原點,重複SCAN。

平均尋道長度=總尋道長度/請求數

4.3 設備

鴿了

1.操作系統概述

1.1 基本概念

作用

  • 計算機系統資源的管理者(CPU,內存,文件,設備)
  • 用戶與計算機系統之間的接口(命令接口,系統調用)
  • 擴充機器

充分理解以上三點至關重要

性質

  • 併發(基本)
  • 共享(基本)
  • 虛擬
  • 異步

自己體會。

1.2 發展歷程

  1. 單道批處理:順序處理任務。
  2. 多道批處理:任務根據優先級佔用可中斷資源。題目通過甘特圖解決。
  3. 分時操作系統:開始能夠和用戶交互,交互性強。
  4. 實時操作系統:及時可靠,快速響應,交互性次之。

在這裏插入圖片描述

1.3 運行環境

用戶態

用於外層應用程序的執行。

內核態

用於特權指令的執行,如:

  • 時鐘管理
  • 中斷機制
  • 原語:操作系統最底層指令,具有原子性(不可中斷)。
  • 系統控制的數據結構及處理

Eg:發生系統調用時,用戶態轉變到核心態。

在這裏插入圖片描述

例題

待補,先睡會覺(

進程調度

同步、互斥、信號量

飢餓和死鎖

虛擬分頁

虛擬段頁

虛擬多級分頁

地址轉換

頁面替換

磁盤調度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章