摘要:進程是《操作系統》課程最重要的概念之一,建立進程這個概念,對于學好這門課程至關重要。該文首先從多道程序設計這個概念入手,接著敘述為什么引入進程這個概念,進而闡述進程的地位,進程的概念、特征、狀態及其轉換,進程與程序的區別。隨著計算機技術的發展,又出現了線程的概念,在其它計算機文獻中時常還提到管程這個概念,文章最后對進程,線程,管程這三個概念作簡要的說明比較。
關鍵詞:多道程序;進程;線程
中圖分類號:TP316文獻標識碼:A文章編號:1009-3044(2010)21-5834-03
Analyse the Concept of the Process
WANG Yan
(Bozhou Teachers College of Technology, Bozhou 236800, China)
Abstract: Process is one of the most important concepts of \"Operating System\" course.It is important that we form the conceptof process to understand the course.In this paper,fist,I introduce the concept of multiprogram and why introducethe concept.And then I elaborate on the status of the process, the process concept, characteristics, state and itsconversion, the difference between the process and procedure.With the development of computer technology,the concept of thread and tube are emerge.Finally, I discuss the differences among process, thread and tube.
Key words: multiprogram; process; thread
1 多道程序設計
在早期的單道程序工作環境中,內存中只有一個作業的程序,因此系統資源的利用率不高,為了提高資源利用率和增加系統吞吐量,在60年代中期就引入了多道程序設計技術。多道程序設計是在一臺計算機上同時運行兩個或更多個程序。即在內存中同時存放多道程序,在管理程序的控制下交替地執行。這些程序共享CPU和系統中的其它資源。由于共享一臺CPU,所以在每一時刻真正在CPU上執行的程序只有一個。從宏觀上看,系統中的多個程序都同時得到執行,即程序是并發執行的。
在多道程序設計環境中,程序的并發執行和資源共享使得系統的工作情況變得非常復雜,不像順序執行時那么簡單,它產生了新的特征。程序在并發執行中,失去了封閉性,計算的結果與程序執行時的相對速度有關,從而失去了可再現性,程序與計算不再一一對應。而且一個程序的執行過程不再僅僅由自身代碼決定,要受到其它并發程序的制約。
2 進程概念的引入
多道程序在并發執行時,需要共享系統資源,共同決定這些資源的狀態,因此系統中各程序在執行過程中出現相互制約的新關系,程序的執行表現出間斷性的新特征。這些都是在程序的執行過程中發生的,是動態的過程,而傳統的程序本身是機器能夠翻譯或執行的一組動作或指令,是一個靜態的概念,無法描述程序在內存中的執行情況,即我們無法直接從程序的字面上看出它何時執行,何時停頓,也無法看出它與其它執行程序的關系,因此,程序這個靜態概念已不能如實反映程序并發執行過程的特征。為了深刻描述程序動態執行過程的性質,人們引入“進程(Process)”概念。
3 進程
3.1 進程的定義
“進程”是操作系統的最基本、最重要的概念之一。引進這個概念對于理解、描述和設計操作系統都具有極其重要的意義,但是迄今為止,對這個概念還沒有形成統一的定義,都是從不同的角度來描述它的各個基本特征。下面列舉出比較能反映進程實質的幾種定義:
進程(或任務)是可以和別的計算并發執行的計算。
進程是程序的一次執行,是在給定內存區域中的一組指令序列的執行過程。
進程可定義為一個數據結構和能在其上進行操作的一個程序。
從以上三種定義來看,每一種定義都反映出進程最根本的屬性:動態性。同時,在多道程序設計環境中,各程序都是并發執行的,所以我們把進程定義為:程序在并發環境中的執行過程。
3.2 進程的特征
1)動態性:進程的實質是程序的一次執行過程,進程是動態產生,動態消亡的,有生有亡,有活動有停頓,可以處于不同的狀態。
2)并發性:多個進程的實體能存在于同一內存中,在一段時間內都得到運行。這樣任何進程都可以同其他進程一起并發執行了。
3)獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位。操作系統中有很多調度程序,它們根據各自的策略調度合適的進程,為其運行提供條件。
4)異步性:進程按各自獨立的、不可預知的速度向前推進,即異步方式運行。這造成進程間的相互制約,使進程具有執行的間斷性,失去再現性。為保證各程序的協調運行,需要采取必要的措施,如PV操作。
5)結構性:進程有一定的結構,它由程序段、數據段和進程控制塊等組成。程序規定了該進程所要執行的任務,數據是程序操作的對象,而控制結構中含有進程的描述信息和控制信息,是進程組成中最關鍵的部分,也是進程存在的惟一標志。
動態性與并發性是進程最根本的特征。
3.3 進程的狀態
進程是程序的執行過程,有著走走停停的活動規律。進程的動態性是由它的狀態和轉換體現出來的。一個進程在其生存期內,可處于一組不同的狀態下,稱為進程狀態。如果一個事物始終處于一個狀態,那么它就不再是活動的,就沒有生命力了。通常在操作系統中,進程至少要有三種基本狀態。這些狀態是處理機挑選進程運行的主要因素,所以又稱之為進程控制狀態。這三種基本狀態是:運行態,就緒態和阻塞態。
1)運行狀態(Running):運行狀態是指當前進程已分配到CPU,它的程序正在處理機上執行時的狀態。處于這種狀態的進程的個數不能大于CPU的數目。在一般單CPU系統中,任何時刻處于運行狀態的進程至多是一個。在多處理器系統中,同時處于運行狀態的進程可以有多個。
2)就緒態(Ready):就緒狀態是指進程已具備運行條件,但因為其它進程正占用CPU,所以暫時不能運行而等待分配CPU的狀態。一旦把CPU分給它,它立即就可以運行。在操作系統中,處于就緒狀態的進程數可以是多個。
3)阻塞態(Blocked):阻塞狀態是指進程因等待某種事件發生(例如等待某一輸入、輸出操作完成,等待其它進程發來的信號等)而暫時不能運行的狀態。
3.4 進程的轉換
進程在其生存期間不斷發生狀態轉換:從一種狀態變為另一種狀態。由狀態的轉換反映出動態效果。一個進程可以多次處于 就緒狀態和運行態,也可以多次處于阻塞態,但可能排在不同的阻塞隊列上。在一定條件下,進程狀態才發生轉換。
1)就緒─>運行:處于就緒狀態的進程被調度程序選中,分配到CPU后,該進程的狀態就由就緒變為運行態。處于運行態的進程也稱作當前進程。此當前進程的程序在CPU上執行,它真正是活動的。
2)運行─>阻塞:正在運行的進程因某種條件未滿足而放棄對CPU的占用,例如該進程要求讀入文件中的數據,在數據讀入內存之前,該進程無法繼續下去。它只好放棄CPU,等待讀文件這一事件的完成。這個進程的狀態就由運行態變為阻塞態。不同的阻塞原因對應不同的阻塞隊列。就好象排隊買火車票那樣,不同火車對應不同的隊列(窗口)。
3)阻塞─>就緒:處于阻塞狀態的進程所等待的事件發生了,例如讀數據的操作完成,系統就把該進程的狀態由阻塞態變為就緒態。此時該進程就從阻塞隊列中出來,進入到就緒隊列中,然后與就緒隊列中的其它進程競爭CPU。
4)運行─>就緒:正在運行的進程如用完了本次分配給它的CPU時間片,它就得從CPU上退下來,暫停運行。該進程的狀態就由運行態變為就緒態,與就緒隊列中的其它進程競爭CPU。以后一旦進程調度程序選中它,它就可以繼續運行了。
3.5 進程與程序的區別
進程與程序有密切的聯系:進程不能脫離具體程序而虛設,程序規定了相應進程所要完成的動作。
進程定義為程序在并發環境中的執行過程,它與程序是完全不同的概念。主要區別在于:
1)程序是靜態概念,是永久性軟件資源;而進程是動態概念,是動態生亡的暫存性資源。
2)進程是一個能獨立運行的單位,能與其它進程并發執行,系統是以進程為單位分配CPU的;而程序則不能作為一個能獨立運行單位。
3)程序和進程沒有一一對應關系。一個程序在工作時可以由多個進程工作,一個進程在工作時至少對應有一個程序。
4)各個進程在并發執行時會產生制約關系,使各自推進的速度不可預測;而程序作為靜態概念,不存在這種異步特征。
4進程、線程、管程的區別
1)進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性。進程和線程的區別在于:
① 進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位;
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
② 線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器、一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.。
③ 同一個進程中的多個線程之間可以并發執行。從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配,從而極大地提高了程序的運行效率。
2)管程:系統中的各種硬件資源和軟件資源,均可用數據結構抽象地描述其資源特性,即用少量信息和對資源所執行的操作來表征該資源,而忽略了它們的內部結構和實現細節。
利用共享數據結構抽象地表示系統中的共享資源,而把對該共享數據結構實施的操作定義為一組過程。
代表共享資源的數據結構,以及由對該共享數據結構實施操作的一組過程所組成的資源管理程序,共同構成了一個操作系統的資源管理模塊,我們稱之為管程。
一個管程定義了一個數據結構和能為并發進程所執行(在該數據結構上)的一組操作,這組操作能同步進程和改變管程中的數據局部于管程的數據結構,只能被局部于管程的過程所訪問,任何管程之外的過程都不能訪問它;反之,局部于管程的過程也只能訪問管程內的數據結構。由此可見,管程相當于圍墻,它把共享變量和對它進行操作的若干個過程圍了起來,所有進程要訪問臨界資源時,都必須經過管程才能進入,而管程每次只允許一個進程進入管程,從而實現了進程的互斥。
參考文獻:
[1] 湯子瀛,哲鳳屏,湯小丹.計算機操作系統[M].3版.西安:西安電子科技出版社,2001.
[2] 周湘貞.操作系統原理與實踐教程[M].北京:清華大學出版社,2009.
[3] 西爾伯查茨,高爾文,加根.操作系統概念[M].7版:影印版.北京:高等教育出版社,2007.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文