操作系統 - 進程的概念


計算機中,CPU是最寶貴的資源,為了提高CPU的利用率,引入了多道程序設計的概念。當內存中多個程序存在時,如果不對人們熟悉的“程序”的概念加以擴充,就無法刻畫多個程序共同運行時系統呈現出的特征。

 

一、進程的引入

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

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起始地址。

為了對這些隊列進行管理,操作系統要做三件事:

a. 把處於同一狀態的進程的PCB通過各自隊列的指針鏈接在一起,形成隊列

b. 為每一個隊列設立一個對頭指針,總是指向隊首的PCB

c. 排在隊尾的PCB的隊列指針項內容應該是“-1”或者一個特殊符號,表示這是隊尾PCB

在單CPU系統中,任何時刻都只有一個處於運行態的進程

所有處於阻塞隊列中的PCB應該根據產生阻塞的原因今進行排隊,每一個都稱為阻塞隊列,比如等待磁盤I/O的阻塞隊列,等待打印機輸出的阻塞隊列

八、進程控制

1. 原語

要對進程進行控制,系統中必須設置一個機構,它具有創建進程、撤銷進程、進程通信和資源管理等功能,這樣的結構稱為操作系統的內核(kernel)

內核本身不是一個進程,而是硬件的首次延伸,它是加在硬件上的第一層軟件。內核是通過執行各種原語操作來完成各種控制和管理功能的

原語(primitive)是機器指令的延伸,用若干條機器指令構成,用以完成特定功能的一段程序。為保證操作的正確性,原語在執行期間是不可分割的(這點可以類比數據庫中的事務)

用於進程控制的原語有:創建進程原語、撤銷進程原語、阻塞進程原語、喚醒進程原語、調度進程原語、改變優先級原語等

2. 創建進程原語

一個進程如果需要時,可以創建一個新的進程。被建立的進程稱為子進程,建立者進程稱為父進程

所有的進程都只能通過父進程建立,不能自生自滅

創建進程原語拱進程調用,用以建立子進程

該原語的主要工作:為被建立的進程簡歷一個進程控制塊,填入相應的初始值。主要操作過程是先向系統的PCB空間申請分配一個空閑的PCB,然后根據父進程所提供的參數,將子進程的PCB表目初始化,最后返回一個子進程內部名

3. 撤銷進程原語

由父進程撤銷子進程的PCB,注意,這里會撤銷一個以該子進程為根的進程子樹,並回收占用的全部資源

4. 阻塞原語

在阻塞原語的作用下,進程由運行狀態轉化為阻塞狀態

5. 喚醒原語

在喚醒原語的作用下,進程由阻塞狀態轉化為就緒狀態

6. 改變進程優先級原語

進程的優先級是表示進程的重要性以及運行的優先性,拱進程調度程序調度進程運行時使用

為了防止一些進程因優先級較低,而長期得不到運行,許多系統采用動態優先級,進程的優先級按照一些原則變化

通常,進程優先級和以下因素有關系:

a. 作業開始時的靜態優先數:作業的優先數取決於作業的重要程度、用戶為作業運行時所付出的價格和費用大小、作業的類型等因素

b. 進程的類型:一般系統進程的優先數大於用戶進程的優先數;I/O型進程的優先數大於CPU型進程的優先數。這些都是為了充分發揮系統I/O設備的效能

c. 進程所使用的資源量:使用CPU的時間越多,優先級越低。對其他資源使用的情況也類似的考慮

d. 進程在系統中的等待時間:等待時間越長,進程優先級越高

各系統處於不同的考慮,有不同的優先數計算公式。這些公式主要來自於時間經驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM