【操作系統之考前垂死掙扎】02進程管理


思維導圖:
在這裏插入圖片描述

2.1前趨圖和程序執行

1.前趨圖

前趨圖是一個有向無循環圖,用於描述進程之間的前後關係。
結點:描述一個程序段或進程,或一條語句。
有向邊:節點之間的偏序或前序關係“——>”
例:
在這裏插入圖片描述
注意:前趨圖中必須不存在循環

2.程序的順序執行

1.程序的順序執行: 一個程序由若干個程序段組成,而這些程序段的執行必須是順序的,這種執行的方式就稱爲程序的順序執行。
2.程序順序執行時的特徵:
1. 順序性:處理機的操作嚴格按照程序所規定的順序執行
2. 封閉性:程序一旦開始執行,其計算結果不受外界因素的影響
3. 可再現性:程序執行的結果與它的執行速度無關(即與時間無關),而只與初始條件有關。

3.程序的併發執行

1.程序的併發執行當互不影響的程序執行時可以是同時執行的。
2.程序併發執行時的特徵:

  1. 間斷性:在多道程序設計的環境下,程序的併發執行,以及爲完成一項任務而相互合作,這些程序之間要共享系統的資源,形成了相互制約的關係。相互制約導致併發程序具有”執行——暫停——執行“這種間斷性的活動規律。
    2.失去封閉性:程序在併發執行時,系統的資源狀態由多道程序來改變,程序失去封閉性。一程序的運行受到其他程序的影響。
    3.不可再現性:程序在併發執行時,多次運行初始條件相同的同一程序會得出不同的結果。

2.2進程的描述

1.進程的特徵和定義

1.進程的特徵和定義
在多道程序設計的環境下,爲了描述程序在計算機系統內的執行情況,必須引入新的概念–進程。
進程:程序關於某個數據集合的一次執行過程。
進程的其他定義:

  • 行爲的一個規則叫做程序,程序在處理機上所發生的活動稱爲進程。
  • 進程時這樣的計算部分,它是可以和其它計算並行的一個計算。
  • 進程(有時稱爲任務)是一個程序與其數據一道通過處理機的執行所發生的活動。
  • 進程是執行中的程序

2.進程的特徵
1. 結構特徵:進程控制塊(PCB)+程序+數據=進程實體
2.動態性——最基本的特徵
進程:進程實體的一次執行過程,有生命週期。
程序:程序是一組有序指令的集合,是靜態的概念。
3. 併發性
4. 獨立性
5.異步性:進程按各自獨立的、不可預知的速度向前推進。

2.進程的三種基本狀態

1.就緒狀態(Ready):進程已獲得除CPU之外所有必需的資源,一旦得到CPU控制權,立即可以運行。
2.運行狀態(Running):進程已獲得運行所必須的資源,它的程序正在處理機上執行。
3.阻塞狀態(Blocked):正在執行的進程由於發生某事件而暫時無法執行時,便放棄處理機而處於暫停狀態,稱該進程處於阻塞狀態或等待狀態。
進程的三種基本狀態以及各狀態之間的轉換關係
在這裏插入圖片描述

3.掛起狀態

1.引起掛起狀態的原因:

  • 終端用戶的請求
  • 父進程請求
  • 負荷調節的需要
  • 操作系統的需要

2.進程狀態的轉換
引用掛起狀態後,增加了掛起狀態(靜止狀態)到非掛起狀態(活動狀態)的轉換,或者相反。
在這裏插入圖片描述

4.進程控制塊(進程管理中的數據結構)

1.進程控制塊的作用
存放進程管理和控制信息的數據結構稱爲進程控制塊。它是進程管理和控制的最重要的數據結構,在創建時,建立PCB,並伴隨進程運行的全過程,直到進程撤銷而撤銷。PCB就像我們的戶口。
PCB是進程存在的唯一標誌。
系統的所有PCB組織成鏈表或隊列,常駐內存的PCB區。
2.進程控制塊中的信息
1.進程標識符:每個進程都必須有一個唯一的標識符

  • 內部標識符
  • 外部標識符

2.處理機的狀態:處理機狀態信息主要由處理機的各種寄存器中的內容組成.處理機運行時的信息存放在寄存器中,當被中斷時這些信息要存放在PCB中.

  • 通用寄存器
  • 指令計數器
  • 程序狀態字PSW
  • 用戶棧指針

3.進程調度信息

  • 進程狀態
  • 進程優先級
  • 進程調度所需的其他信息
  • 事件

4.進程控制信息

  • 程序和數據的地址
  • 進程通信和同步機制
  • 資源清單
  • 鏈接指針

3.進程控制塊的組織方式
1.線性方式
2.鏈式方式:
把具有同一狀態的PCB用其中的鏈接字鏈接成一個隊列.(就緒隊列;若干個阻塞隊列)
在這裏插入圖片描述
3.索引方式:
系統根據所有進程的狀態建立幾張索引表,把各表的內存首地址記錄在內存的專用單元中.索引表的標目中記錄了相應狀態的某個PCB在PCB表中的地址.
在這裏插入圖片描述

2.3進程控制

1.操作系統內核
2.進程的創建

1.進程圖
在這裏插入圖片描述
2.引起創建進程的事件
1.用戶登錄;2.作業調度;3.提供服務;4.應用請求

3.進程的創建
操作系統發現要求創建新進程的事件後,調用進程創建原語Creat()創建新進程.
進程的創建過程:
申請空白PCB->爲新進程分配資源->舒適化進程控制塊->將新進程插入就緒隊列

3.進程的終止

1.引起進程終止的事件
1.正常結束
2.異常結束(越界錯誤;非法指令等)
3.外界干預(操作員或操作系統干預;父進程請求;父進程終止)
2.進程的終止過程
找出被終止進程的PCB->若進程狀態爲運行態,置CPU調度爲真->若其有子孫進程,終止其子孫進程並回收其資源->回收終止進程的資源->回收終止的PCB

4.進程的阻塞與喚醒

1.引起進程阻塞和喚醒的事件
1.請求系統服務
2.啓動某種操作
3.新數據尚未到達
4.無新工作可做
2.進程阻塞過程
1.調用阻塞原語阻塞自己
2.將PCB中的狀態改爲阻塞,並加入阻塞隊列
3.轉進程調度
3.進程喚醒過程
1.阻塞進程等待的事件發生,有關進程調用喚醒原語喚醒等待該事件的進程
2.把阻塞進程從等待該事件的阻塞隊列中移出
3.置進程狀態爲就緒態,將PCB插入到就緒隊列中
ps:阻塞原語與喚醒原語作用相反,成對使用

5.進程的掛起與激活

1.進程的掛起過程
1.當出現引起進程掛起的事件時,系統利用掛起原語將指定進程或處於阻塞的進程掛起
2.檢查被掛起的狀態:
若處於活動就緒,則改爲靜止就緒
若處於活動阻塞,則改爲靜止阻塞
若掛起的進程正在執行,則重新進行進程調度
2.進程的激活過程
1.當發生激活進程的事件時,系統利用激活原語將指定進程激活.
2.激活原語先將進程從外存調入內存
3.檢查該進程的狀態
若爲靜止就緒,則改爲活動就緒
若爲靜止阻塞,則改爲活動阻塞

2.4進程同步

1.進程的同步基本概念

1.進程間兩種形式地制約關係
1.間接相互制約關係—源於資源共享
2.直接相互制約關係—源於進程合作
2.臨界資源—互斥訪問
生產者–消費者問題:
在這裏插入圖片描述
生產者進程和消費者進程都以異步方式運行,但他們之間必須保持同步,對於生產者和消費者,如果他們兩個併發執行會導致產品數量出錯,所以我們把產品數量只能一次僅一個進程來訪問.把一次僅允許一個進程訪問的資源叫做臨界資源.
3.臨界區
臨界區:每個進程中訪問臨界資源的那段代碼
進程互斥:兩進程不能同時進入訪問同一臨界資源的臨界區.
進程同步:某進程未獲得合作進程發來消息之前讓該進程等待,消息到來之後方可繼續執行的合作關係
同步機構(同步機制):系統用來實現進程間同步與互斥的機構
4.同步機制應遵循的規則

  • 忙則讓進
  • 忙則等待
  • 有限等待
  • 讓權等待

2.信號量機制

1965年荷蘭Dijkstra提出的進程同步工具
1.整型信號量
定義:整型量,除初始化外,僅能通過兩個原子操作來訪問
P操作 wait(S):
While(S<=0) do no-op;(空操作指令)
S- -’
V操作 signal(S):
s+ +;
P、V操作是原子操作,不可中斷。
整型信號量實現互斥:
在這裏插入圖片描述
2.記錄型信號量(正確使用時能實現同步和互斥)
typedef struct{
int value;
struct process_control_bolck *list;
}semaphore;
含義:信號量>0,代表可用資源的數量
信號量<0,代表由於申請信號量代表的資源而阻塞的進程數量。
wait(semaphore *S){
S->value–;
if(S->value<0)
block(S->list);
}
signal(semaphore *S)
{
S->value++;
if(S->value<=0)
wakeup(S->list);
}
進程同步:
在這裏插入圖片描述
3.AND型信號量
AND同步機制的基本思想:將進程在整個運行過程中需要的所有資源,一次性全部分配給進程,待進程使用完後再一起釋放。只要尚有一個資源未能分配給進程,其他所有可能爲之分配的資源,也不分配給它。即對臨界資源的分配採取原子操作。
在這裏插入圖片描述

3.信號量的應用

1.利用信號量實現進程互斥(模式)
爲使多個進程互斥的訪問某臨界資源,須爲該資源設置已互斥信號零mutex,並設其初始值爲1,然後將各進程訪問資源的臨界區CS置於wait(mutex)和signal(mutex)之間即可。
應用:
在這裏插入圖片描述
2.利用信號量實現前驅關係(模式)
在這裏插入圖片描述
**3.利用記錄型信號型信號量實現同步(模式)**P1,P2兩進程陰合作一項任務而共用一個變量X。
進程P2將處理結果送入x;進程p1將x的結果打印。
在這裏插入圖片描述

進程同步的主要任務:使併發執行的諸進程之間能有效地共享資源和相互合作,從而使程序地執行具有可再現性.

2.5經典進程的同步問題

2.5.1生產者——消費者問題

在這裏插入圖片描述

1.利用記錄型信號量解決生產者——消費者問題
在這裏插入圖片描述
2.利用AND信號量解決生產者——消費者問題
在這裏插入圖片描述

2.5.2哲學家進餐問題

在這裏插入圖片描述

1.利用記錄型信號量解決哲學家進餐問題
在這裏插入圖片描述
2.利用AND信號量機制解決哲學家進餐問題
在這裏插入圖片描述

2.5.3 讀者——寫者問題

在這裏插入圖片描述

1.使用記錄型信號量解決讀者——寫者問題

在這裏插入圖片描述
在這裏插入圖片描述
2.利用信號量集機制解決讀者——寫者問題
在這裏插入圖片描述
在這裏插入圖片描述

2.6進程通信

進程通信:指進程之間的信息交換。

1.低級通信:進程間僅交換一些狀態和少量數據
進程之間的互斥和同步——低級通信
信號量機制作爲通信工具的缺點:
1.效率低 2.通信對用戶不透明
2.高級通信:
進程間可交換大量數據。是指用戶可直接利用操作系統所提供的一組通信命令,高效地傳送大量數據的一種通信方式。
操作系統隱藏了進程通信的細節,對用戶透明,減少了通信程序編制上的複雜性。

1.進程通信的類型

1.共享存儲器系統
相互通信的進程間共享某些數據結構或共享存儲區,通過這些空間進行通信。

  • 基於共享數據結構的通信方式
    進程公用某些數據結構,藉以實現諸進程間同步的處理。
    實現:程序員–公用數據結構的設置;對進程間同步的處理
    操作系統–提供共享存儲器
    特點:低效。只適合傳遞相對少量的數據。
  • 基於共享存儲區的通信方式
    在存儲器中劃出一塊共享存儲區,諸進程間實現通信
    實現:進程在通信前,先向系統申請獲得共享存儲區的一個分區,並指定該分區的關鍵字;——>把獲得的共享存儲分區連接到需要進行通信的進程上;——>此後,便可像讀、寫普通存儲器一樣地讀、寫該公用存儲分區。
    2.消息傳遞系統
    進程間的數據交換,以格式化的消息爲單位。‘
    程序員直接利用系統提供的一組通信命令(原語)進行通信。
    例:計算機網絡。網絡報文
    3.管道通信
    管道:指用於連接一個讀進程和一個寫進程以實現他們之間通信的一個打開的共享文件,又名pipe文件。
    管道機制提供的協調能力:互斥;同步;確定對方是否存在

2.消息傳遞通信的實現方法

進程間通信時,源進程可以直接或間接地將消息傳送給目標進程
1.直接通信方式
發送進程利用OS提供地發送命令,直接把消息發送給目標進程。
發送進程和接收進程都以顯式方式提供對方地標識符。
通信原語:
Send(Receiver,message);發送一個消息給接收進程
Receive(Sender,message);接收Sender發來的消息
2.間接通信方式——通過信箱通信
消息在信箱中可安全保存,只允許覈准的目標用戶隨時讀取
利用信箱通信方式,既可實時通信,又可非實時通信。

3.直接消息傳遞的系統實例

1.通信鏈路:必須在發送進程和接收進程之間建立一條通信鏈路

2.7線程的基本概念

1.線程的引入

引用進程的目的:使多個程序能併發執行,提高資源利用率和系統吞吐量。
線程:線程是進程的一條執行路徑,它包含獨立的堆棧和CPU寄存器狀態,每個線程共享其所附屬的進程的所有資源,包括打開的文件、頁表、信號標識及動態分配的內存等。
線程和進程的關係:線程是屬於進程的,線程運行在進程空間內,同一進程所產生的線程共享同一物理內存空間,當進程退出時該進程所產生的進程都會被強制退出並清除.

2.8線程的實現

內核支持線程
依賴於OS核心,由內核的內部需求進行創建和撤銷,用來執行一個指定的函數

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