以下內(nèi)容整理自互聯(lián)網(wǎng)返咱,僅用于個人學習
1. 進程
1.1 進程的定義
- 進程是程序運行的一次執(zhí)行過程逢净。
- 進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行所發(fā)生的活動隘截。
- 進程是具有獨立功能的程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位汹胃。
為了使參與并發(fā)執(zhí)行的程序(含數(shù)據(jù))能獨立的運行,必須為之配置一個專門的數(shù)據(jù)結構东臀,稱為進程控制塊(Process Control Block着饥,PCB)。系統(tǒng)利用PCB來描述進程的基本情況和運行狀態(tài)惰赋,進而控制和管理進程宰掉。相應地呵哨,由程序段、相關數(shù)據(jù)段和PCB三部分過程了進程映像(進程實體)轨奄。所謂創(chuàng)建進程孟害,實質(zhì)上是創(chuàng)建進程映像中的PCB;而撤銷進程實質(zhì)上是撤銷進程的PCB挪拟。值得注意的是挨务,進程映像是靜態(tài)的,進程則是動態(tài)的玉组。
PCB是進程存在的唯一標識谎柄!
引入進程實體的概念后,我們可以把傳統(tǒng)操作系統(tǒng)中的進程定義為:
進程是進程實體的運行過程惯雳,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位朝巫。
1.2 進程狀態(tài)轉(zhuǎn)換
- 運行狀態(tài):進程正在處理機上運行。但處理機環(huán)境下石景,每一時刻最多只有一個進程處于運行狀態(tài)劈猿。
- 就緒狀態(tài):進程已處于準備運行狀態(tài),即進程獲得了除了處理機之外的一切所需資源潮孽,一旦得到處理機即可運行揪荣。
- 阻塞狀態(tài):又稱為等待狀態(tài)。進程正在等待某一事件而暫停運行恩商,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成变逃。即使處理器空閑,該進程也不能運行怠堪。
- 創(chuàng)建狀態(tài):進程正在被創(chuàng)建揽乱,尚未轉(zhuǎn)入到就緒狀態(tài)。進程創(chuàng)建需要多個步驟:首先申請一個空白的PCB粟矿,并向PCB中填寫一些控制和管理進程的信息凰棉;然后由系統(tǒng)為該進程分配運行時所必需的資源;最后把該進程轉(zhuǎn)入就緒狀態(tài)陌粹。
- 結束狀態(tài):進程正從系統(tǒng)中消失撒犀,這可能是進程正常結束或其他原因中斷退出運行。當進程需要結束運行時掏秩,系統(tǒng)首先必須置該進程為結束狀態(tài)或舞,然后進一步處理資源釋放和回收等工作。
- 就緒→運行:處于就緒狀態(tài)的進程被調(diào)度后蒙幻,獲得處理機資源(分派處理機時間片)映凳,于是進程由就緒狀態(tài)轉(zhuǎn)運行狀態(tài)。
- 運行→就緒:處于運行狀態(tài)的進程在時間片用完后邮破,不得不讓出處理機诈豌,從而進程由運行狀態(tài)轉(zhuǎn)換為就緒仆救。此外,在可剝奪的操作系統(tǒng)中矫渔,當有更高級的進程就緒時彤蔽,調(diào)度程度將正執(zhí)行的進程轉(zhuǎn)換為就緒狀態(tài),讓更高優(yōu)先級的進程執(zhí)行庙洼。
- 運行→阻塞:當進程請求某一資源(如外設)的使用和分配或等待某一事件的發(fā)生(如I/O操作的完成)時顿痪,它就從運行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài)。進程以系統(tǒng)調(diào)用的形式請求操作系統(tǒng)提供服務送膳,這是一種特殊员魏、由用戶態(tài)程序調(diào)用操作系統(tǒng)內(nèi)核過程的形式。
- 阻塞→就緒:當進程等待的時間到來時叠聋,如I/O操作結束或中斷結束時撕阎,終端處理程序必須把相應的進程狀態(tài)由阻塞狀態(tài)轉(zhuǎn)為就緒狀態(tài)。
2. 線程
引入進程的目的碌补,是為了使多道程序并發(fā)執(zhí)行虏束,以提高資源利用率和系統(tǒng)吞吐量;而引入線程厦章,則是為了減少程序在并發(fā)執(zhí)行時所付出的時空開銷镇匀,提高操作系統(tǒng)的并發(fā)性能。
線程就是"輕量級進程"袜啃,它是一個基本的CPU執(zhí)行單元汗侵,也是程序執(zhí)行流的最小單元,由線程ID群发、程序計數(shù)器晰韵、寄存器集合和堆棧組成。線程自己不擁有系統(tǒng)資源熟妓,只擁有在運行中必不可少的資源雪猪,但與其他線程共享進程所擁有的全部資源。
線程也有 就緒起愈、阻塞只恨、運行 三種基本狀態(tài)。
引入線程后抬虽,進程的內(nèi)涵發(fā)送了改變:進程只作為除CPU以外系統(tǒng)資源
的分配單元官觅,線程則作為處理機分配單元。
3. 進程與線程比較
3.1 調(diào)度
在傳統(tǒng)操作系統(tǒng)中阐污,用于資源和獨立調(diào)度的基本單位都是進程缰猴。在引入線程的操作系統(tǒng)中,線程是獨立調(diào)度的基本單位疤剑,進程是資源擁有的基本單位滑绒。統(tǒng)一進程中,線程的切換不會引起進程切換隘膘。在不同進程中的線程切換疑故,如從一個進程內(nèi)的線程切換到另一個進程的線程時,會引起進程切換弯菊。
3.2 資源
不論是傳統(tǒng)操作系統(tǒng)還是設有線程的操作系統(tǒng)纵势,進程都是擁有資源的基本單位,而線程不擁有系統(tǒng)資源(也有一點必不可少的資源)管钳,但線程可以訪問其隸屬進程的系統(tǒng)資源钦铁。
3.3 并發(fā)性
在引入線程的操作系統(tǒng)中,不僅進程之間可以并發(fā)執(zhí)行才漆,而且多個線程之間也可以并發(fā)執(zhí)行牛曹,從而使操作系統(tǒng)具有更好的并發(fā)性,提高系統(tǒng)的吞吐量醇滥。
3.4 系統(tǒng)開銷
由于創(chuàng)建或撤銷進程時黎比,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間鸳玩、I/O設備等阅虫,因此操作系統(tǒng)所付出的開銷遠大于創(chuàng)建或撤銷線程時的開銷。
類似的不跟,在進行進程切換時颓帝,涉及當前執(zhí)行進程CPU環(huán)境的保存以及新調(diào)度到進程CPU環(huán)境的設置,而線程切換只需保存和設置少量寄存器內(nèi)容窝革,開銷很小购城。
此外,由于同一個進程內(nèi)的多個線程共享進程的地址空間聊闯,因此工猜,這些線程之間的同步與通信非常容易實現(xiàn),甚至無需操作系統(tǒng)的干預菱蔬。
3.5 地址空間和其他資源(如打開文件)
進程的地址空間之間相互獨立篷帅,同一進程的各線程間共享進程的資源,某進程內(nèi)的線程對于其他進程不可見拴泌。
3.6 通信
進程間通信(IPC)需要進程同步和互斥手段輔助魏身,以保證數(shù)據(jù)的一致性,而線程間可以直接讀寫進程數(shù)據(jù)段(如全局變量)來進行通信蚪腐。