當前位置:菜譜大全網 - 菜譜 - 進程的基本概念

進程的基本概念

壹、進程的引入

多道程序系統中,程序具有:並行、制約以及動態的特征。程序概念難以便是和反映系統中的情況:

1. 程序是壹個靜態的概念

程序是完成某個功能的指令集和。系統實際上是出於不斷變化的狀態中,程序不能反映這種動態性。

2. 程序概念不能反映系統中的並行特性

例如:兩個C語言源程序由壹個編譯程序完成編譯,若用程序概念理解,內存中只有壹個編譯程序運行(兩個源程序看作編譯程序的輸入數據),但是這樣無法說明白內存中運行著兩個任務。程序的概念不能表示這種並行情況,反映不了他們活動的規律和狀態變化。就像不能用菜譜(程序)代替炒菜(程序執行的過程)壹樣(這句話我稍微修改了壹下,感覺應該是這樣表訴才對)。

二、進程的定義

進程:壹個具有壹定獨立功能的程序關於某個數據集合的壹次運行活動,是系統進行資源分配和調度運行的基本單位。

三、進程與程序的差別

1. 進程是壹個動態的概念

進程是程序的壹次執行過程,是動態概念。

程序是壹組有序的指令集和,是靜態概念。

2. 不同的進程可以執行同壹個程序

區分進程的條件:所執行的程序和數據集合。

兩個進程即使執行在相同的程序上,只要他們運行在不同的數據集合上,他們也是兩個進程。例如:多個用戶同時調用同壹個編譯程序編譯他們編寫的C語言源程序,由於編譯程序運行在不同的數據集合(不同的C語言源程序)上,於是產生了壹個個不同的進程。

3. 每個進程都有自己的生命周期

當操作系統要完成某個任務時,它會創建壹個進程。當進程完成任務之後,系統就會撤銷這個進程,收回它所占用的資源。從創建到撤銷的時間段就是進程的生命期。

4. 進程之間存在並發性

在壹個系統中,同時會存在多個進程。他們輪流占用CPU和各種資源。

5. 進程間會相互制約

進程是系統中資源分配和運行調度的單位,在對資源的***享和競爭中,必然相互制約,影響各自向前推進的速度。

6. 進程可以創建子進程,程序不能創建子程序

7. 從結構上講,每個進程都由程序、數據和壹個進程控制塊(Process Control Block, PCB)組成

四、進程的重要特征

1. 動態特征:進程對應於程序的運行,動態產生、消亡,在其生命周期中進程也是動態的。

2. 並發特征:任何進程都可以同其他進程壹起向前推進。

3. 獨立特征:進程是相對完整的調度單位,可以獲得CPU,參與並發執行。

4. 交往特征:壹個進程在執行過程中可與其他進程產生直接或間接關系。

5. 異步特征:每個進程都以相對獨立、不可預知的速度向前推進。

6. 結構特征:每個進程都有壹個PCB作為他的數據結構。

進程最基本的特征是並發和***享特征。

五、進程的狀態與轉換

1. 進程的三種基本狀態

a. 運行狀態:獲得CPU的進程處於此狀態,對應的程序在CPU上運行著。

b. 阻塞狀態:為了等待某個外部事件的發生(如等待I/O操作的完成,等待另壹個進程發來消息),暫時無法運行。也成為等待狀態。

c. 就緒狀態:具備了壹切運行需要的條件,由於其他進程占用CPU而暫時無法運行。

2. 進程狀態轉換

a. 運行狀態 ===> 阻塞狀態:例如正在運行的進程提出I/O請求,由運行狀態轉化為阻塞狀態。

b. 阻塞狀態 ===> 就緒狀態:例如I/O操作完成之後,由阻塞狀態轉化為就緒狀態。

c. 就緒狀態 ===> 運行狀態:例如就緒狀態的進程被進程調度程序選中,分配到CPU中運行,由就緒狀態轉化為運行狀態。

d. 運行狀態 ===> 就緒狀態:處於運行狀態的進程的時間片用完,不得不讓出uCPU,由運行狀態轉化為就緒狀態。

3. 進程的類型

a. 系統進程:操作系統用來管理資源的進程,當系統進程處於運行態時,CPU處於管態,系統之間的關系由操作系統負責。

b. 用戶進程:操作系統可以獨立執行的的用戶程序段,當用戶進程處於運行態時,CPU處於目態,用戶進程之間的關系由用戶負責。

六、進程控制塊

1. 進程的三個組成部分

a. 程序

b. 數據

c. 進程控制塊(PCB):為了管理和控制進程,系統在創建每個進程時,都為其開辟壹個專用的存儲區,用以記錄它在系統中的動態特性。系統根據存儲區的信息對進程實施控制管理。進程任務完成後,系統收回該存儲區,進程隨之消亡,這壹存儲區就是進程控制塊。

PCB隨著進程的創建而建立,撤銷而消亡。系統根據PCB感知壹個進程的存在,PCB是進程存在的唯壹物理標識(這壹點可以類比作業控制塊JCB)。

2. 進程控制塊的內容

PCB在不同的語言中,可能用不同的數據結構表示。為了系統管理和控制進程方便,系統常常將所有進程的PCB存放在內存中系統表格區(這是什麽區?不懂,待我仔細查查),並按照進程內部標號由小到大順序存放。

整個系統中各進程的的PCB集合可用數組表示。這時進程內部標號可以與數組元素下標聯系。

各系統預留的PCB空間往往是固定的,如UNIX系統中規定進程數量不超過50個(這壹點我有點懷疑)。

操作系統不同,PCB的格式、大小及內容也不盡相同。壹般的,應該包含如下四個信息。

a. 標識信息:進程名。

b. 說明信息:進程狀態、程序存放位置。

c. 現場信息:通用寄存器內存、控制寄存器內存、斷點地址。

d. 管理信息:進程優先數、隊列指針。

七、進程控制塊的組織

系統中,有著許多不同狀態的進程,處於阻塞狀態的進程阻塞原因各不相同,為了便於調度和管理,常將進程控制塊PCB用適當的方法組織起來。

1. 線性結構

把所有不同狀態的進程的PCB組織在壹個表格中。

最簡單,適用於進程數目不多的操作系統,如UNIX系統,缺點是調用時,往往需要查詢整個PCB表,時間復雜度略高。

2. 索引結構

分別把具有不同狀態的進程PCB組織在同壹個表中,於是有就緒進程表、運行進程表(多機系統中,還有現在的多核系統應該也有吧)以及各種等待事件的阻塞進程表。

系統中的壹些固定單元分別指出各表的起始地址。

3. 鏈式結構

采用隊列形式時,每個進程的PCB中要增加壹個鏈指針表項,指向隊列的下壹個PCB起始地址。