|
進(jìn)程概念
進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。例如,用戶運(yùn)行自己的程序,系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程,并為它分配資
源,包括各種表格、內(nèi)存空間、磁盤空間、I/O設(shè)備等。然后,把該進(jìn)程放人進(jìn)程的就緒隊(duì)列。進(jìn)程調(diào)度程序選中它,為它分配CPU
以及其它有關(guān)資源,該進(jìn)程才真正運(yùn)行。所以,進(jìn)程是系統(tǒng)中的并發(fā)執(zhí)行的單位。
在Mac、Windows NT等采用微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)中,進(jìn)程的功能發(fā)生了變化:它只是資源分配的單位,而不再是調(diào)度運(yùn)行的單位
。在微內(nèi)核系統(tǒng)中,真正調(diào)度運(yùn)行的基本單位是線程。因此,實(shí)現(xiàn)并發(fā)功能的單位是線程。
線程概念
線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么
線程表示完成該任務(wù)的許多可能的子任務(wù)之一。例如,假設(shè)用戶啟動(dòng)了一個(gè)窗口中的數(shù)據(jù)庫(kù)應(yīng)用程序,操作系統(tǒng)就將對(duì)數(shù)據(jù)庫(kù)的調(diào)用
表示為一個(gè)進(jìn)程。假設(shè)用戶要從數(shù)據(jù)庫(kù)中產(chǎn)生一份工資單報(bào)表,并傳到一個(gè)文件中,這是一個(gè)子任務(wù);在產(chǎn)生工資單報(bào)表的過(guò)程中,
用戶又可以輸人數(shù)據(jù)庫(kù)查詢請(qǐng)求,這又是一個(gè)子任務(wù)。這樣,操作系統(tǒng)則把每一個(gè)請(qǐng)求――工資單報(bào)表和新輸人的數(shù)據(jù)查詢表示為數(shù)據(jù)
庫(kù)進(jìn)程中的獨(dú)立的線程。線程可以在處理器上獨(dú)立調(diào)度執(zhí)行,這樣,在多處理器環(huán)境下就允許幾個(gè)線程各自在單獨(dú)處理器上進(jìn)行。操
作系統(tǒng)提供線程就是為了方便而有效地實(shí)現(xiàn)這種并發(fā)性
引入線程的好處
(1)易于調(diào)度。
(2)提高并發(fā)性。通過(guò)線程可方便有效地實(shí)現(xiàn)并發(fā)性。進(jìn)程可創(chuàng)建多個(gè)線程來(lái)執(zhí)行同一程序的不同部分。
(3)開銷少。創(chuàng)建線程比創(chuàng)建進(jìn)程要快,所需開銷很少。。
(4)利于充分發(fā)揮多處理器的功能。通過(guò)創(chuàng)建多線程進(jìn)程(即一個(gè)進(jìn)程可具有兩個(gè)或更多個(gè)線程),每個(gè)線程在一個(gè)處理器上運(yùn)行
,從而實(shí)現(xiàn)應(yīng)用程序的并發(fā)性,使每個(gè)處理器都得到充分運(yùn)行。
進(jìn)程和線程的關(guān)系
(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。線程是操作系統(tǒng)可識(shí)別的最小執(zhí)行和調(diào)度單位
。
(2)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。 同一進(jìn)程中的多個(gè)線程共享代碼段(代碼和常量),數(shù)據(jù)段(全局
變量和靜態(tài)變量),擴(kuò)展段(堆存儲(chǔ))。但是每個(gè)線程擁有自己的棧段,棧段又叫運(yùn)行時(shí)段,用來(lái)存放所有局部變量和臨時(shí)變量。
(3)處理機(jī)分給線程,即真正在處理機(jī)上運(yùn)行的是線程。
(4)線程在執(zhí)行過(guò)程中,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。
處理機(jī)管理是操作系統(tǒng)的基本管理功能之一,它所關(guān)心的是處理機(jī)的分配問(wèn)題。也就是說(shuō)把CPU(中央處理機(jī))的使用權(quán)分給某個(gè)程序
,通常把這個(gè)正準(zhǔn)備進(jìn)入內(nèi)存的程序稱為作業(yè),當(dāng)這個(gè)作業(yè)進(jìn)入內(nèi)存后我們把它稱為進(jìn)程。
自從60年代提出進(jìn)程概念,在操作系統(tǒng)中一直都是以進(jìn)程作為能獨(dú)立運(yùn)行的基本單位的。直到80年代中期,人們又提出了比進(jìn)程更小
的能獨(dú)立運(yùn)行的基本單位 ——線程;試圖用它來(lái)提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的速度,從而可進(jìn)一步提高系統(tǒng)的吞吐量。近幾年,線程
概念已得到了廣泛應(yīng)用,不僅在新推出的操作系統(tǒng)中,大多 都已引入了線程概念,而且在新推出的數(shù)據(jù)庫(kù)管理系統(tǒng)和其它應(yīng)用軟件中
,也都紛紛引入了線程,來(lái)改善系統(tǒng)的性能。
如果說(shuō),在操作系統(tǒng)中引入進(jìn)程的目的,是為了使多個(gè)程序并發(fā)執(zhí)行,以改善資源利用率及提高系統(tǒng)的吞吐量;那么,在操作系統(tǒng)中
再引入線程則是為了減少程序并 發(fā)執(zhí)行時(shí)所付出的時(shí)空開銷,使操作系統(tǒng)具有更好的并發(fā)性。為了說(shuō)明這一點(diǎn),我們首先回顧進(jìn)程的
兩個(gè)基本屬性:
(1)進(jìn)程是一個(gè)可擁有資源的獨(dú)立單位;
(2)進(jìn)程同時(shí)又是——個(gè)可以獨(dú)立調(diào)度和分派的基本單位。正是由于進(jìn)程具有這兩個(gè)基本屬性,才使之成為一個(gè)能獨(dú)立運(yùn)行的基本單位
,從而也就構(gòu)成了進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)。
然而為使程序能并發(fā)執(zhí)行,系統(tǒng)還必須進(jìn)行以下的一系列操作:
(1)創(chuàng)建進(jìn)程。系統(tǒng)在創(chuàng)建進(jìn)程時(shí),必須為之分配其所必需的、除處理機(jī)以外的所有資源。如內(nèi)存空間、I/0設(shè)備以及建立相應(yīng)的PCB
。
(2)撤消進(jìn)程。系統(tǒng)在撤消進(jìn)程時(shí),又必須先對(duì)這些資源進(jìn)行回收操作,然后再撤消PCB。
(3)進(jìn)程切換。在對(duì)進(jìn)程進(jìn)行切換時(shí),由于要保留當(dāng)前進(jìn)程的CPU環(huán)境和設(shè)置新選中進(jìn)程的CPU環(huán)境,為此需花費(fèi)不少處理機(jī)時(shí)間。
簡(jiǎn)言之,由于進(jìn)程是一個(gè)資源擁有者,因而在進(jìn)程的創(chuàng)建、撤消和切換中,系統(tǒng)必須為之付出較大的時(shí)空開銷。也正因?yàn)槿绱,在?br />
統(tǒng)中所設(shè)置的進(jìn)程數(shù)目不宜過(guò)多,進(jìn)程切換的頻率也不宜太高,但這也就限制了并發(fā)程度的進(jìn)一步提高。
如何能使多個(gè)程序更好地并發(fā)執(zhí)行,同時(shí)又盡量減少系統(tǒng)的開銷,已成為近年來(lái)設(shè)計(jì)操作系統(tǒng)時(shí)所追求的重要目標(biāo)。于是,有不少操
作系統(tǒng)的學(xué)者們想到,可否將進(jìn) 程的上述屬性分開,由操作系統(tǒng)分開來(lái)進(jìn)行處理。即對(duì)作為調(diào)度和分派的基本單位,不同時(shí)作為獨(dú)立
分配資源的單位,以使之輕裝運(yùn)行;而對(duì)擁有資源的基本單位, 又不頻繁地對(duì)之進(jìn)行切換。正是在這種思想的指導(dǎo)下,產(chǎn)生了線程概
念。
在引入線程的操作系統(tǒng)中,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁
有一點(diǎn)在運(yùn)行中必不可少的資源 (如程序計(jì)數(shù)器、一組寄存器和棧),但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。
一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程;同一進(jìn)程中的多個(gè)線程 之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中也呈
現(xiàn)出間斷性。相應(yīng)地,線程也同樣有就緒、阻塞和執(zhí)行三種基本狀態(tài),有的系統(tǒng)中線程還有終 止?fàn)顟B(tài)。
線程與進(jìn)程的比較
線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故又稱為輕型進(jìn)程(Light—Weight Process)或進(jìn)程元;而把傳統(tǒng)的進(jìn)程稱為重型進(jìn)程(Heavy
—Weight Process),它相當(dāng)于只有一個(gè)線程的任務(wù)。在引入了線程的操作系統(tǒng)中,通常一個(gè)進(jìn)程都有若干個(gè)線程,至少需要一個(gè)線
程。下面,我們從調(diào)度、并發(fā)性、 系統(tǒng)開銷、擁有資源等方面,來(lái)比較線程與進(jìn)程。
1.調(diào)度
在傳統(tǒng)的操作系統(tǒng)中,擁有資源的基本單位和獨(dú)立調(diào)度、分派的基本單位都是進(jìn)程。而在引入線程的操作系統(tǒng)中,則把線程作為調(diào)度
和分派的基本單位。而把進(jìn)程作 為資源擁有的基本單位,使傳統(tǒng)進(jìn)程的兩個(gè)屬性分開,線程便能輕裝運(yùn)行,從而可顯著地提高系統(tǒng)的
并發(fā)程度。在同一進(jìn)程中,線程的切換不會(huì)引起進(jìn)程的切換,在 由一個(gè)進(jìn)程中的線程切換到另一個(gè)進(jìn)程中的線程時(shí),將會(huì)引起進(jìn)程的
切換。
2.并發(fā)性
在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且在一個(gè)進(jìn)程中的多個(gè)線程之間,亦可并發(fā)執(zhí)行,因而使操作系統(tǒng)具有更
好的并發(fā)性,從而能更有效地使 用系統(tǒng)資源和提高系統(tǒng)吞吐量。例如,在一個(gè)未引入線程的單CPU操作系統(tǒng)中,若僅設(shè)置一個(gè)文件服
務(wù)進(jìn)程,當(dāng)它由于某種原因而被阻塞時(shí),便沒(méi)有其它的文件服 務(wù)進(jìn)程來(lái)提供服務(wù)。在引入了線程的操作系統(tǒng)中,可以在一個(gè)文件服務(wù)
進(jìn)程中,設(shè)置多個(gè)服務(wù)線程,當(dāng)?shù)谝粋(gè)線程等待時(shí),文件服務(wù)進(jìn)程中的第二個(gè)線程可以繼續(xù)運(yùn) 行;當(dāng)?shù)诙䝼(gè)線程阻塞時(shí),第三個(gè)線程
可以繼續(xù)執(zhí)行,從而顯著地提高了文件服務(wù)的質(zhì)量以及系統(tǒng)吞吐量。
3.擁有資源
不論是傳統(tǒng)的操作系統(tǒng),還是設(shè)有線程的操作系統(tǒng),進(jìn)程都是擁有資源的一個(gè)獨(dú)立單位,它可以擁有自己的資源。一般地說(shuō),線程自
己不擁有系統(tǒng)資源(也有一點(diǎn)必 不可少的資源),但它可以訪問(wèn)其隸屬進(jìn)程的資源。亦即,一個(gè)進(jìn)程的代碼段、數(shù)據(jù)段以及系統(tǒng)資源,
如已打開的文件、I/O設(shè)備等,可供問(wèn)一進(jìn)程的其它所有線 程共享。
4.系統(tǒng)開銷
由于在創(chuàng)建或撤消進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/o設(shè)備等。因此,操作系統(tǒng)所付出的開銷將顯著地大于在
創(chuàng)建或撤消線程時(shí)的開銷。類 似地,在進(jìn)行進(jìn)程切換時(shí),涉及到整個(gè)當(dāng)前進(jìn)程CPU環(huán)境的保存以及新被調(diào)度運(yùn)行的進(jìn)程的CPU環(huán)境
的設(shè)置。而線程切換只須保存和設(shè)置少量寄存器的內(nèi)容,并 不涉及存儲(chǔ)器管理方面的操作。可見,進(jìn)程切換的開銷也遠(yuǎn)大于線程切換
的開銷。此外,由于同一進(jìn)程中的多個(gè)線程具有相同的地址空間,致使它們之間的同步和通信的實(shí)現(xiàn),也變得比較容易。在有的系統(tǒng)
中,線程的切換、同步和通信都無(wú)須操作系統(tǒng)內(nèi)核的干預(yù) 。
技術(shù)交流可以加黃工QQ2685896890 |
|