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