進程的描述與控制
在傳統的操作系統中,為了提高資源的利用率和系統吞吐量,通常采用多道程序技術,將多個程序同時裝入內存,並使之並發運行,傳統意義上的程序不再能獨立運行。此時作為資源分配和獨立運行的基本單位都是進程。操作系統所具有的的四大特征也都是基於進程而形成的,並從進程的角度對操作系統進行研究。在操作系統中,進程是一個極其重要的概念。
前趨圖和程序執行
前趨圖(DAG)
所謂前趨圖是指一個有向無環圖,它用於描述進程之間執行的先后順序。
節點之間有邊說明兩節點之間存在偏序關系。
沒有前趨的節點稱為初始節點,沒有后繼的節點叫做終止節點。
程序順序執行
程序順序執行時的特征:1.順序性,2.封閉性,3.可在觀性。
程序並發執行
程序並發執行的特征:1. 間斷性,2.失去封閉性,3.不可再現性。
進程的描述
進程的定義和特征
為了使參與並發執行的每個程序都能獨立地運行,在操作系統中必須為之配置一個專門的數據結構,稱為進程控制塊(PCB)。系統利用PCB來描述進程的基本情況和活動過程,進而控制和管理進程。這樣,由程序段、相關的數據結構和PCB三部分便構成了進程實體(又稱進程映象)。
關於進程比較經典的定義有:
1. 進程是程序的一次執行。
2. 進程是一個程序及其數據在處理機上順序執行時所發生的的活動。
3. 進程是具有單獨功能的程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位。
進程是進程實體的運動過程,是計算機進行資源分配和調度的一個獨立單位。
-
進程的特征
- 動態性:進程的實質是進程實體的執行過程。
- 並發性:是指多個進程實體同存於內存中。
- 獨立性:在傳統的OS中,獨立性是指進程實體是一個能獨立運行、獨立獲取資源和接收調度的基本單位。
- 異步性:是指進程按異步的方式運行的,即按各自獨立的、不可預知的速度向前推進。
進程的基本狀態及轉換
-
進程的三種基本狀態
- 就緒狀態
- 執行狀態
- 阻塞狀態
-
三種基本狀態的變換

上圖就緒->阻塞,阻塞->執行箭頭反了,不想重做了~
-
創建狀態和終止狀態
- 創建狀態
進程是創建產生的。首先由一個進程申請一個空白的PCB,並向PCB里填寫用於控制和管理進程的信息;然后為該進程分配運行時所必須的資源;最后把該進程轉入就緒狀態插入就緒隊列中。
進程所需資源尚得不到滿足無法就緒的進程狀態稱為創建狀態。 - 終止狀態
等待操作系統進行善后處理,然后將其PCB清零,並將PCB空間返還給系統。
- 創建狀態
掛起操作和進程狀態的轉化
-
掛起操作的引入
- 終端用戶的需要。
- 父進程請求。
- 負荷調節的需要。
- 操作系統的需要。
- 對換需要
-
引入掛起原話操作后三個進程狀態的轉換
- 活動就緒->靜止就緒
- 活動阻塞->靜止阻塞
- 靜止就緒->活動就緒
- 靜止阻塞->活動阻塞
-
引入掛起操作后五個進程狀態的轉換
- NULL->創建
- 創建->活動就緒
- 創建->靜止就緒
- 執行->終止
操作系統中的數據結構
- 操作系統中用於管理控制的數據結構
OS管理的這些數據結構一般分為以下四類:內存表、設備表、文件表、進程表。
-
進程控制塊PCB的作用 為了便於系統描述和管理進程的運行,OS的核心為每個進程專門定義了一個數據結構進程控制塊PCB。
- 作為獨立運行基本單位的標志
- 能實現間斷性運行方式
- 提供進程所需要的信息
- 提供進程調度所需要的信息
- 實現與其他進程的同步於通信
-
進程控制塊中的信息
- 進程識別符
- 外部識別符
- 內部識別符
- 處理機狀態
- 進程調度信息
- 進程控制信息
- 進程識別符
-
進程控制塊的組織方式
- 線性方式
- 鏈接方式
- 索引方式
進程控制
進程控制是進程管理中最基本的功能,主要包括創建新進程、終止已完成的進程、將因發生異常情況而無法繼續運行的進程置於阻塞狀態、負責進程運行中的狀態轉換等功能。
進程控制一般是由OS的內核中的原語實現的。
操作系統內核
現代操作系統華為若干層,與硬件緊密相關的模塊、各種驅動程序以及運行頻率較高的模塊安排在緊靠硬件的軟件層次中,將它們常駐內存,通常被稱為OS內核。
兩個目的:一是對於這些軟件的保護,放置遭受其他應用程序的破壞;二是可以提高OS的運行效率。
為了方式OS本身以及相關數據遭到破壞,處理機執行狀態分為:
1. 系統態(管態,內核態):有較高權限,能執行一切指令。
2. 用戶態(目態):具有較低特權的執行狀態。
- 支撐功能
- 中斷處理
- 時鍾管理
- 原語操作
- 資源管理功能
- 進程管理
- 存儲器管理
- 設配管理
進程的創建
- 進程的層次結構
OS中,允許一個進程創建另一個進程,PCB中設置了家族關系表。
- 進程圖
進程圖就是用於描述進程關系的一棵又向樹。
- 引起創建進程的事件
- 用戶登錄
- 作業調度
- 提供服務
- 應用請求
- 進程的創建
- 申請空白的PCB
- 為新進程分配其運行資源
- 初始化PCB
- 初始化標識信息
- 初始化處理機狀態信息
- 初始化處理機控制信息
- 插入就緒隊列
進程的終止
- 引進進程終止的事件
- 正常結束
- 異常結束
- 外界干預
- 進程終止的過程
- PCB集合中檢索出該進程的PCB
- 終止進程的執行
- 終止子進程
- 將被終止進程所擁有的資源歸還父進程
- 將終止進程PCB從所在隊列中移出
進程的阻塞與事件
- 引起進程阻塞和喚醒的事件
- 向系統請求共享資源失敗
- 等待與某種操作的完成
- 新數據尚未到達
- 等待新任務的到達
- 進程阻塞的過程
正在執行的進程發生上述事件,進程邊通過阻塞原語block將自己阻塞。
阻塞是一種主動行為。 - 進程喚醒過程
當阻塞過程所期待的時間發生時,有關進程調用喚醒原語wakeup。wakeup執行過程是:現將被阻塞的進程從等待該事件的阻塞隊列移出,將其PCB中現行狀態改為就緒,然后將該PCB插入就緒隊列。
進程的掛起與激活
-
進程的掛起
當系統中出現掛起事件時,OS利用掛起原語suspend將進程掛起。
-
進程的激活過程
當系統中發生激活進程事件時,OS將利用激活原句active,將指定進程激活。
進程同步
進程同步的基本概念
進程同步機制的主要任務,是對多個相關進程在執行次序上進行協調,使並發執行的諸進程之間能按照一定的規則(或時序)共享資源,並能很好地相互合作。
- 兩種形式的制約關系
- 間接相互制約關系
- 直接相互制約關系
- 臨界資源
諸如打印機、磁帶機等都屬於臨界資源,進程之間采用互斥方式。
- 臨界區
每個進程中訪問鄰接資源的代碼稱為臨界區。
- 同步機制應遵循的規則
- 空閑讓進
- 忙則等待
- 有限等待
- 讓權等待
硬件同步機制
- 關中斷
- 利用Test and Set指令實現互斥
- 利用Swap指令實現進程互斥
信號量機制
- 整型型號量
- 記錄型信號量
- AND型型號量
- 信號量集
信號量應用
- 利用信號量實現進程互斥
- 利用信號量實現前趨關系
管程機制
- 管程的定義
管程由四部分組成:①管程的名稱;②局部對於管程的共享數據結構說明;③對該數據結構進行操作的一組過程;四隊局部於管程的共享數據設置初始值的語句。
- 條件變量
經典的同步問題
生產者-消費者問題
哲學家進餐問題
讀者——寫者問題
進程通信
進程通信是指進程之間的信息交換 由於進程的互斥同步需要交換一定信息,也歸為進程通信,不過只是低級進程通信。 低級的原因:①效率低;②通信對用戶不透明。 進程之間傳輸數據時,應當利用OS提供的高級通信工具,該工具特點: ①使用方便。 ②高效地傳送大量數據。
進程通信的類型
- 共享存儲器系統
- 基於共享數據結構的通信方式
- 基於共享存儲區的通信方式
- 管道通信系統
連接一個讀進程一個寫進程以實現它們之間通信的一個共享文件,又名pipe文件。 管道機制必須提供的三方面的協調能力: ①互斥 ②同步 ③確定對方是否存在,只有對方已存在才能進行通信。 - 信息傳遞系統
- 直接通信方式
- 間接通信方式
- 客戶機-服務器系統
- 套接字
套接字就是一個通信標識類型的數據結構,包括了: 通信目的地址、通信使用端口號、通信網絡所在的網絡地址、不同的系統調用(API函數等) 通常,套接字分為兩類: ①基於文件型 ②基於網絡型 - 遠程過程調用
- 遠程方法調用
- 套接字
消息傳遞通信的實現方式
- 直接信息傳遞系統
- 直接通信原語
- 對稱尋址方式
send(receiver,message) receive(sender,message)
- 非對稱尋址方式
send(P,message) receive(id,messaage)
- 對稱尋址方式
- 消息的格式
- 進程的同步方式
- 通信鏈路
- 直接通信原語
- 信箱通信
- 結構:信箱頭、新箱體
- 信箱通信原語
- 信箱通信類型
私用信箱、公用信箱、共享信箱
直接信息傳遞系統實例
- 信息緩沖隊列通信機制中的數據結構
- 發送原語
- 接收原語
線程的基本概念
### 線程的引入
為了減少程序在並發執行時所付出的時空開銷,使OS具有更好的並發行。
- 進程的兩個基本屬性
- 進程是一個可擁有資源的獨立單位
- 進程同時又是一個可獨立調度和分派的基本資源
- 進程並發執行所需付出的時空開銷
為了能使進程能夠並發執行,系統必須要: 1、創建進程;2、撤銷進程;3、進程切換 所以系統要為之付出很大的時空開銷 - 線程——作為調度和分派的基本單位
如何能使多個程序更好地並發執行,同時又盡量減少系統開銷~~~ 這種思想下引入了線程。
線程與進程的比較
線程稱為輕型進程,傳統進程稱為重型進程
- 調度的基本單位
- 並發性
- 擁有資源
線程本身並不具有系統資源,而是僅有一點必不可少、能夠保證獨立運行的資源。
- 獨立性
同一進程中的不同線程之間的獨立性要比不同進程之間的獨立性低得多
- 系統開銷
線程創建、切換、撤銷的代價遠低於進程的
- 支持多處理機系統
線程的狀態和線程的控制塊
-
線程運行的三個狀態
- 執行狀態
- 就緒狀態
- 阻塞狀態
-
線程控制塊TCB
系統給線程配置了PCB,PCB包括:
- 線程標識符
- 一組寄存器
- 線程運行狀態
- 優先級
- 線程專有存儲區
- 信號屏蔽
-
多線程OS中的進程屬性
- 進程是一個可擁有資源的基本單位
- 多個線程可以並發執行
- 進程已不是可執行的實體
線程的實現
線程的實現方式
線程在許多系統已經實現,但各系統的實現方式並不完全相同。
-
內核支持線程
這種線程的實現方式有四個主要優點:
- 多處理器系統中,內核能夠同時調度同一進程中的多個線程並行執行
- 如果進程中的一個線程被阻塞了,內核可以調度該進程中的其他線程占有處理器運行,也可以運行其他進程中的線程。
- 內核支持線程具有很小的數據結構和堆棧,線程的切換比較快,切換開銷小。
- 內核本身也采用多線程技術,可以提高系統的執行速度和效率。
-
用戶級線程
用戶級線程與內核無關,都是在用戶空間中實現的。
-
組合方式
有些OS把用戶級線程和內核支持線程兩種方式進行組合
- 多對一模型
- 一對一模型
- 多對多模型
線程的實現
- 內核支持線程的實現
系統在創建一個新進程時,給它分配一個任務數據區PTDA,其中包括若干個線程控制塊TCB空間。 每當進程要創建一個新線程時,便為新線程分配一個TCB,將有關信息填入該TCB中,並為之配置必要的資源。
- 用戶級線程的實現
- 運行時系統
- 內核控制線程
線程的創建和終止
-
線程的創建
在創建新進程時,需要利用一個線程創建函數。在系統的創建函數執行完后,將返回一個線程識別符供以后使用。
-
線程的終止
當一個線程完成了自己的任務后,由終止函數通過調用相應的函數對它執行終止操作。
習題
- 什么是前趨圖,為什么要引入前趨圖?
前趨圖是一個有向無環圖,記為DAG,用於描述進程之間的前后關系。
- 畫出下面四條語句的前趨圖:
S1:a=x+y S2:b=z+1 S3:c=a-b S4:w=c+1
答案略
- 為什么程序並發執行會產生間斷性特征?
程序在並發執行時,由於它們共享資源,以及為完成同一項任務而相互合作,導致這些並發執行的進程之間,形成了相互制約的關系,從而也就使得進程在執行期間出現了間斷性。
- 程序並發執行時為什么會失去封閉性和可再現性?
答:因為程序並發執行時,是多個程序共享系統中的各種資源,因而這些資源的狀態是由多個程序來改變,致使程序的運行失去了封閉性。而程序一旦失去了封閉性也會導致失去可再現性。
- 在操作系統中為什么要引入進程的概念?他會產生什么樣的影響?
為了使程序在多到程序環境下能並發執行,並對並發執行的程序加以控制和描述,從而在操作系統中引入了進程概念。影響:使程序的並發執行得以實行。
- 試從動態性、並發性、獨立性上比較進程和程序。
動態性是進程最基本的特性,可表現為由創建而產生,由調度而執行,因得不到資源而暫停執行,以及由撤銷而消亡,因而進程有一定的生命期;而程序只是一組有序指令的集合,是靜態實體。 並發性是進程重要的特征,同時也是OS的重要特征。引入進程的目的正是為了使其程序和其他建立了進程的程序並發執行,而程序本身是不能並發執行的。 獨立性是指進程實體是一個獨立運行的基本單位,同時也是系統中獨立獲得資源和獨立調度的基本單位。而對於未建立任何進程的程序,都不能作為一個獨立單位來運行。
- 試說明PCB的作用具體表現在哪幾個方面?為什么說PCB是進程存在的唯一標志?
PCB是進程實體的一部分,是操作系統總最重要的記錄型數據結構。PCB中記錄了操作系統所需用於描述進程情況及控制進程所需的全部信息。因而它的作用是使一個在多到程序環境下不能獨立運行的程序,成為一個獨立運行的基本單位,一個能和其他進程並發執行的過程。 在進程的整個生命周期中,系統總是通過PCB對進程進行控制,系統是根據進程PCB而不是任何別的什么而感知該進程存在的,所以說PCB是進程存在的唯一標志。
- 試說明進程在三個基本狀態之間的轉化的典型原因。
(1)就緒狀態->執行狀態:進程分配到CPU資源。 (2)執行狀態->就緒狀態:時間片完成 (3)執行狀態->阻塞狀態:I/O請求 (4)阻塞狀態->執行狀態:I/o完成
- 為什么要引入掛起狀態?該狀態有哪些性質?
1. 終端用戶的需要。 2. 父進程請求。 3. 負荷調節的需要。 4. 操作系統的需要。 5. 對換需要
- 是說明線程有哪些屬性?
(1)輕型實體 (2)獨立調度和分派的基本單位 (3)可並發執行 (4)共享進程資源
