『作業系統』 程式的描述與控制 Part 1 前驅圖與程式執行

風骨散人Chiam發表於2020-12-07

2.1 前趨圖和程式執行

2.1.1 程式的順序執行及其特徵

1. 程式的順序執行

一個程式由若干個程式段組成,而這些程式段的執行必須是順序的,這種程式執行的方式就稱為程式的順序執行。

2.程式順序執行時的特徵

(1) 順序性
處理機的操作嚴格按照程式所規定的順序執行。
(2) 封閉性
程式一旦開始執行,其計算結果不受外界因素的影響。
(3) 可再現性
程式執行的結果與它的執行速度無關(即與時間無關),而只與初始條件有關

2.1.2 前趨圖

前驅圖是一個 DAG,其用於描述程式間執行的先後次序,圖中的每個結點用於表示一個程式或一個程式段,結點間的有向邊表示兩個結點間存在的偏序關係(前趨關係)。

程式間的前趨關係用 → 來表示,若程式 Pi 和 Pj 間存在前趨關係,可表示為 (Pi,Pj)∈→,即:Pi→Pj,表示 Pj 在執行前
Pi 必須完成。

在前驅圖中,將沒有前驅的結點稱為初始結點,將沒有後繼的結點稱為終止結點,此外,每個結點還具有一個價值,用於表示該結點所含有的程式的執行時間

  • 結點 : 描述一個程式段或程式,或一條語句。
  • 有向邊: 結點之間的前趨關係“->”
  • Pi->Pj :Pi 必須在 Pj 開始之前完成,則 Pi是Pj的直接前趨,Pj是Pi的直接後繼
  • 初始結點: 沒有前趨的結點
  • 終止結點: 沒有後繼的結點
  • 重量: 結點的程式量或執行時間

在這裡插入圖片描述
前趨圖中絕對不能出現迴圈

2.1.3 程式的併發執行及其特徵

1. 程式的順序執行

一個應用程式由若干程式段組成,每一程式段完成特定的功能,他們在執行時,都要按照某種先後次序執行,僅當前一程式段執行完後,再執行後一程式段,這種執行過程被稱為程式的順序執行。

程式順序執行時,具有以下三個特徵:

順序性:處理機的操作嚴格按程式規定順序執行
封閉性:程式一旦開始執行,其計算結果不受外界因素影響
可再現性:程式執行只要初始條件一樣,不論如何停頓,重複執行多少次結果都一樣

2. 程式的併發執行

例:在系統中有n個作業,每個作業都有三個處理步驟,輸入資料、處理、輸出,即Ii,Ci,Pi (i=1,2,3,…,n)。
這些作業在系統中執行時是對時間的偏序,有些操作必須在其它操作之前執行,這是有序的,但有些操作是可以同時執行的。

3. 程式併發執行時的特徵

(1) 間斷性
在多道程式設計的環境下,程式是併發執行的,由於它們共享系統資源,以及為完成同一項任務而相互合作,致使在這些併發執行的程式之間形成了相互制約的關係。
相互制約導致併發程式具有“執行-暫停-執行”這種間斷性的活動規律。
(2) 失去封閉性
程式在併發執行時,多道程式共享系統的資源,因而這些資源的狀態由多道程式來改變,程式執行失去封閉性。一程式的執行受到其他程式的影響。
(3) 不可再現性
程式在併發執行時,失去封閉性導致其失去可再現性。
(4) 程式與計算不再一一對應 在這裡插入圖片描述

程式併發執行時失去程式的封閉性和可再現性的主要原因是什麼?
解答: 併發執行的程式相互制約

4.程式併發執行的描述

  • 若干個程式段同時在系統中執行,這些程式的執行在時間上是重迭的;
  • 一個程式段的執行尚未結束,另一個程式段的執行已經開始;
  • 即使這種重迭是很小的,也稱這幾個程式段是併發執行的。

描述
cobegin
S1;S2;S3;…;SN
coend;
其中Si(i=1,2,3,…,n)表示n個語句(程式段),這n個語句用cobegin和coend括起來表示這n個語句是可以併發執行的。
co是concurrent的頭兩個字元。 這是Dijkstra提出的。

5.採用併發程式設計的目的

  • 充分發揮硬體的並行性,消除處理器和I/O 裝置的互等現象,提高系統效率。
  • 併發程式設計是多道程式設計的基礎,多道程式的實質就是把併發程式設計引入到單處理器的系統中。

練習題

1.[2017考研真題 28]與單道系統相比,多道程式系統的優點是(D)
Ⅰ.CPU利用率高
Ⅱ.系統開銷小
Ⅲ.系統吞吐率大
Ⅳ.I/O裝置利用率高

A.僅 Ⅰ、Ⅲ
B.僅 Ⅰ、Ⅳ
C.僅 Ⅱ、Ⅳ
D.僅 Ⅰ、Ⅲ 、Ⅳ

2.2 程式的描述

在多道程式設計的環境下,為了描述程式在計算機系統內的執行情況,必須引人新的概念——程式。

1. 程式( Process )的定義

程式是一個可併發執行的程式在其資料集上的一次執行過程,是作業系統進行資源分配的單位,程式表示資源的佔用和所要做的工作。

各種不同的程式定義

  • 行為的一個規則叫做程式,程式在處理機上執行時所發生的活動稱為程式(Dijkstra)。
  • 程式是這樣的計算部分,它是可以和其它計算並行的一個計算。(Donovan)
  • 程式(有時稱為任務)是一個程式與其資料一道通過處理機的執行所發生的活動。(Alan.C. Shaw)
  • 程式是執行中的程式。(Ken Thompson and Dennis Ritchie )

程式的定義:可併發執行的程式在一個資料集合上的一次執行過程。
程式是程式實體的執行過程,是系統進行資源分配和排程的一個獨立單位。

2. 程式的特徵

動態性、併發性、獨立性、非同步性、結構性
(1)動態性——程式是程式在處理機上的一次執行過程。具有生命期。
(2)併發性——多個程式實體同存於記憶體中,在一段時間內同時執行。以提高資源利用率。
(3) 獨立性——程式實體是一個能獨立執行、獨立分配資源和獨立接受排程的基本單位,而程式則不是。
(4) 非同步性——程式按各自獨立的、不可預知的速度向前推進。
(5) 結構性——程式控制塊(PCB)+程式段+相關的資料段=程式實體。

3. 程式與程式的區別

  • 程式是動態的,程式是靜態的
  • 程式是暫時的,程式是永久的
  • 程式與程式的組成不同:
    程式是指令的有序集合;
    程式包括程式、資料和程式控制塊(即程式狀態資訊)
  • 程式與程式的對應關係:
    無一一對應關係(一個程式可順序執行多個程式;一個程式可由多個程式共用)
    在這裡插入圖片描述

練習題

作業系統引入程式後,不能(C)
A.提高資源的利用率
B.正確描述程式的執行情況
C.提高使用者程式設計能力
D.允許一個程式同時被多個使用者呼叫

程式的型別
(1)系統程式:執行作業系統核心程式碼的程式。系統程式起著資源管理和控制的作用。
(2)使用者程式:執行使用者程式的程式。
(3)計算程式,I/O程式。
(4)前臺程式,後臺程式。

4、程式的基本狀態-三態模型

  • 執行態(running):程式佔有處理器正在執行。
  • 就緒態(ready):程式具備執行條件,等待系統分配處理器以便執行。
  • 等待態(wait):又稱為阻塞(blocked)態或睡眠(sleep)態,程式不具備執行條件,正在等待某個事件的完成。

不同系統設定的程式狀態數目不同

三態轉換圖
在這裡插入圖片描述
正經圖來了
在這裡插入圖片描述
引起程式狀態轉換的具體原因

  • 執行態→等待態:等待使用資源或某事件發生;
  • 等待態→就緒態:資源得到滿足或事件發生;
  • 執行態→就緒態:執行時間片到;出現有更高優先權程式。
  • 就緒態→執行態:CPU空閒時選擇一個就緒程式。
    在這裡插入圖片描述

練習題

1.[2015考研題 25] 下列選項中會導致程式從執行態變為就緒態的事件是(D)
A.執行P(wait)操作
B.申請記憶體失敗
C.啟動I/O 裝置
D.被高優先順序程式搶佔

2.[2014考研題 26] 一個程式的讀磁碟操作完成後,作業系統針對該程式必做的是(A)
A.修改程式狀態為就緒態
B.降低程式優先順序
C.給程式分配使用者記憶體空間
D.增加程式時間片大小

5、五態模型

五態模型在三態模型的基礎上引進了新建態和終止態。

  • 新建態—對應程式剛被建立的狀態。為一個新程式建立必要的管理資訊,它並沒有被提交,而是在等待作業系統完成建立程式的必要操作。
  • 終止態—程式的終止狀態。首先,等待作業系統進行善後,然後,退出主存。進入終止態的程式不再執行,但依然臨時保留在系統中等待善後。一旦其他程式完成了對終止態程式的資訊抽取之後,系統將刪除該程式。

在這裡插入圖片描述
程式狀態轉換的具體原因

  • NULL→新建態:建立一個子程式。
  • 新建態→就緒態:系統完成了程式建立操作,且當前系統的效能和記憶體的容量均允許。
  • 執行態→終止態:一個程式到達自然結束點,或出現了無法克服的錯誤,或被作業系統所終結,或被其他有終止權的程式所終結。
  • 終止態→NULL:完成善後操作。
  • 就緒態→終止態:某些作業系統允許父程式終結子程式。
  • 等待態→終止態:某些作業系統允許父程式終結子程式。

6、七態模型

(1)為什麼要有“掛起”狀態?
由於程式的不斷建立,系統資源已不能滿足程式執行的要求,就必須把某些程式掛起(suspend),對換到磁碟映象區中,暫時不參與程式排程,起到平滑系統負載的目的。
(2)引起掛起狀態的原因

  • 終端使用者的需要:終端使用者在自己程式執行中發現問題要求使正在執行的程式暫停執行而使程式處於掛起狀態。
  • 父程式的需要:父程式為了考查和修改某個子程式,或者協調各子程式間的活動,需要將該子程式掛起。
  • 作業系統的需要:作業系統為了檢查執行中的資源使用情況或進行記帳,而將某些程式掛起。
  • 對換的需要:為了提高記憶體的利用率,而將記憶體中某些程式掛起,以調進其它程式執行。
  • 負荷調節的需要:由於工作負荷較重,而將一些不重要的程式掛起,以保證系統能正常執行(實時作業系統) 。

(3)程式增加的兩個新狀態

  • 掛起就緒態(ready suspend):表明程式具備執行條件但目前在輔助儲存器中,當它被對換到主存才能被排程執行。
  • 掛起等待態(blocked suspend):表明程式正在等待某一個事件且在輔助儲存器中。

在這裡插入圖片描述
(4)引起程式狀態轉換的具體原因

  • 等待態→掛起等待態:系統根據當前資源狀況和效能要求,決定將一個等待態程式對換出去成為掛起等待態;
  • 就緒態→掛起就緒態:系統根據當前資源狀況和效能要求,決定把就緒態程式對換出去成為掛起就緒態。
  • 掛起等待態→掛起就緒態:引起程式等待的事件發生之後,相應的掛起等待態程式將轉換為掛起就緒態。
  • 掛起等待態→等待態:當一個程式等待一個事件時,原則上不需要把它調入記憶體。但是,當其它程式退出後,主存已經有了足夠的自由空間,而某個掛起等待態程式具有較高的優先順序並且作業系統已經得知導致它阻塞的事件即將結束,便可能發生這一狀態變化。
  • 掛起就緒態→就緒態:記憶體中沒有就緒態程式,或掛起就緒態程式具有比就緒態程式更高的優先順序,將把掛起就緒態程式轉換成就緒態。
  • 執行態→掛起就緒態:當一個高優先順序等待程式的等待事件結束後,它將搶佔CPU,而此時主存不夠,從而可能導致正在執行的程式轉化為掛起就緒態。執行態的程式也可以自己掛起自己。
  • 新建態→掛起就緒態:根據系統當前資源狀況和效能要求,可以將新建程式對換出去成為掛起就緒態。

掛起的程式將不參與低階排程直到它們被對換進主存。

(5)掛起程式具有如下特徵

  • 該程式不能立即被執行。
  • 掛起程式可能會等待事件,但所等待事件是獨立於掛起條件的,事件結束並不能導致程式具備執行條件。
  • 程式進入掛起狀態是由於作業系統、父程式或程式本身阻止它的執行。
  • 結束程式掛起狀態的命令只能通過作業系統或父程式發出。

練習題

針對分時系統,程式的三種狀態之間有幾種可能的轉換關係?
在這裡插入圖片描述
在單處理機的分時系統中,分配給程式P的時間片用完後,系統進行切換,結果排程到的仍然是程式P。有可能出現上述情形嗎?如果可能請說明理由。
解答:
有可能出現上述情況。

  • 例如,若在程式P時間片用完後,被迫回到就緒佇列時,就緒佇列為空,這樣程式P就是就緒佇列中惟一的一個程式,於是排程程式選中的程式必是程式P;
  • 又如在按優先順序排程的系統中,就緒佇列按程式優先順序排列,在程式P時間片用完之後回到就緒佇列時,若其優先順序高於當前就緒佇列中的其他程式程,則它將排在就緒佇列之首,從而再次被排程程式選中並投入執行。

7、程式控制塊

在這裡插入圖片描述
程式控制塊中的資訊
1)程式識別符號資訊 :每個程式都必須有一個唯一的識別符號

  • 內部識別符號:便於系統使用
  • 外部識別符號:便於使用者使用

2)處理機狀態資訊(現場資訊)
處理機狀態資訊主要由處理機的各種暫存器中的內容組成。處理機執行時的資訊存放在暫存器中,當被中斷時這些資訊要存放在PCB中。

  • 通用暫存器
  • 指令計數器
  • 程式狀態字PSW
  • 使用者棧指標
  • 指向該程式頁表的指標

3)程式排程資訊

  • 程式優先順序
  • 程式排程所需的其他資訊(執行時間等)
  • 事件
  • 程式狀態

4)程式控制資訊

  • 程式和資料的地址
  • 程式同步和通訊機制
  • 資源清單(開啟檔案表等)
  • 連結指標

練習題

1.“程式狀態字暫存器內容”屬於程式控制塊的©
A、標識資訊
B、控制資訊
C、現場資訊
D、排程資訊

2.程式控制塊中的現場資訊是在(D)儲存的。
A、建立程式時
B、處理器執行指令時
C、中斷源申請中斷時
D、中斷處理程式處理中斷前

程式組織方式
1)線性方式:
在這裡插入圖片描述
在這裡插入圖片描述
2)索引方式
在這裡插入圖片描述
CPU模式和程式型別
在這裡插入圖片描述
程式的兩大類:
系統程式:執行在核心模式,執行作業系統程式碼;
使用者程式:執行在使用者模式,執行使用者程式程式碼。

練習題

1.判斷:作業系統通過PCB來控制和管理程式,使用者程式也可以對PCB中的資訊進行讀寫操作。
答案: 錯誤

2.在一個單處理機系統中,若有10個使用者程式,則處於“執行”、“阻塞”、“就緒”狀態的程式數量最小和最大值分別可能是多少?
答案:
執行態:最少0個,最多1個;
阻塞態:最少0個,最多10個;
就緒態:最少0個,最多9個。

3.某系統的程式狀態變遷如圖所示(設該系統的程式排程方式為可剝奪方式)
在這裡插入圖片描述
1)說明程式發生變遷1、3、5的原因;
2)當發生一個變遷時可能引起另一個變遷的發生,則這兩個變遷稱為因果變遷。下述因果變遷是否會發生,如果有可能的話,會在什麼情況下發生? (a) 3→5 (b) 3→2 © 2→1 (d) 4→1 (e) 4→5
3)根據狀態變遷圖說明該系統的排程策略和排程效果。
答案:
1)系統中當前執行著的程式因中止、結束或等待某個I/O事件而退出執行,並且此時高優先就緒佇列中沒有等待程式,發生變遷1;
當執行著的程式發出I/O請求,需要等待I/O事件完成才能繼續進行,發生變遷3;
當有高優先順序程式進入就緒佇列,並且執行著的程式是低優先順序程式時,高優先順序程式會搶佔CPU,發生變遷5。
2)
(a) 3→5 是因果變遷;
(b) 3→2 不是;
© 2→1 是;
(d) 4→1 不是;
(e) 4→5 是。
3)此係統採用根據程式優先順序分別設定高優先就緒佇列和低優先就緒佇列:
高優先程式執行100ms 後就降為低優先就緒佇列,以使短程式優先完成;
對低優先就緒佇列中的程式採用時間片輪轉法(時間片程度為500ms),確保每個程式都有執行機會;
同時,對於進行了I/O操作的程式賦予一個高優先順序,保證對外界事件可以儘快響應。

4.程式併發執行時失去封閉性和可再現性的主要原因是:
答案: 執行程式的相互制約

5.處於等待狀態的程式也希望佔有處理機
答案:

6.簡述程式控制塊的作用。
答案:

  • 程式控制塊是程式存在的唯一標誌;
  • 是作業系統對程式進行控制和管理的依據;
  • 記錄程式的各種屬性,描述程式的動態變化過程;
  • 與程式一一對應。

練習題

1.系統中有N(N>2)個程式,並且當前沒有執行程式排程程式,則(D)不可能發生.
A.有一個執行程式,沒有就緒程式,還有N-1個程式處於等待狀態
B.有一個執行程式, N-1個就緒程式, 沒有程式處於等待狀態
C.有一個執行程式和一個就緒程式,還有N-2個程式處於等待狀態
D.沒有執行程式,但有兩個就緒程式,還有N-2個程式處於等待狀態

2.在程式管理中,當©時,程式從阻塞狀態變為就緒狀態。
A.程式被程式排程程式選中
B.等待某一事件
C.等待的事件發生
D. 時間片用完

3.分配到必要的資源並獲得處理機時的程式狀態是(B)。
A.就緒狀態
B.執行狀態
C.阻塞狀態
D.撤消狀態

4.程式的三個基本狀態在一定條件下可以相互轉化,程式由就緒狀態變為執行狀態的條件是(D)。
A.時間片用完
B.等待某事件發生
C.等待的某事件已發生
D.被程式排程程式選中
5.程式的三個基本狀態在一定條件下可以相互轉化,程式由執行狀態變為阻塞狀態的條件是(B)。
A.時間片用完
B.等待某事件發生
C.等待的某事件已發生
D.被程式排程程式選中

6.下列的程式狀態變化中,©變化是不可能發生的。
A.執行→就緒
B.就緒→執行
C.等待→執行
D.等待→就緒

7.一個執行的程式用完了分配給它的時間片後,它的狀態變為(A)。
A.就緒
B.等待
C.執行
D.由使用者自己確定

8.作業系統通過(B)對程式進行管理。
A. JCB
B. PCB
C. DCT
D. CHCT

9.一個程式被喚醒意味著(D)。
A. 該程式重新佔有了CPU
B. 它的優先權變為最大
C. 其PCB移至等待佇列隊首
D. 程式變為就緒狀態

10.多道程式環境下,作業系統分配資源以©為基本單位。
A. 程式
B. 指令
C. 程式
D. 作業

2.3 程式控制

  • 程式控制是程式管理中最基本的功能
    用於建立和撤銷程式;
    控制程式狀態的轉換;
  • 程式控制是作業系統的核心通過原語來實現的

程式的建立與終止
程式的阻塞與喚醒
程式的掛起與啟用

原語(primitive):由若干條指令構成的“原子操作(atomic operation)”過程,作為一個整體而不可分割--要麼全都完成,要麼全都不做。許多系統呼叫就是原語。
特徵:“不可中斷性”。
實現方法:遮蔽中斷。

2.3.1 程式建立

1. 程式圖

  • 描述程式的家族關係的有向樹.
  • 程式Pi建立了程式Pj,則Pi是Pj的父程式, Pj是Pi的子程式,用一條由程式Pi指向程式Pj的有向邊來描述。
  • 建立父程式的程式為祖先程式,由此形成程式樹,樹根為程式家族的祖先。
  • 在這裡插入圖片描述
    計算機系統的啟動過程
  • BIOS啟動(POST加電自檢,讀取MBR)
  • 系統引導(bootloder)
  • 啟動核心
  • 初始化系統

2.引起建立程式的事件

  • 使用者登入
  • 作業排程
  • 提供服務
  • 應用請求

練習題

1.[2009年考研題 24]下列選項中,導致建立新程式的操作是(C)
I 使用者登陸成功
II 裝置分配
III 啟動程式執行
A、僅I和II
B、僅II和III
C、僅I和III
D、I、II、III

3.程式的建立過程

作業系統發現有建立新程式的事件後,呼叫程式建立原語(CreateProcess/Fork)建立新程式。
建立過程:
(1)申請空白PCB
(2)為新程式分配資源
(3)初始化PCB
(4)將新程式插入就緒佇列
在這裡插入圖片描述
父程式建立子程式與主程式呼叫子程式有何不同?

  • 父程式建立子程式後,父程式與子程式同時執行;
  • 主程式呼叫子程式,主程式暫停在呼叫點,子程式開始執行,直到子程式執行完畢返回,主程式開始執行。

2.3.2 程式終止

1. 引起程式終止的事件

  1. 正常結束
  2. 異常結束
    越界錯誤、保護錯、非法指令、特權指令錯、執行超時
  3. 外界干預
  • 操作員或作業系統干預
  • 父程式請求
  • 父程式終止

程式的終止過程
(1) 根據被終止程式的識別符號,從PCB集合中檢索出該程式的PCB,從中讀出該程式的狀態。
(2) 若被終止程式正處於執行狀態,應立即終止該程式的執行,置排程標誌為真,用於指示該程式被終止後應重新進行程式排程。
(3) 若該程式有子孫程式,應將其所有子孫程式予以終止,以防他們成為不可控的程式。
(4) 將被終止程式所擁有的全部資源,或歸還其父程式,或歸還系統。
(5) 將被終止程式的PCB從所在佇列或連結串列中移出,掛入空白PCB佇列。

2.3.3 程式的阻塞與喚醒

(block與wakeup原語)

1. 引起程式阻塞的事件

  1. 請求系統服務
  2. 啟動某種操作
  3. 新資料尚未到達
  4. 無新工作可做

2.程式阻塞過程

  • 呼叫阻塞原語阻塞自己,終止該程式的執行,將PCB中的狀態改為阻塞,並加入到阻塞佇列中;
  • 然後轉程式排程,將處理機分配給另一程式,並進行程式切換以及處理機狀態的保護與重新設定。
    在這裡插入圖片描述

3.程式喚醒過程

  • 阻塞程式等待的事件發生,有關程式呼叫喚醒原語把等待該事件的程式喚醒。
  • 把阻塞程式從等待該事件的阻塞佇列中移出,將其PCB中的現行狀態改為就緒,將PCB插入到就緒佇列中。
  • 阻塞原語與喚醒原語作用相反,成對使用
    在這裡插入圖片描述

2.3.4 程式掛起/啟用

(suspend/active)

1.程式的掛起

當出現引起程式掛起的事件時,系統利用掛起原語將指定程式掛起。

  • 檢查被掛起程式的狀態;
  • 若處於活動就緒,則改為靜止就緒;
  • 若處於活動阻塞,則改為靜止阻塞;
  • 將該程式PCB複製到記憶體指定區域;
  • 若掛起的程式正在執行,則重新進行程式排程。

2.程式啟用

  • 當發生啟用程式的事件時,系統利用啟用原語將指定程式啟用。
  • 啟用原語先將程式從外存調入記憶體,檢查該程式的狀態;
    若處於靜止就緒,則改為活動就緒;
    若處於靜止阻塞,則改為活動阻塞;
    若採用搶佔排程策略,則新程式進入就緒佇列時,檢查是否要重新進行程式排程。

練習題

1.只作用於一個程式一次的原語是(A)
A.創立
B.解掛
C.阻塞
D.掛起

2.給出用於程式控制的四種常見的原語 建立原語撤消原語阻塞原語喚醒原語

3.作業系統對程式的管理和控制主要是通過控制原語實現的。
錯誤:

4.原語的執行是遮蔽中斷的。
錯誤:

相關文章