引入多道程序在執(zhí)行時,需要共享系統(tǒng)資源,從而導致各程序在執(zhí)行過程中出現(xiàn)相互制約的關(guān)系,程序的執(zhí)行表現(xiàn)出間斷性的特征。這些特征都是在程序的執(zhí)行過程中發(fā)生的,是動態(tài)的過程,而傳統(tǒng)的程序本身是一組指令的集合,是一個靜態(tài)的概念,無法描述程序在內(nèi)存中的執(zhí)行情況,即我們無法從程序的字面上看出它何時執(zhí)行,何時停頓,也無法看出它與其它執(zhí)行程序的關(guān)系,因此,程序這個靜態(tài)概念已不能如實反映程序并發(fā)執(zhí)行過程的特征。為了深刻描述程序動態(tài)執(zhí)行過程的性質(zhì),人們引入“進程(Process)”概念。
概念
進程是60年代初首先由麻省理工學院的MULTICS系統(tǒng)和IBM公司的CTSS/360系統(tǒng)引入的。
進程是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它可以申請和擁有系統(tǒng)資源,是一個動態(tài)的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數(shù)器的值和處理寄存器的內(nèi)容來表示。
windows的進程管理器
定義
狹義定義:進程就是程序的執(zhí)行過程。
進程是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。
主要兩點
進程的概念主要有兩點:第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲著活動過程調(diào)用的指令和本地變量。第二,進程是一個“執(zhí)行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。
進程是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動規(guī)律引進的一個概念,所有多道程序設(shè)計操作系統(tǒng)都建立在進程的基礎(chǔ)上。
原因
操作系統(tǒng)引入進程的概念的原因:
從理論角度看,是對正在運行的程序過程的抽象;
從實現(xiàn)角度看,是一種數(shù)據(jù)結(jié)構(gòu),目的在于清晰地刻畫動態(tài)系統(tǒng)的內(nèi)在規(guī)律,有效管理和調(diào)度進入計算機系統(tǒng)主存儲器運行的程序。
特征
動態(tài)性:進程的實質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,進程是動態(tài)產(chǎn)生,動態(tài)消亡的。
并發(fā)性:任何進程都可以同其他進程一起并發(fā)執(zhí)行
獨立性:進程是一個能獨立運行的基本單位,同時也是系統(tǒng)分配資源和調(diào)度的獨立單位;
異步性:由于進程間的相互制約,使進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預知的速度向前推進
結(jié)構(gòu)特征:進程由程序、數(shù)據(jù)和進程控制塊三部分組成。
多個不同的進程可以包含相同的程序:一個程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進程,能得到不同的結(jié)果;但是執(zhí)行過程中,程序不能發(fā)生改變。
內(nèi)容
一個計算機系統(tǒng)進程包括(或者說“擁有”)下列數(shù)據(jù):
那個程序的可運行機器碼的一個在存儲器的映像。 分配到的存儲器(通常包括虛擬內(nèi)存的一個區(qū)域)。存儲器的內(nèi)容包括可運行代碼、特定于進程的數(shù)據(jù)(輸入、輸出)、調(diào)用堆棧、堆棧(用于保存運行時運數(shù)中途產(chǎn)生的數(shù)據(jù))。 分配給該進程的資源的操作系統(tǒng)描述符,諸如文件描述符(Unix 術(shù)語)或文件句柄(Windows)、數(shù)據(jù)源和數(shù)據(jù)終端。 安全特性,諸如進程擁有者和進程的權(quán)限集(可以容許的操作)。 處理器狀態(tài)(內(nèi)文),諸如寄存器內(nèi)容、物理存儲器尋址等。當進程正在運行時,狀態(tài)通常儲存在寄存器,其他情況在存儲器。
切換
Windows 和Windows Vista 體系結(jié)構(gòu)
進行進程切換就是從正在運行的進程中收回處理器,然后再使待運行進程來占用處理器。
這里所說的從某個進程收回處理器,實質(zhì)上就是把進程存放在處理器的寄存器中的中間數(shù)據(jù)找個地方存起來,從而把處理器的寄存器騰出來讓其他進程使用。那么被中止運行進程的中間數(shù)據(jù)存在何處好呢?當然這個地方應該是進程的私有堆棧。
讓進程來占用處理器,實質(zhì)上是把某個進程存放在私有堆棧中寄存器的數(shù)據(jù)(前一次本進程被中止時的中間數(shù)據(jù))再恢復到處理器的寄存器中去,并把待運行進程的斷點送入處理器的程序指針PC,于是待運行進程就開始被處理器運行了,也就是這個進程已經(jīng)占有處理器的使用權(quán)了。
這就像多個同學要分時使用同一張課桌一樣,所謂要收回正在使用課桌同學的課桌使用權(quán),實質(zhì)上就是讓他把屬于他的東西拿走;而賦予某個同學課桌使用權(quán),只不過就是讓他把他的東西放到課桌上罷了。
在切換時,一個進程存儲在處理器各寄存器中的中間數(shù)據(jù)叫做進程的上下文,所以進程的 切換實質(zhì)上就是被中止運行進程與待運行進程上下文的切換。在進程未占用處理器時,進程 的上下文是存儲在進程的私有堆棧中的。
狀態(tài)
進程的三個基本狀態(tài)
進程執(zhí)行時的間斷性,決定了進程可能具有多種狀態(tài)。事實上,運行中的進程可能具有以下三種基本狀態(tài)。
1)就緒狀態(tài)(Ready):
進程已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執(zhí)行。就緒進程可以按多個優(yōu)先級來劃分隊列。例如,當一個進程由于時間片用完而進入就緒狀態(tài)時,排入低優(yōu)先級隊列;當進程由I/O操作完成而進入就緒狀態(tài)時,排入高優(yōu)先級隊列。
2)運行狀態(tài)(Running):
進程占用處理器資源;處于此狀態(tài)的進程的數(shù)目小于等于處理器的數(shù)目。在沒有其他進程可以執(zhí)行時(如所有進程都在阻塞狀態(tài)),通常會自動執(zhí)行系統(tǒng)的空閑進程。
3)阻塞狀態(tài)(Blocked):
由于進程等待某種條件(如I/O操作或進程同步),在條件滿足之前無法繼續(xù)執(zhí)行。該事件發(fā)生前即使把處理機分配給該進程,也無法運行。
區(qū)別
程序
程序是指令和數(shù)據(jù)的有序集合,其本身沒有任何運行的含義,是一個靜態(tài)的概念。而進程是程序在處理機上的一次執(zhí)行過程,它是一個動態(tài)的概念。
程序可以作為一種軟件資料長期存在,而進程是有一定生命期的。程序是永久的,進程是暫時的。
進程更能真實地描述并發(fā),而程序不能;
進程是由進程控制塊、程序段、數(shù)據(jù)段三部分組成;
進程具有創(chuàng)建其他進程的功能,而程序沒有。
同一程序同時運行于若干個數(shù)據(jù)集合上,它將屬于若干個不同的進程,也就是說同一程序可以對應多個進程。
在傳統(tǒng)的操作系統(tǒng)中,程序并不能獨立運行,作為資源分配和獨立運行的基本單元都是進程。
線程
進程和線程關(guān)系
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源,在引入線程的操作系統(tǒng)中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調(diào)度的基本單位,由于線程比進程更小,基本上不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會小得多,能更高效的提高系統(tǒng)內(nèi)多個程序間并發(fā)執(zhí)行的程度。
上一年推出的通用操作系統(tǒng)都引入了線程,以便進一步提高系統(tǒng)的并發(fā)性,并把它視為現(xiàn)代操作系統(tǒng)的一個重要指標。
控制
進程控制是進程管理中最基本的功能。它用于創(chuàng)建一個新進程,終止一個已完成的進程,或者去終止一個因出現(xiàn)某事件而使其無法運行下去的進程,還可負責進程運行中的狀態(tài)轉(zhuǎn)換。
創(chuàng)建進程
1.引起創(chuàng)建進程的事件
在多道程序環(huán)境中,只有(作為)進程(時)才能在系統(tǒng)中運行。因此,為使程序能運行,就必須為它創(chuàng)建進程。導致一個進程去創(chuàng)建另一個進程的典型事件,可以有以下四類:
1) 用戶登錄
在分時系統(tǒng)中,用戶在終端鍵入登錄命令后,如果是合法用戶,系統(tǒng)將為該終端建立一個進程,并把它插入到就緒隊列中。
2)作業(yè)調(diào)度
在批處理系統(tǒng)中,當作業(yè)調(diào)度程序按照一定的算法調(diào)度到某作業(yè)時,便將該作業(yè)裝入到內(nèi)存,為它分配必要的資源,并立即為它創(chuàng)建進程,再插入到就緒隊列中。
3) 提供服務
當運行中的用戶程序提出某種請求后,系統(tǒng)將專門創(chuàng)建一個進程來提供用戶所需要的服務,例如,用戶程序要求進行文件打印,操作系統(tǒng)將為它創(chuàng)建一個打印進程,這樣,不僅可以使打印進程與該用戶進程并發(fā)執(zhí)行,而且還便于計算出為完成打印任務所花費的時間。
4) 應用請求
在上述三種情況中,都是由系統(tǒng)內(nèi)核為它創(chuàng)建一個新進程,而這一類事件則是基于應用進程的需求,由它創(chuàng)建一個新的進程,以便使新進程以并發(fā)的運行方式完成特定任務。
2.進程的創(chuàng)建過程
一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建新進程的事件后,便調(diào)用進程創(chuàng)建原語Creat()按下述步驟創(chuàng)建一個新進程。
1) 申請空白PCB。為新進程申請獲得唯一的數(shù)字標識符,并從PCB集合中索取一個空白PCB。
2) 為新進程分配資源。為新進程的程序和數(shù)據(jù)以及用戶棧分配必要的內(nèi)存空間。顯然,此時操作系統(tǒng)必須知道新進程所需要的內(nèi)存大小。
3) 初始化進程控制塊。PCB的初始化包括:
?、俪跏蓟瘶俗R信息,將系統(tǒng)分配的標識符和父進程標識符,填入新的PCB中。
?、诔跏蓟幚頇C狀態(tài)信息,使程序計數(shù)器指向程序的入口地址,使棧指針指向棧頂。
?、鄢跏蓟幚頇C控制信息,將進程的狀態(tài)設(shè)置為就緒狀態(tài)或靜止就緒狀態(tài),對于優(yōu)先級,通常是將它設(shè)置為最低優(yōu)先級,除非用戶以顯式的方式提出高優(yōu)先級要求。
4) 將新進程插入就緒隊列,如果進程就緒隊列能夠接納新進程,便將新進程插入到就緒隊列中。
進程終止
1.引起進程終止的事件
1)正常結(jié)束
在任何計算機系統(tǒng)中,都應該有一個表示進程已經(jīng)運行完成的指示。例如,在批處理系統(tǒng)中,通常在程序的最后安排一條Hold指令或終止的系統(tǒng)調(diào)用。當程序運行到Hold指令時,將產(chǎn)生一個中斷,去通知OS本進程已經(jīng)完成。
2)異常結(jié)束
在進程運行期間,由于出現(xiàn)某些錯誤和故障而迫使進程終止。這類異常事件很多,常見的有:越界錯誤,保護錯,非法指令,特權(quán)指令錯,運行超時,等待超時,算術(shù)運算錯,I/O故障。
3)外界干預
外界干預并非指在本進程運行中出現(xiàn)了異常事件,而是指進程應外界的請求而終止運行。這些干預有:操作員或操作系統(tǒng)干預,父進程請求,父進程終止。
2. 進程的終止過程
如果系統(tǒng)發(fā)生了上述要求終止進程的某事件后,OS便調(diào)用進程終止原語,按下述過程去終止指定的進程。
1)根據(jù)被終止進程的標識符,從PCB集合中檢索出該進程的PCB,從中讀出該進程狀態(tài)。
2)若被終止進程正處于執(zhí)行狀態(tài),應立即終止該進程的執(zhí)行,并置調(diào)度標志為真。用于指示該進程被終止后應重新進行調(diào)度。
3)若該進程還有子孫進程,還應將其所有子孫進程予以終止,以防他們成為不可控的進程。
4)將被終止的進程所擁有的全部資源,或者歸還給其父進程,或者歸還給系統(tǒng)。
5)將被終止進程(它的PCB)從所在隊列(或鏈表)中移出,等待其它程序來搜集信息。
阻塞喚醒
1.引起進程阻塞和喚醒的事件
1)請求系統(tǒng)服務
當正在執(zhí)行的進程請求操作系統(tǒng)提供服務時,由于某種原因,操作系統(tǒng)并不立即滿足該進程的要求時,該進程只能轉(zhuǎn)變?yōu)樽枞麪顟B(tài)來等待,一旦要求得到滿足后,進程被喚醒。
2)啟動某種操作
當進程啟動某種操作后,如果該進程必須在該操作完成之后才能繼續(xù)執(zhí)行,則必須先使該進程阻塞,以等待該操作完成,該操作完成后,將該進程喚醒。
3)新數(shù)據(jù)尚未到達
對于相互合作的進程,如果其中一個進程需要先獲得另一(合作)進程提供的數(shù)據(jù)才能運行以對數(shù)據(jù)進行處理,則是要其所需數(shù)據(jù)尚未到達,該進程只有(等待)阻塞,等到數(shù)據(jù)到達后,該進程被喚醒。
4)無新工作可做
系統(tǒng)往往設(shè)置一些具有某特定功能的系統(tǒng)進程,每當這種進程完成任務后,便把自己阻塞起來以等待新任務到來,新任務到達后,該進程被喚醒。
2.進程阻塞過程
正在執(zhí)行的進程,當發(fā)現(xiàn)上述某事件后,由于無法繼續(xù)執(zhí)行,于是進程便通過調(diào)用阻塞原語block把自己阻塞??梢姡M程的阻塞是進程自身的一種主動行為。進入block過程后,由于此時該進程還處于執(zhí)行狀態(tài),所以應先立即停止執(zhí)行,把進程控制塊中的現(xiàn)行狀態(tài)由執(zhí)行改為阻塞,并將PCB插入阻塞隊列。如果系統(tǒng)中設(shè)置了因不同事件而阻塞的多個阻塞隊列,則應將本進程插入到具有相同事件的阻塞(等待)隊列。最后,轉(zhuǎn)調(diào)度程序進行重新調(diào)度,將處理機分配給另一就緒進程,并進行切換,亦即,保留被阻塞進程的處理機狀態(tài)(在PCB中),再按新進程的PCB中的處理機狀態(tài)設(shè)置CPU環(huán)境。
3. 進程喚醒過程
當被阻塞的進程所期待的事件出現(xiàn)時,如I/O完成或者其所期待的數(shù)據(jù)已經(jīng)到達,則由有關(guān)進程(比如,用完并釋放了該I/O設(shè)備的進程)調(diào)用喚醒原語wakeup(),將等待該事件的進程喚醒。喚醒原語執(zhí)行的過程是:首先把被阻塞的進程從等待該事件的阻塞隊列中移出,將其PCB中的現(xiàn)行狀態(tài)由阻塞改為就緒,然后再將該PCB插入到就緒隊列中。
調(diào)度算法
進程的調(diào)度算法包括:
FIFO(First Input First Output 先進先出法)、
RR(時間片輪轉(zhuǎn)算法)、
?。℉PF)最高優(yōu)先級算法。
階段
進程是由進程控制塊、程序段、數(shù)據(jù)段三部分組成。一個進程可以包含若干線程(Thread),線程可以幫助應用程序同時做幾件事(比如一個線程向磁盤寫入文件,另一個則接收用戶的按鍵操作并及時做出反應,互相不干擾),在程序被運行后,系統(tǒng)首先要做的就是為該程序進程建立一個默認線程,然后程序可以根據(jù)需要自行添加或刪除相關(guān)的線程。是可并發(fā)執(zhí)行的程序。在一個數(shù)據(jù)集合上的運行過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位,也是稱活動、路徑或任務,它有兩方面性質(zhì):活動性、并發(fā)性。進程可以劃分為運行、阻塞、就緒三種狀態(tài),并隨一定條件而相互轉(zhuǎn)化:就緒--運行,運行--阻塞,阻塞--就緒。
進程為應用程序的運行實例,是應用程序的一次動態(tài)執(zhí)行??此聘呱?,我們可以簡單地理解為:它是操作系統(tǒng)當前運行的執(zhí)行程序。在系統(tǒng)當前運行的執(zhí)行程序里包括:系統(tǒng)管理計算機個體和完成各種操作所必需的程序;用戶開啟、執(zhí)行的額外程序,當然也包括用戶不知道,而自動運行的非法程序(它們就有可能是病毒程序)。
內(nèi)容來自百科網(wǎng)