從進程的觀點研究操作系統,把OS看作是由若干個可獨立運行的程序和一個可對這些程序進行協調控制的核心(內核)組成。
這些運行的程序稱為進程,它是資源分配和獨立運行的基本單位,每一個進程都完成某一特定任務。OS的內核則必須要控制和協調這些進程的運行,解決進程之間的通信,并從系統可并發工作為出發點,實現并發進程間通信,并解決由此帶來的共享資源的競爭問題。
本文地址:http://www.CUOXin.com/archimedes/p/os-PRocess-management1.html,轉載請注明源地址。
1.進程的基本概念前趨圖:定義:有向無循環圖,是一個二元組,由結點的集合和有向邊組成。其中:
結點:表示一條語句、一個程序段或一個進程有向邊:兩個結點之間的前趨關系“ ”(→={(Pi,Pj)|Pi必須在Pj開始執行之前完成})。
直接前趨、直接后繼
初始結點、終止結點
程序順序執行通常一個程序可分成若干個程序段,它們必須按照某種先后次序執行,僅當前一操作執行后,才能執行后繼操作。
Eg2:進行計算: I:輸入操作 C:計算操作 P:打印操作 在進行計算時,總是先輸入用戶的程序和數據,然后進行計算,最后將結果打印出來。
程序順序執行時有如下特征:
順序性—處理機的操作嚴格按照程序所規定的順序執行,每一操作必須在下一個操作開始之前結束。
封閉性—在封閉環境下執行,獨占全機資源,執行結果不受外界影響。
可再現性—只要程序執行時的環境和初始條件相同,當程序重復執行時,不論它是從頭到尾不停頓地執行,還是“走走停停”地執行,都將獲得相同的結果。
程序并發執行在處理一批作業時,有的程序可實現并發執行1、進程(process)的定義
1)進程是程序的一次執行。
2)進程是一個程序及其數據在處理機上順序執行時所發生的活動。
3)進程是程序在一個數據集合上的運行過程,它是系統進行資源分配和調度的一個獨立單位。
進程與程序的主要區別:程序 | 進程 | |
概念 | 靜態 | 動態 |
所在存儲器 | 外存 | 內存 |
存在時間 | 永久 | 有生命期 |
組成 | 有序指令 | 程序段,數據段,PCB |
對應關系 | 一個程序可對應多個進程 一個進程可對應多個程序 |
進程(process)的基本特征:
(1)結構特征
為了描述和記錄進程的運動變化過程,并使之能正確運行,每個進程都應配置了一個PCB。所以,從結構上看,每個進程(進程實體)都是由程序段、相關數據段及進程控制塊(PCB)組成。
注:在早期UNIX版本中稱進程的三個組成部分為“進程映像”
(2)動態性
進程的實質是程序在處理機上的一次執行過程,因此是動態的。所以動態性是進程的最基本的特征。同時動態性還表現在進程是有生命期的,它因創建而產生,因調度而執行,因得不到資源而暫停執行,因撤消而消亡。
(3)并發性
指多個進程實體同時存在于內存中,能在一段時間內同時運行。
引入進程的目的就是為了使進程能并發執行,以提高資源利用率,所以并發性是進程的重要特征,也是OS的重要特征。
(4)獨立性
指進程是一個能獨立運行的基本單位,也是系統進行資源分配和調度的獨立單位。
(5)異步性
指進程以各自獨立的、不可預知的速度向前推進。
進程的狀態為了刻畫了整個進程,可以將一個進程的生命周期劃分為一組狀態:
1、進程的五種狀態(兩種短暫的狀態、三種基本狀態)new新建/創建:進程正在創建中的狀態terminated終止/撤消/退出:進程執行完畢,釋放所占資源的狀態。ready-就緒: 進程已獲得了除處理機以外的所有資源,等待分配處理機執行的狀態。running-運行/執行: 當一個進程獲得必要的資源并正在處理機上執行的狀態。waiting-等待/阻塞: 正在執行的進程由于發生某事件而暫時無法執行下去,此時進程所處的狀態。進程在運行期間并非固定處于某個狀態,而是不斷從一個狀態轉換到另一個狀態。
2、進程狀態轉換在某些系統中,為了更好地管理和調度進程,引入了掛起狀態:
掛起狀態/靜止狀態:程序在運行期間,由于某種需要,往往要將進程暫停執行,使其靜止下來,以滿足某些需要。這種靜止狀態就稱為進程的掛起狀態。
引入掛起狀態的原因:
在引入掛起狀態后,就增加了掛起狀態(靜止狀態)與非掛起狀態(活動狀態)間的轉換,如圖所示:
進程控制塊PCB
是操作系統為了管理和控制進程的運行而為每一個進程定義的一個數據結構,它記錄了系統管理進程所需的全部信息。系統根據PCB而感知進程的存在,PCB是進程存在的唯一標志。例:linux中的PCB
1、進程控制塊PCB的作用
?是OS對并發執行的進程進行控制和管理的根據。也是系統用來感知進程存在的根據,即PCB是進程存在的唯一標志。2、進程控制塊PCB中的信息
根據操作系統的要求不同,PCB所包含信息有些不同,但通常包含以下信息:
?(1)進程標識符:內部標識符(由系統創建進程時分配給進程的唯一標識號,通常為一整數,稱為進程號,用于區分不同的進程)外部標識符(由字母、數字組成,由用戶訪問該進程時使用)。
?(2)處理機狀態(斷點信息): 即處理機中各種寄存器(通用寄存器、PC、PSW等)的內容
?(3)進程調度: 記錄了進程調度的相關信息(狀態、優先級、事件等)。
?(4)進程控制:記錄了系統對進程控制的信息(程序和數據的地址、同步機制、資源清單、鏈接指針)
3、進程控制塊PCB的組織方式
在一個系統中,通常存在著許多進程,它們所處的狀態不同,為了方便進程的調度和管理,需要將各進程的PCB用適當方法組織起來。目前常用的組織方式有:?
鏈接方式:把同一狀態的PCB鏈接成一個隊列,這樣就形成了就緒隊列、阻塞隊列等。
進程控制是進程管理中最基本的功能,即對系統中所有的進程實施有效的管理,其功能包括
這些功能一般是由操作系統的內核來完成。
進程創建一個進程可以創建若干個新進程,新創建的進程又可以創建子進程,為了描述進程之間的創建關系,引入了進程圖(如下圖所示:)
1、進程圖:又稱為進程樹或進程家族樹,是描述進程家族關系的一棵有向樹。
在多道程序環境中,只有進程才可以在系統中運行。為了使一個程序能運行,必須為它創建進程。導致進程創建的事件有:
用戶登錄:在分時OS中,用戶在終端鍵入登錄命令后,如是合法用戶,則系統為該終端創建一進程,并插入就緒隊列。作業調度:在批處理OS中,當按某算法調度一作業進內存,系統為之分配必要資源,同時為該作業創建一進程,并插入就緒隊列。
?提供服務:在程序運行中,若用戶需某種服務,則系統創建一進程為用戶提供服務,并插入就緒隊列。
?應用請求:在運行中,由于應用進程本身的需求,自己創建一進程,并插入就緒隊列。
3、進程的創建
操作系統一旦發現了要求創建進程的事件后,便調用進程創建原語create()按以下過程創建一新進程:
一個進程在完成其任務后,應加以撤消,以便及時釋放其占有的各類資源。
1、導致進程撤消的事件
如果系統中發生了要求撤消進程的事件,OS便調用撤消原語去撤消進程。
2、撤消原語可采用2種撤消策略
只撤消指定的進程
撤消指定進程及其所有的子孫進程
進程的撤消的過程:
當一個進程期待的事件還沒有出現時,該進程調用阻塞原語block()將自己阻塞起來;
block()功能:將進程由執行狀態轉變為阻塞狀態。
對于處于阻塞狀態的進程,當該進程期待的事件出現時,由其它相關進程調用喚醒原語wakeup() 將阻塞的進程喚醒,使其進入就緒狀態;
wakeup()功能:將進程由阻塞狀態轉變為就緒狀態。
1、引起進程阻塞和喚醒的事件
2、進程的阻塞過程
3、進程的喚醒過程
當引起進程掛起的事件發生時,系統就將利用掛起原語suspend()將指定進程或處于阻塞狀態的進程掛起。當發生激活進程的事件時,系統就將利用激活原語active()將指定進程激活。
進程的掛起過程:
進程的激活過程:
新聞熱點
疑難解答