天天看點

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

作業系統目錄

  • ​​1、什麼是作業系統​​
  • ​​2、計算機作業系統的基本特征​​
  • ​​2.1、并發​​
  • ​​2.2、共享​​
  • ​​2.3、虛拟​​
  • ​​2.4、異步​​
  • ​​3、作業系統的發展​​
  • ​​4、OS的運作機制和體系結構​​
  • ​​4.1、運作機制​​
  • ​​4.1.1、兩種指令​​
  • ​​4.1.2、兩種狀态​​
  • ​​4.1.3、兩種程式​​
  • ​​4.2、體系結構​​
  • ​​5、中斷和異常​​
  • ​​5.1、中斷機制的由來​​
  • ​​5.2、中斷機制的流程​​
  • ​​5.3、中斷機制的重點​​
  • ​​5.4、中斷的分類​​
  • ​​6、系統調用​​
  • ​​7、程序​​
  • ​​7.1、程序的定義群組成​​
  • ​​7.2、程序的組織方式​​
  • ​​7.3、程序的特征​​
  • ​​7.4、程序的狀态​​
  • ​​7.5、程序狀态的切換​​
  • ​​7.6、程序的控制​​
  • ​​8、線程​​
  • ​​8.1、線程的簡介和引入後發生的變化​​
  • ​​8.2、線程的屬性​​
  • ​​8.3、線程的實作方式和多線程模型​​
  • ​​9、處理機排程​​
  • ​​9.1、程序排程方式​​
  • ​​9.2、程序排程時機​​
  • ​​9.3、排程算法的評價名額​​
  • ​​9.4、排程算法​​
  • ​​9.4.1、先來先服務​​
  • ​​9.4.2、短作業優先​​
  • ​​9.4.3、高響應比優先​​
  • ​​9.4.4、時間片輪轉排程算法​​
  • ​​9.4.5、優先級排程算法​​
  • ​​9.4.6、多級回報排程算法​​
  • ​​9.4、程序同步和程序異步​​
  • ​​9.4.1、程序同步​​
  • ​​9.4.2、程序互斥​​
  • ​​9.5、程序互斥的軟體實作方式​​
  • ​​9.6、程序互斥的硬體實作方式​​
  • ​​10、信号量​​
  • ​​10.1、信号量機制​​
  • ​​10.1.1、整型信号量​​
  • ​​10.1.2、記錄型信号量​​
  • ​​10.1.3、信号量機制實作程序互斥​​
  • ​​10.1.3、信号量機制實作程序同步​​
  • ​​10.2、生産者消費者問題​​
  • ​​11、死鎖​​
  • ​​11.1、産生死鎖的原因和必要條件​​
  • ​​12、存儲器管理​​
  • ​​12.1、多級存儲器結構​​
  • ​​12.2、程式的裝入和連結​​
  • ​​12.2.1、程式的裝入​​
  • ​​12.2.2、程式的連結​​
  • ​​12.3、連續配置設定方式​​
  • ​​12.3.1、單一連續配置設定​​
  • ​​12.3.2、固定分區配置設定​​
  • ​​12.3.3、動态分區配置設定​​

1、什麼是作業系統

計算機作業系統是管理計算機硬體與軟體資源的計算機程式

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

2、計算機作業系統的基本特征

2.1、并發

容易混淆的概念:并發和并行

并發:多個任務在同一時間間隔内發生,注意在宏觀上是同時發生,但在微觀上實際是交替發生的

并行:多個任務在同一時刻同時發生

2.2、共享

系統中的資源可以被多個并發執行的程序一起使用
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

互斥共享方式:某一個時間段内,隻允許一個程序對該資源進行通路(例如攝像頭)

同時共享方式:某一個時間段内,允許多個程序對該資源進行通路(例如磁盤)

注意“同時”其實本質上是在該時間段内,多個程序對資源交替通路(即分時共享)

2.3、虛拟

什麼是虛拟:虛拟就是将一個實體實體變為若幹個邏輯上的對應物

怎麼了解呢?

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

虛拟存儲器技術:虛拟存儲器技術用來解決記憶體不夠的問題(空分複用技術)

比如我電腦上一共4GB的運作記憶體,IDEA占用了2個G、py占用2個G…且不說系統占用的記憶體,加起來肯定超過了4個G;是以這就用到了虛拟存儲器技術(此處不做過多深入了解)

虛拟處理器技術:CPU的虛拟化技術可以使單CPU模拟多CPU并行(時分複用技術)

微觀上是處理機在各個微小的時間内交替的為各個程式服務(時間的微化處理);比如我能夠同時打開idea、chrome、vx等等

如果丢失了并發,那麼虛拟就無任何意義(因為如果沒有并發,沒次隻運作一個程式即可)

2.4、異步

在多道程式的環境下,系統是允許多個程式并發執行的,由于資源的有限性,不可能所有的程式都能一貫到底的

比如程序A和程序B都要使用列印機,當程序A先獲得列印機的使用權時,那麼程序B隻能等待;隻有當程序A歸還列印機,程序B才能繼續執行。就像這樣程式中間可能有間斷,受到其他程式的影響,不知道何時執行結束,這就是程式的異步性。

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

3、作業系統的發展

1、手工操作階段

人機速度不比對,資源利用極低

2、批道處理階段

Ⅰ、單批道處理系統:

引入脫機輸入\輸出技術(錄音帶完成),緩解人機速度不比對問題,提高了資源的使用率;但隻允許一個程式運作,cpu大部分時間仍在等待IO,資源使用率依舊很低

Ⅱ、多批道處理系統:

每次向記憶體中輸入多道程式,并發執行

提高了資源使用率,但無人機互動功能)

3、分時作業系統

增加了人家互動功能,以時間片為機關為各個人作業服務

缺點是不能及時處理緊急任務

4、實時作業系統

能夠優先響應一些緊急任務,不需要時間片排隊
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

硬實時作業系統:必須在嚴格的時間内完成處理(防空系統)

軟實時作業系統:可以偶爾違反時間規定

5、網絡作業系統

6、分布式作業系統

7、個人作業系統

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

4、OS的運作機制和體系結構

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

4.1、運作機制

4.1.1、兩種指令

指令就是cpu能夠執行的最基本的機關,一行代碼可能轉換多條指令
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

那麼cpu是怎麼判斷執行哪條指令呢?請看4.1.2

4.1.2、兩種狀态

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

處于使用者态時,cpu隻能執行非特權指令

處于和心态時,cpu可以執行特權指令和非特權指令

使用程式狀态寄存器來辨別目前處理器處于什麼狀态

4.1.3、兩種程式

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

4.2、體系結構

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

大核心:将系統的主要功能作為核心,運作在核心态

優點:高性能

缺點:代碼裡龐大、結構混亂、難以維護

微核心:隻把最基本的留在核心

優點:代碼量小、結構清晰、容易維護

缺點:需要在使用者态和核心态之間來回切換,性能低

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

5、中斷和異常

5.1、中斷機制的由來

由于串行效率極低,所有引入了中斷機制,進而實作了并發執行

一旦發送中斷,就意味着需要作業系統的介入;因為使用者程式是不允許直接執行特權指令的。

5.2、中斷機制的流程

我們知道在并發執行的過程中,是以時間片輪轉法來實作的

比如2個程式一同執行

1、當程式1在使用者态執行完一個時間片時,cpu就會收到計時器發出的中斷信号,然後cpu就會切換到核心态将cpu的使用權限交給作業系統管理

2、此時作業系統核心開始對中斷信号進行處理,發現是過了一個時間片,然後作業系統會把cpu的使用權交還給使用者程序,然後程式2就會在使用者态下執行

3、程式2執行過程式可能需要程序輸出操作,但是輸入\輸出屬于特權指令,程式是沒法進行直接使用的;是以需要通過内中斷的方式請求作業系統完成輸出工作;此時和第一步一樣-》cpu切換到和心态-》将使用權交給作業系統

5.3、中斷機制的重點

1、當中斷發生時,cpu立即進入核心态

2、當中斷機制發生後,目前程序會進入暫停狀态,交由作業系統核心對中斷信号進行處理

3、不同的中斷信号,會進行不同的中斷處理

發生了中斷,意味着需要作業系統的介入管理;而管理工作一般要包含輸入輸出、程序切換等特權指令;是以cpu需要從使用者态切換為核心态,使得作業系統獲得了計算機的控制權,有了中斷機制才能實作程式的并發執行

使用者态-》核心态 :中斷是唯一途徑

核心态-》使用者态:隻需通過一個設定程式特權字的辨別為使用者态即可

5.4、中斷的分類

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

(軟體中斷就是比如1/0,外設就是比如IO完成就會發送中斷信号)

核心:内中斷和外中斷怎麼進行區分

内中斷是發生在cpu内部,是目前執行的指令有關

外中斷是發生在cpu外部,與目前執行的指令無關

外中斷的處理流程

1、執行完每個指令之後,cpu都會檢查是否有外中斷信号

2、如何有則保護中斷程序的環境(程式狀态字、寄存器、計數器等)

3、根據中斷信号轉入執行相應的中斷處理程式

4、恢複原程序的環境

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

6、系統調用

什麼是系統調用?

系統調用是作業系統提供給應用程式的接口

系統調用的作用是什麼?

系統中的各種共享資源由作業系統統一掌管,是以在應用程式當中,所有與資源相關的操作都必須以系統調用的方式請求作業系統進行處理;這樣可以保證系統的安全性和穩定性。

由于需要一些特權指令,是以系統調用是在核心态下完成的

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)
比如我們進階語言裡面的Read(“a.txt”)函數,這個Read底層封裝了系統調用複雜的實作細節

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

7、程序

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

7.1、程序的定義群組成

1.為什麼會産生程序?

1.1.最初的計算機每次隻能執行一個指令,這樣的效率非常低下

1.2.後來出現了批處理系統,程式員可以将一串指令一次性交給計算機,這樣雖然相比最初的計算機提高了效率,但是記憶體中始終隻允許一個程式;

1.3.是以程序的概念就誕生了

2.程序是什麼?

程序是應用程式在記憶體中配置設定的空間,各個程序互不幹擾,每個程序保持着程式每一時刻的運作狀态

特點:此時cpu采用時間片輪轉的方式運作程序

作業系統在每一個程式運作之前,都會在記憶體中為程式配置一個資料結構,稱之為程序控制塊(PCB),用來描述程序的各種資訊

另外程序實體(程序映像)包含資料段、程式段、PCB組成。(作業系統相關的資料都存放在PCB中,程式運作的代碼存放在程式段中,程式運作所需的相關資料存放在資料段中)

7.2、程序的組織方式

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

連結方式和索引方式很類似,隻不過索引方式是使用了一個中間表來實作;而連結方式就相當于連結清單中的頭節點

7.3、程序的特征

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

7.4、程序的狀态

在計算機運作的過程中,可能有多個程序運作;此時有的程序或許正在被cpu運作,有的或許在等待;是以說程序可能處于不同的狀态。

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

注意

在單核處理機中,每一個時刻最多有一個程序正在運作;在多核處理機中,每一個時刻可以有多個程序正在運作。其實還有另外兩種狀态

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

7.5、程序狀态的切換

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

7.6、程序的控制

程序控制簡單了說就是完成程序狀态之間的轉換
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

使用原語完成程序控制,(原語就是必須一氣呵成,中間不允許進行中斷;比如如果程序在轉換過程中由于中斷沒有進入其他相應的隊列就會造成難以想象的後果)

原語采用“開中斷”和“關中斷”兩個指令完成程序控制

程序狀态轉換過程中,首先會執行關中斷,如果在途中遇到中斷指令,則會被忽略;直到遇到開中斷結束。

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

8、線程

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

8.1、線程的簡介和引入後發生的變化

概述

線程是輕量級的程序,是cpu資源排程的基本機關

引入線程前後的變化

資源配置設定、排程:引入線程前,程序是資源配置設定、排程的基本機關;引入線程後,程序是資源配置設定的基本機關,線程是排程的基本機關

并發性:引入線程前,隻能在程序間并發;引入線程後,線程間也能進行并發

系統開銷:引入線程前,程序之間的切換開銷大;引入線程後線程在程序内部進行切換的開銷小

8.2、線程的屬性

線程是cpu排程的基本機關

多核計算機中,各個線程可以占用不同的cpu

每個線程都有一個線程ID、線程控制塊(TCB)

線程也有就緒、運作、阻塞三種基本狀态

線程幾乎不擁有系統資源

同一程序的不同線程共享程序資源

8.3、線程的實作方式和多線程模型

實作方式

在使用者級線程和核心級線程中,可以采用組合的方式,将n個使用者級線程映射到m個核心級線程(n>=m)

注意:核心級線程才是處理機配置設定的基本機關

多線程模型

多對一

一對一

多對多

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

9、處理機排程

簡介:從就緒隊列中按照一定的算法選擇一個程序并将處理機配置設定給它運作,以實作程序的并發執行

9.1、程序排程方式

三種排程方式

  進階排程
    按一定的原則從外存上處于後備隊列的作業中挑選一個作業,給他們配置設定資源,建立相應的程序,使得它們獲得處理機的權限
  中級排程
    利用虛拟存儲器技術,将暫時不能運作的程序調到外存準備。等它具備了運作條件且記憶體空閑時,再重新調入記憶體,外存到記憶體(建立态-》就緒态
    暫時調到外存的程序狀态處于挂起狀态。PCB不會被調入外存,PCB記錄了程序資料在外存中存放的位置等資訊。被挂起的程序的PCB被放到挂起隊列中,從外存到記憶體(挂起态-》阻塞态)
  低級排程
    按照某種政策從就緒隊列種選取一個程序,将處理機配置設定給它,從記憶體到cpu      

9.2、程序排程時機

臨界區是?通路臨界資源的那段代碼

臨界資源是?一段時間内隻允許一個程序通路,各程序互斥通路

當程序通路普通臨界資源時是可以進行排程與切換的

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

9.3、排程算法的評價名額

1、cpu使用率:作業在外存後備隊列的時間(進階排程)

2、系統吞吐量:程序在就緒隊列的時間(低級排程)

3、周轉時間:程序執行的時間、等待IO的時間

4、等待時間:

公式:帶權周轉時間=作業周轉時間/作業實際的運作的時間 =(作業完成時間-作業送出時間)/作業實際運作的時間

9.4、排程算法

9.4.1、先來先服務

算法思想:從公屏上的角度考慮

算法規則:按照作業/程序先到達的先後順序進行服務

作業/程序排程:用于作業排程時,先考慮哪個作業進入後備隊列;用于程序排程時,先考慮哪個程序先到達就緒隊列

是否可搶占:非搶占式算法

優點:公平

缺點:對短作業不利

模拟FCFS排程算法(先來先服務)沒錯,是篇好文章!​

9.4.2、短作業優先

算法思想:追求最少的平均等待時間

算法規則:最短的作業/程序優先得到服務(前提的程序已經到達)

作業/程序排程:都可以

是否可搶占:SJF和SPF是非搶占式算法(SRTN為搶占式算法-時間最短)

優點:最短的平均等待時間

缺點:對長作業不利

如果是一直有短作業,就會造成長作業一直等待

短作業最短時間優先原則(SRTN)為搶占式的,平均等待時間最短

9.4.3、高響應比優先

算法思想:綜合考慮作業/程序的等待時間和要求服務的時間

算法規則:每次排程前計算每個作業的響應比,選擇響應比最高的作業服務

是否搶占:否(隻有目前作業主動放棄處理機才會進行排程)

優點:綜合比較好

高響應比=(等待時間+服務時間)/服務時間

9.4.4、時間片輪轉排程算法

1、算法思想:處理機輪流的為每個程序服務,每個程序在一定時間内都可以得到響應

2、算法規則:按照各個程序到達就緒隊列的順序,輪流讓每個程序執行一個時間片(如100ms),如果說某個程序在這個時間内沒有執行完,則會被剝奪處理機,放到就緒隊列進行等待

3、是否用于作業/程序排程:用于程序排程,因為隻有當作業放到記憶體建立了相應的程序才能被配置設定時間片

4、是否搶占:屬于搶占式算法,當程序沒執行完也會被剝奪處理機(由時鐘裝置發出時鐘中斷通知時間已到)

5、優點:公平、響應快,适用于分時作業系統

6、缺點:程序頻繁切換需要一定的開銷,另外不能區分任務的緊急程度

7、是否會導緻饑餓:不會導緻饑餓

注意事項(時間片過大或過小會有什麼影響?)

如果時間片過大,每個程序都有可能在一個時間片内執行完畢,那麼該算法就會退回到先來先服務算法,會增大系統響應時間,是以時間片不能過大

如果時間片過小,程序之間就會頻繁的進行切換,浪費大量的時間,程序處理的時間比例就會下降,是以時間片不能過小

9.4.5、優先級排程算法

1、算法思想:根據任務的緊急程式來決定處理順序(用于實時作業系統)

2、算法規則:每個作業/程序都有優先級,排程時選擇優先級高的作業/程序

3、用于作業/程序排程:既可用于程序排程,又可以用于作業排程

4、是否搶占式:既有搶占式又有非搶占式

5、優點:區分任務緊急程度,常用于實時作業系統;可以動态的調整對各個作業/程序的偏好程度

6、缺點:若有源源不斷地優先級程序進來,有可能會導緻優先級較低地程序饑餓

7、是否導緻饑餓:有可能導緻饑餓

9.4.6、多級回報排程算法

1、算法思想:對上面的五種排程算法進行折中

2、算法規則:設定多級就緒隊列,各級隊列優先級從高到低,時間片從小到大

3、用于作業/程序排程:用于程序排程

4、是否搶占式:搶占式算法

5、優點:對各個程序公平(FCFS),每個新到達的程序都能被很快響應(RR),短程序隻需要很少的時間就能夠完成(SPF),可靈活調整各個對程序的偏好程度

6、是否導緻饑餓:會

計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

9.4、程序同步和程序異步

9.4.1、程序同步

程序具有異步性的特征,并發的程序總是以各自獨立、不可預知的速度向前推進。

比如管道通信:寫的一端向管道寫入資料,讀的一段從管道讀取資料。是以寫程序必須在讀程序之前執行,否者就會造成阻塞(是以推進順序必須是寫順序->讀順序)

9.4.2、程序互斥

程序在并發執行的過程中,不可避免的需要共享一些資源(比如攝像頭、列印機)

在某一個時間段内,隻允許一個程序進行通路的資源稱為臨界資源
計算機作業系統還能這樣玩?這一篇計算機作業系統的總結為你保駕護航(零風險、高品質、萬字長文、建議收藏)

實作程序互斥需要遵循以下幾個條件

1、空閑讓進

2、忙則等待

3、有限等待

4、讓權等待

9.5、程序互斥的軟體實作方式

1、單标志法

2、雙标志位先檢查法

3、雙标志位後檢查法

4、perterson算法

9.6、程序互斥的硬體實作方式

1、中斷屏蔽:利用開中斷/關中斷指令完成(一旦某個程序執行了關中斷後就不允許其他程序進行中斷,也就不可能會發生程序切換;然後就可以獨自的通路臨界區,直到執行開中斷之後。其他程序才能通路臨界資源)

關中斷

臨界資源

開中斷

優點:簡單、高效

缺點:不适用于多處理機,因為有可能多個處理機上的某個程序都要通路臨界資源,那麼由于每個處理機都可以執行中斷,是以會出現多個程序同時通路臨界資源的情況;然後開中斷/關中斷屬于特殊指令,一般用于核心級程序

2、TS指令:TSL指令是用硬體實作的,不允許被中斷

3、swap指令

10、信号量

10.1、信号量機制

10.1.1、整型信号量

可以使用信号量來表示系統中某個資源的數量,通常使用原語中的wait和signal來實作

#如何使用信号量來定義系統中的資源呢?

1.初始化

2.P操作

3.V操作

初始化:

int S = 1 //(假設初始化列印機的數量為1)      

P操作:

void wait(S) {
  while(S<=0);
  S=S-1;
}      

V操作

void signal(S){
  S=S+1
}      

P操作

使用臨界資源

V操作

由于while(S<=0)循環,如果一旦資源不夠用,那麼将要使用該資源的程序就會一直處于忙等的狀态

10.1.2、記錄型信号量

typedef struct {
  int value;  //記錄資源的資料
  struct process *L; //等待隊列
}node;      
void wait(node s){
  s.value--;
  if(s.value < 0) {  //如果系統資源資料不夠,則将程序由運作态切換到阻塞态,并将其挂載到隊列中等待
    block(s.L)
  }
}      
void signal(node s) {
  s.value++;
  if(s.value <= 0) {
    wakeUp(s.L) //如果某個程序釋放資源後,發現還有等待的程序,則使用wakeUp原語從隊列中喚醒一個程序
  }
}      

一旦判斷系統資源數量為0,目前程序就會使用block原語将自己從運作态切換到阻塞态,主動放棄處理機,将自己挂到隊列中去;是以不會程序不會出現忙等的狀态(一直占用cpu,卻沒做任何事情)

10.1.3、信号量機制實作程序互斥

1、設定互斥信号量(mutex =1)

2、執行P(mutext)操作

3、通路臨界資源

4、執行V(mutext)操作

semaphore = 1;
P()...
臨界資源
V()....      

10.1.3、信号量機制實作程序同步

:TODO

10.2、生産者消費者問題

生産者每次生成生産一個産品放入緩沖區,消費者每次從緩沖區消費一個産品。

相關問題

1、緩沖滿時,生産者不能放入産品

2、緩沖區空時,消費者不能消費産品

3、當生産者并發執行時,有可能向緩沖區的同一個空間放入産品,就會造成覆寫的狀況,是以必須互斥地通路緩沖區

11、死鎖

11.1、産生死鎖的原因和必要條件

所謂死鎖就是多個程序同時競争同一種資源而陷入僵局

1、産生死鎖的原因:

1.競争資源

2.程序的推進順序非法

詳細分析

Ⅰ、競争資源

系統中的資源分為兩類:可剝奪性資源,非剝奪性資源;

1.可剝奪性資源,當程序獲得可剝奪性資源時,可以被優先級較高的程序搶占;另外存儲管理程式可以将一個程序從記憶體調到外存上;由此可以得出CPU和主存輸入可剝奪性資源

2.不可剝奪性資源:這一類資源隻能由程序使用完後自行釋放,是以像列印機、錄音帶機屬于不可剝奪性資源

從上面的兩種資源我們就可以得出,當不可剝奪性資源數量不多時,如果多個程序同時競争,則可能發生死鎖,因為這種資源程序不能被搶占

Ⅱ、程序推進順序不當

程序在運作中具有異步的特征

2、産生死鎖的必要條件

1、互斥條件:資源必須是互斥通路的(在同一段時間内隻能由一個程序通路)

2、請求和保持條件:即程序已經占有了至少一個資源,然後又去請求另外一個資源,而另外一個資源剛好被占用;此時請求陷入阻塞,然後該程序又不放棄自己占有的資源

3、不剝奪條件:即該程序獲得的資源,在程序主動釋放前不能被搶占(可以了解為上面的不可剝奪性資源)

4、環路等待條件:程序發生死鎖時形成了一個環形阻塞(p0等p1,p1等p2,p2等p0)

3、處理死鎖的基本方法

1、預防死鎖

2、避免死鎖

3、檢測死鎖

4、解除死鎖

4、

Ⅰ、預防死鎖

摒棄請求和保持條件:這種方式直接在所有程序運作之前,一次性的将資源配置設定給程序,此後不再進行申請資源。這種方法缺點是極大的浪費了系統資源,還有可能需求資源被其他程序一直占用,遲遲不能執行。

摒棄不剝奪條件:這種方式是當程序正在使用某個資源時,如果其他程序請求該資源,則占用該資源的線程立即釋放目前資源。這種方式的缺點也很明顯,比如不可剝奪性資源列印機,如果某個程序正在使用,如果中斷一次,那麼兩次列印的資訊可能不會連續。反複的申請和釋放資源,程序運作時間比例被大大縮小。

摒棄環形等待:這種方式是将資源類型進行線性排隊,給每個資源進行編号。這個缺點是每個資源的使用順序可能不一樣

Ⅱ、避免死鎖

這種方式通過将系統始終處于安全狀态,這種方式可以獲得令人滿意的性能

這種方式主要考慮資源的配置設定順序,因為資源數量不一緻嘛

重點:銀行家算法避免死鎖

Ⅲ、檢測死鎖

通過用例配置設定圖檢測死鎖

Ⅳ、解除死鎖

通過剝奪資源和撤銷程序來實作

(注意這個剝奪資源是從其他程序剝奪其資源給死鎖程序)

12、存儲器管理

12.1、多級存儲器結構

cpu寄存器:寄存器

主存:高速緩存、主存、磁盤緩存

輔存:磁盤、可移動存儲媒體

12.2、程式的裝入和連結

程式如果想要運作,必須建立程序,而建立程序第一件事情肯定是将程式和資料加載到記憶體中。而如何将一個程式變成一個可以在記憶體中可執行的程式,通常需要完成三部:編譯、連結、裝入

12.2.1、程式的裝入

1.絕對裝入方式:這種方式邏輯位址和實際記憶體位址相同,故不需要對資料進行更改

2.可重定位裝入方式:最後需要修改指令和資料

3.動态運作時裝入方式:可以任意改變在記憶體中的位置

12.2.2、程式的連結

程式編譯之後形成了一系列的子產品,需要利用連結程式将目标塊連結。形成裝入子產品

1.靜态連結:在程式運作之前,将其連結成一個完整的子產品,以後不再分開

2.裝入時動态連結:在目标子產品裝入記憶體時,采用邊裝入邊連結的方式

3.運作時動态連結:在程式運作過程中,需要某個子產品時,才對對其進行連結

12.3、連續配置設定方式

12.3.1、單一連續配置設定

這種存儲管理方式,把記憶體分為系統區和使用者區;系統區處于記憶體的位址部分,其餘的是使用者區,提供給使用者使用

12.3.2、固定分區配置設定

将記憶體分位幾個固定大小的空間,劃分位幾個分區,就允許幾個作業并發運作。當某個作業運作結束時,便可以從外存的後備隊列中選擇一個适當大小的作業裝入該分區

缺乏靈活性、容易造成資源浪費

12.3.3、動态分區配置設定

根據實際的需要,動态的配置設定空間;是以這涉及到三個問題;資料結構、分區配置設定算法、分區的配置設定和回收操作

1.資料結構

空閑分區表:該表記錄空閑分區中的一些資料(分區始址和分區大小等)

空閑分區鍊:将所有空閑分區通過前後指針連結起來