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