一、進(jìn)程的定義 進(jìn)程:指在系統(tǒng)中能獨(dú)立運(yùn)行并作為資源分配的基本單位,它是由一組機(jī)器指令、數(shù)據(jù)和堆棧等組成的,是一個(gè)能獨(dú)立運(yùn)行的活動(dòng)實(shí)體。 進(jìn)程一般有三個(gè)狀態(tài):就緒狀態(tài)、執(zhí)行狀態(tài)和等待狀態(tài)【或稱阻塞狀態(tài)】;進(jìn)程只能由父進(jìn)程建立,系統(tǒng)中所有的進(jìn)程形成一種進(jìn)程樹的層次體系;掛起命令可由進(jìn)程自己和其他進(jìn)程發(fā)出,但是解除掛起命令只能由其他進(jìn)程發(fā)出。 進(jìn)程控制塊(PCB):PCB不但可以記錄進(jìn)程的屬性信息,以便操作系統(tǒng)對(duì)進(jìn)程進(jìn)行控制和管理,而且PCB標(biāo)志著進(jìn)程的存在,操作系統(tǒng)根據(jù)系統(tǒng)中是否有該進(jìn)程的進(jìn)程控制塊PCB而知道該進(jìn)程存在與否。系統(tǒng)建立進(jìn)程的同時(shí)就建立該進(jìn)程的PCB,在撤銷一個(gè)進(jìn)程時(shí),也就撤銷其PCB,故進(jìn)程的PCB對(duì)進(jìn)程來說是它存在的具體的物理標(biāo)志和體現(xiàn)。一般PCB包括以下三類信息:進(jìn)程標(biāo)識(shí)信息;處理器狀態(tài)信息;進(jìn)程控制信息。 由程序段、相關(guān)的數(shù)據(jù)段和PCB三部分構(gòu)成了進(jìn)程實(shí)體(又稱進(jìn)程印像),一般,我們把進(jìn)程實(shí)體就簡(jiǎn)稱為進(jìn)程。 1.動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序的一次執(zhí)行過程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的。 二、線程的定義 線程:線程是進(jìn)程中的一個(gè)實(shí)體,作為系統(tǒng)調(diào)度和分派的基本單位。 線程的性質(zhì): 1.線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的可執(zhí)行的單元。若把進(jìn)程稱為任務(wù)的話,那么線程則是應(yīng)用中的一個(gè)子任務(wù)的執(zhí)行。 前臺(tái)和后臺(tái)工作情況; 異步處理工作情況; 需要加快執(zhí)行速度情況; 組織復(fù)雜工作的情況; 同時(shí)有多個(gè)用戶服務(wù)請(qǐng)求的情況等。 多線程運(yùn)行在同一個(gè)進(jìn)程的相同的地址空間內(nèi),和采用多進(jìn)程相比有以下優(yōu)點(diǎn): 1.創(chuàng)建和撤銷線程的開銷較之進(jìn)程要少。創(chuàng)建線程時(shí)只需要建立線程控制表相應(yīng)的表目,或有關(guān)隊(duì)列,而創(chuàng)建進(jìn)程時(shí),要?jiǎng)?chuàng)建PCB表和初始化,進(jìn)入有關(guān)進(jìn)程隊(duì)列,建立它的地址空間和所需資源等。 三、進(jìn)程與線程之間的關(guān)系 從一定意義上講,進(jìn)程就是一個(gè)應(yīng)用程序在處理機(jī)上的一次執(zhí)行過程,它是一個(gè)動(dòng)態(tài)的概念,而線程是進(jìn)程中的一部分,進(jìn)程包含多個(gè)線程在運(yùn)行。 在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對(duì)它的調(diào)度所付出的開銷就會(huì)小得多,能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度。 舉例說明: 進(jìn)程:北京地鐵單位 線程:北京地鐵1號(hào)線、2號(hào)線、5號(hào)線........15號(hào)線 北京地鐵單位的所有地鐵線路共享著北京坐地鐵的所有客源(相當(dāng)于進(jìn)程中的資源,所以進(jìn)程屬于資源單位),而各線路負(fù)責(zé)將客源輸送到指定地點(diǎn)(執(zhí)行操作,所以線程屬于執(zhí)行單位)。 四、進(jìn)程與線程之間的區(qū)別 1、調(diào)度: 在傳統(tǒng)的操作系統(tǒng)中,CPU調(diào)度和分派的基本單位是進(jìn)程。而在引入線程的操作系統(tǒng)中,則把線程作為CPU調(diào)度和分派的基本單位,進(jìn)程則作為資源擁有的基本單位,從而使傳統(tǒng)進(jìn)程的兩個(gè)屬性分開,線程編程輕裝運(yùn)行,這樣可以顯著地提高系統(tǒng)的并發(fā)性。同一進(jìn)程中線程的切換不會(huì)引起進(jìn)程切換,從而避免了昂貴的系統(tǒng)調(diào)用,但是在由一個(gè)進(jìn)程中的線程切換到另一進(jìn)程中的線程,依然會(huì)引起進(jìn)程切換。 5、系統(tǒng)開銷: 由于在創(chuàng)建或撤銷進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等。因此,操作系統(tǒng)為此所付出的開銷將顯著地大于在創(chuàng)建或撤消線程時(shí)的開銷。在進(jìn)程切換時(shí),涉及到整個(gè)當(dāng)前進(jìn)程CPU環(huán)境的保存環(huán)境的設(shè)置以及新被調(diào)度運(yùn)行的CPU環(huán)境的設(shè)置,而線程切換只需保存和設(shè)置少量的寄存器的內(nèi)容,并不涉及存儲(chǔ)器管理方面的操作,可見,進(jìn)程切換的開銷也遠(yuǎn)大于線程切換的開銷。此外,由于同一進(jìn)程中的多個(gè)線程具有相同的地址空間,致使他們之間的同步和通信的實(shí)現(xiàn)也變得比較容易。在有的系統(tǒng)中,現(xiàn)成的切換、同步、和通信都無需操作系統(tǒng)內(nèi)核的干預(yù)。 6、支持多處理機(jī)系統(tǒng): 在多處理機(jī)系統(tǒng)中,對(duì)于傳統(tǒng)的進(jìn)程,即單線程進(jìn)程,不管有多少處理機(jī),該進(jìn)程只能運(yùn)行在一個(gè)處理機(jī)上。但對(duì)于多線程進(jìn)程,就可以將一個(gè)進(jìn)程中的多個(gè)線程分配到多個(gè)處理機(jī)上,使它們并行執(zhí)行,這無疑將加速進(jìn)程的完成。因此,現(xiàn)代處理機(jī)OS都無一例外地引入了多線程。 |
|