進(jìn)程與線程的概念經(jīng)常遇到誓篱,雖然腦海里是知道怎么回事,編程開發(fā)也能寫出多進(jìn)程凯楔、多線程的程序窜骄,但是對(duì)于理論上的描述一直不是很明確,今日閑暇摆屯,找到了以前的書籍邻遏,好好的看了一遍,記錄下進(jìn)程鸥拧、線程簡單的理論概念党远。
操作系統(tǒng)的教材里面進(jìn)程一章的內(nèi)容還是很多的,描述的相當(dāng)詳細(xì)富弦,但是對(duì)于開發(fā)者而言沟娱,知道其核心的概念即可解答常見的進(jìn)程相關(guān)的問題,如果需要深究的腕柜,再去翻閱文獻(xiàn)也是可以的济似。
1矫废、進(jìn)程的定義
進(jìn)程的實(shí)體是由:程序段、相關(guān)的數(shù)據(jù)段和PCB
三部分構(gòu)成的砰蠢。其中蓖扑,進(jìn)程實(shí)體其實(shí)就是我們常說的進(jìn)程,因此台舱,創(chuàng)建進(jìn)程律杠,其實(shí)就是創(chuàng)建進(jìn)程實(shí)體中的PCB,撤消進(jìn)程也就是撤消進(jìn)程的PCB竞惋。
歸結(jié)一下常見的進(jìn)程的定義:
(1)進(jìn)程是程序的一次執(zhí)行
(2)進(jìn)程是具有獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過程柜去,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單元。
(3)進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng)拆宛。
這里順便介紹一下進(jìn)程和程序的區(qū)別:
(1)程序是永存的嗓奢;進(jìn)程是暫時(shí)的,是程序在數(shù)據(jù)集上的一次執(zhí)行浑厚,有創(chuàng)建有撤銷股耽,存在是暫時(shí)的;
(2)程序是靜態(tài)的觀念钳幅,進(jìn)程是動(dòng)態(tài)的觀念物蝙;
(3)進(jìn)程具有并發(fā)性,而程序沒有贡这;
(4)進(jìn)程是競爭計(jì)算機(jī)資源的基本單位茬末,程序不是。
(5)進(jìn)程和程序不是一一對(duì)應(yīng)的: 一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程即多個(gè)進(jìn)程可執(zhí)行同一程序盖矫; 一個(gè)進(jìn)程可以執(zhí)行一個(gè)或幾個(gè)程序
進(jìn)程和程序是兩個(gè)截然不同的概念,除了進(jìn)程具有程序所沒有的PCB結(jié)構(gòu)外击奶,還具有一下特征:
(1)動(dòng)態(tài)性
(2)并發(fā)性
(3)獨(dú)立性
(4)異步性
2辈双、進(jìn)程的狀態(tài)
進(jìn)程一般具備三種狀態(tài):
(1)就緒態(tài)。即進(jìn)程處于準(zhǔn)備好運(yùn)行的狀態(tài)柜砾,進(jìn)程已分配到除CPU以外的所有資源
(2)執(zhí)行態(tài)湃望,進(jìn)程已獲得CPU,其程序正在執(zhí)行的狀態(tài)
(3)阻塞態(tài)痰驱,正在執(zhí)行的進(jìn)程由于發(fā)生某事件(如IO請(qǐng)求等)暫時(shí)無法繼續(xù)執(zhí)行時(shí)的狀態(tài)
狀態(tài)轉(zhuǎn)換圖:
圖中的創(chuàng)建狀態(tài)和退出是進(jìn)程的開始和終止這里不再解釋证芭。
3、進(jìn)程的PCB
OS為每個(gè)進(jìn)程專門定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)--進(jìn)程控制塊(Process Control Block)PCB担映,用于描述進(jìn)程的當(dāng)前情況以及管理進(jìn)程運(yùn)行的全部信息废士,是OS最重要的記錄型數(shù)據(jù)結(jié)構(gòu),線程與之相對(duì)的是TCB(下文介紹)蝇完。
PCB的作用:
(1)作為獨(dú)立運(yùn)行基本單位的標(biāo)志官硝。當(dāng)一個(gè)程序(含數(shù)據(jù))配置了PCB后矗蕊,就表示它是一個(gè)能在多道程序環(huán)境下獨(dú)立運(yùn)行的、合法的基本單位氢架。當(dāng)系統(tǒng)創(chuàng)建一個(gè)進(jìn)程時(shí)傻咖,就為它創(chuàng)建了一個(gè)PCB,進(jìn)程結(jié)束時(shí)又回收其PCB岖研,進(jìn)程于是也隨之消滅卿操,即系統(tǒng)是通過PCB感知進(jìn)程的存在的。
(2)能實(shí)現(xiàn)間斷性運(yùn)行方式孙援。當(dāng)進(jìn)程因阻塞而暫停運(yùn)行時(shí)害淤,可以將CPU現(xiàn)場信息等保存在PCB中,供該進(jìn)程再次被調(diào)度時(shí)恢復(fù)現(xiàn)場使用赃磨。
(3)提供進(jìn)程管理所需要的信息筝家。
(4)提供進(jìn)程調(diào)度所需要的信息。
(5)實(shí)現(xiàn)與其他進(jìn)程的同步與通信
4邻辉、線程的定義
線程溪王,有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process,LWP)值骇,是程序執(zhí)行流的最小單元莹菱。
一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令[指針]吱瘩,[寄存器]集合和[堆棧]組成道伟。
另外,線程是進(jìn)程中的一個(gè)實(shí)體使碾,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位蜜徽,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源票摇,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源拘鞋。
和進(jìn)程一樣,線程同樣有三種狀態(tài):執(zhí)行狀態(tài)矢门、就緒狀態(tài)盆色、阻塞狀態(tài),線程之間的轉(zhuǎn)換與進(jìn)程一樣的祟剔,這里不再贅述隔躲。
系統(tǒng)同樣為線程分配了一個(gè)線程控制塊TCB,將所有用于控制和管理線程的信息記錄在線程控制塊中物延,TCB通常包括:
(1)線程標(biāo)示符 (2)一組寄存器 (3)線程運(yùn)行狀態(tài) (4)優(yōu)先級(jí) (5)線程專有存儲(chǔ)區(qū) (6)信號(hào)屏蔽
5宣旱、線程與進(jìn)程的區(qū)別
進(jìn)程是資源分配的基本單位。所有與該進(jìn)程有關(guān)的資源教届,都被記錄在進(jìn)程控制塊PCB中响鹃,以表示該進(jìn)程擁有這些資源或正在使用它們驾霜。
另外,進(jìn)程也是搶占處理機(jī)的調(diào)度單位买置,它擁有一個(gè)完整的虛擬地址空間粪糙。當(dāng)進(jìn)程發(fā)生調(diào)度時(shí),不同的進(jìn)程擁有不同的虛擬地址空間忿项,而同一進(jìn)程內(nèi)的不同線程共享同一地址空間蓉冈。
與進(jìn)程相對(duì)應(yīng),線程與資源分配無關(guān)轩触,
它屬于某一個(gè)進(jìn)程寞酿,
并與進(jìn)程內(nèi)的其他線程一起共享進(jìn)程的資源。
線程只由相關(guān)堆棧(系統(tǒng)椡阎或用戶棧)寄存器和線程控制表TCB組成伐弹。寄存器可被用來存儲(chǔ)線程內(nèi)的局部變量,但不能存儲(chǔ)其他線程的相關(guān)變量榨为。
通常在一個(gè)進(jìn)程中可以包含若干個(gè)線程惨好,它們可以利用進(jì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í)行的程度散罕,從而顯著提高系統(tǒng)資源的利用率和吞吐量分歇。
因而近年來推出的通用操作系統(tǒng)都引入了線程,以便進(jìn)一步提高系統(tǒng)的并發(fā)性欧漱,并把它視為現(xiàn)代操作系統(tǒng)的一個(gè)重要指標(biāo)卿樱。
線程與進(jìn)程的區(qū)別可以歸納為以下4點(diǎn):
1)地址空間和其它資源(如打開文件):進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享硫椰。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見。
2)通信:進(jìn)程間通信萨蚕,IPC靶草,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性岳遥。
3)調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多奕翔。
4)在多線程OS中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體浩蓉。
關(guān)于線程和進(jìn)程的概念簡單介紹到這里派继,有個(gè)基本的認(rèn)識(shí)即可宾袜。
歡迎大家評(píng)論一起交流。