操作系統(tǒng)(一)

第二章?進(jìn)程管理

2.1?進(jìn)程概念

2.1.1?程序順序執(zhí)行及其特征

早期的單道程序工作環(huán)境中,內(nèi)存中只有一個(gè)作業(yè)的程序秽荤,機(jī)器執(zhí)行程序的過程就嚴(yán)格按順序方式進(jìn)行,這種程序設(shè)計(jì)方式就叫做順序程序設(shè)計(jì),這種程序活動(dòng)具有三個(gè)主要特點(diǎn):

①:順序性:程序所規(guī)定的每個(gè)動(dòng)作都在上個(gè)動(dòng)作結(jié)束后才開始

②:封閉性:只有程序本身的動(dòng)作才能改變程序的運(yùn)行環(huán)境

③:可再現(xiàn)性:程序的執(zhí)行結(jié)果與程序執(zhí)行的速度無關(guān)


2.1.2?程序并發(fā)執(zhí)行及其特征

1.?程序并發(fā)執(zhí)行概念

多道程序設(shè)計(jì)是指在內(nèi)存中同時(shí)存放多道程序,在管理程序的控制下交替地執(zhí)行兆龙。

多道程序設(shè)計(jì)具有提高系統(tǒng)資源利用率和增加作業(yè)吞吐量的優(yōu)點(diǎn)。(作業(yè)吞吐量是指在給定時(shí)間間隔內(nèi)所完成作業(yè)的數(shù)量)

單道程序設(shè)計(jì):

多道程序設(shè)計(jì):

在這個(gè)例子中访雪,每一時(shí)刻只有一個(gè)作業(yè)的程序在CPU上運(yùn)行详瑞。而從一段時(shí)間來看掂林,作業(yè)A和B都得到運(yùn)行臣缀,這種執(zhí)行方式就稱作程序的并發(fā)執(zhí)行,即在多道程序環(huán)境下泻帮,邏輯上互相獨(dú)立的多個(gè)程序在一段時(shí)間內(nèi)同時(shí)進(jìn)行精置,而在每一時(shí)刻(微觀上)卻僅有一道程序執(zhí)行。單CPU系統(tǒng)中锣杂,程序分時(shí)地交替執(zhí)行脂倦;多CPU系統(tǒng)中,利用每個(gè)CPU來處理一個(gè)可并發(fā)執(zhí)行的程序元莫,實(shí)現(xiàn)并行執(zhí)行赖阻。

2.?程序并發(fā)執(zhí)行的特征

①:失去封閉性:資源的使用狀態(tài)不再僅由某個(gè)程序決定,而是受到并發(fā)程序的共同影響

②:程序與計(jì)算不再一一對(duì)應(yīng):在并發(fā)執(zhí)行過程中踱蠢,一個(gè)共享程序可被多個(gè)用戶作業(yè)調(diào)用火欧,從而形成多個(gè)“計(jì)算”

③:并發(fā)程序在執(zhí)行期間相互制約

2.1.3?進(jìn)程概念的引入和定義

1.進(jìn)程概念定義

進(jìn)程是具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位

程序和進(jìn)程的4個(gè)重要區(qū)別:

①:動(dòng)態(tài)性:程序是靜態(tài)茎截、被動(dòng)的概念苇侵,本身可作為一種軟件資源長(zhǎng)期保存;而進(jìn)程是程序的一次執(zhí)行過程企锌,是動(dòng)態(tài)榆浓、主動(dòng)的概念,有一定的生命期撕攒,會(huì)動(dòng)態(tài)地產(chǎn)生和消亡

②:并發(fā)性:傳統(tǒng)的進(jìn)程是一個(gè)獨(dú)立運(yùn)行的單位陡鹃,能與其他進(jìn)程并發(fā)執(zhí)行烘浦。進(jìn)程是作為資源申請(qǐng)和調(diào)度單位存在的;而通常的程序不能作為一個(gè)獨(dú)立運(yùn)行的單位來并發(fā)執(zhí)行杉适。

③:非對(duì)應(yīng)性

④:異步性:各個(gè)進(jìn)程在并發(fā)執(zhí)行過程中會(huì)產(chǎn)生相互制約關(guān)系谎倔,造成各自前進(jìn)速度的不可預(yù)測(cè)性。而程序本身是靜態(tài)的猿推,不存在這種異步特征

3.?進(jìn)程的特征

①:動(dòng)態(tài)性

②:并發(fā)性:多個(gè)進(jìn)程的實(shí)體能存在于同一內(nèi)存中片习,在一段時(shí)間內(nèi)都能得到運(yùn)行,這樣就使得一個(gè)進(jìn)程的程序與其他進(jìn)程的程序并發(fā)執(zhí)行了

③:調(diào)度性:進(jìn)程是系統(tǒng)中申請(qǐng)資源的單位蹬叭,也是被調(diào)度的單位藕咏。操作系統(tǒng)中有很多調(diào)度程序,它們根據(jù)各自的策略調(diào)度合適的進(jìn)程秽五,為其運(yùn)行提高條件

④:異步性:各個(gè)進(jìn)程向前推進(jìn)的速度是不可預(yù)知的沛厨,即異步方式運(yùn)行

⑤:結(jié)構(gòu)性:進(jìn)程有一定的結(jié)構(gòu),它由程序段辩昆、數(shù)據(jù)段和控制結(jié)構(gòu)(如進(jìn)程控制塊)等組成

2.2?進(jìn)程狀態(tài)描述及組織方式

2.2.1?進(jìn)程的狀態(tài)及其轉(zhuǎn)換

1.?進(jìn)程的狀態(tài)

①:運(yùn)行狀態(tài):指當(dāng)前進(jìn)程已分配到CPU蛋济,它的程序正在處理機(jī)上執(zhí)行時(shí)的狀態(tài)

②:就緒狀態(tài):指當(dāng)前進(jìn)程已具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正占用CPU瓣铣,所以暫時(shí)不能運(yùn)行而等待分配CPU的狀態(tài)

③:阻塞狀態(tài):指進(jìn)程因等待某種事件發(fā)生(如等待輸入答朋,輸出操作完成,等待其他進(jìn)程發(fā)來的信號(hào)等)而暫時(shí)不能運(yùn)行的狀態(tài)棠笑。處于阻塞狀態(tài)的進(jìn)程尚不具備運(yùn)行條件梦碗,即使CPU空閑,它也無法運(yùn)行蓖救。該狀態(tài)或稱為封鎖狀態(tài)或等待狀態(tài)

④:新建狀態(tài):指進(jìn)程剛被創(chuàng)建洪规,尚未放入就緒隊(duì)列時(shí)的狀態(tài)。處于該狀態(tài)的進(jìn)程還是不完全的循捺。當(dāng)創(chuàng)建新進(jìn)程的所有工作(包括分配一個(gè)進(jìn)程控制塊斩例、分配內(nèi)存空間、對(duì)進(jìn)程控制塊初始化等)完成后从橘,操作系統(tǒng)就把該進(jìn)程送入刀就緒隊(duì)列中

⑤:終止?fàn)顟B(tài):指進(jìn)程完成自己的任務(wù)而正常終止時(shí)或在運(yùn)行期間由于出現(xiàn)某些錯(cuò)誤和故障而被迫終止時(shí)所處的狀態(tài)念赶。處于終止?fàn)顟B(tài)的進(jìn)程不能再被調(diào)度運(yùn)行,下一步必然的結(jié)局是被系統(tǒng)撤銷洋满,進(jìn)而從系統(tǒng)中永久消失

⑥:掛起狀態(tài):使處于基本狀態(tài)(就緒晶乔、運(yùn)行、阻塞)的進(jìn)程處于靜止?fàn)顟B(tài)牺勾,此時(shí)系統(tǒng)回收被這些進(jìn)程占用的內(nèi)存資源正罢,將其實(shí)體復(fù)制到外存的進(jìn)程交換區(qū)。掛起不等于撤銷驻民,可通過解掛重新分配內(nèi)存翻具。被掛起的進(jìn)程處于靜止?fàn)顟B(tài)履怯,并且不能直接被處理機(jī)調(diào)度。

添加掛起狀態(tài)的原因:終端用戶的請(qǐng)求裆泳,父進(jìn)程請(qǐng)求叹洲,負(fù)荷調(diào)節(jié)的需要以及操作系統(tǒng)的需要。

2.?進(jìn)程狀態(tài)的轉(zhuǎn)換

①:就緒→運(yùn)行工禾;②:運(yùn)行→阻塞运提;③:阻塞→就緒;

④:運(yùn)行→就緒(正在運(yùn)行的進(jìn)程如用完了本次分配給它的CPU時(shí)間片闻葵,它就得從CPU上退下來民泵,暫停運(yùn)行)

2.2.2?進(jìn)程的組成

1.?進(jìn)程映像

程序和數(shù)據(jù)組成進(jìn)程的實(shí)體,二者皆是靜態(tài)文本槽畔,還需有一個(gè)數(shù)據(jù)結(jié)構(gòu)描述進(jìn)程當(dāng)前的狀態(tài)栈妆、本身的特性、對(duì)資源的占用及調(diào)度信息等厢钧。這種數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊(Process Control Block鳞尔,PCB)。此外早直,程序的執(zhí)行過程必須包含一個(gè)或多個(gè)棧寥假,用來保存過程調(diào)用和相互傳送參數(shù)的蹤跡。進(jìn)程映像通常由程序莽鸿、數(shù)據(jù)集合昧旨、棧和PCB組成拾给。

2.?進(jìn)程控制塊的組成

PCB含有進(jìn)程的描述信息和控制信息祥得,是進(jìn)程動(dòng)態(tài)特性的集中反映,是系統(tǒng)對(duì)進(jìn)程施行識(shí)別和控制的依據(jù)蒋得。PCB組成包含以下內(nèi)容:

①:進(jìn)程名:它是唯一的標(biāo)志對(duì)應(yīng)進(jìn)程的一個(gè)標(biāo)識(shí)符或數(shù)字级及。有的系統(tǒng)利用進(jìn)程標(biāo)識(shí)符作為進(jìn)程的外部標(biāo)志,用進(jìn)程標(biāo)志數(shù)作為進(jìn)程的內(nèi)部標(biāo)志额衙;

②:特征信息:包含是系統(tǒng)進(jìn)程還是用戶進(jìn)程饮焦、進(jìn)程實(shí)體是否常駐內(nèi)存等信息;

③:進(jìn)程狀態(tài)信息:表明該進(jìn)程的執(zhí)行狀態(tài)是運(yùn)行態(tài)窍侧、就緒態(tài)還是阻塞態(tài)县踢;

④:調(diào)度優(yōu)先權(quán):表示進(jìn)程獲取CPU的優(yōu)先級(jí)別

⑤:通信信息:反映該進(jìn)程與哪些進(jìn)程有什么樣的通信關(guān)系,如等待哪個(gè)進(jìn)程的信號(hào)等伟件;

⑥:現(xiàn)場(chǎng)保護(hù)區(qū):當(dāng)對(duì)應(yīng)進(jìn)程由于某個(gè)原因放棄使用CPU時(shí)硼啤,需要將它的一部分與運(yùn)行環(huán)境有關(guān)的信息保存起來,以便在重新獲得CPU后能恢復(fù)正常運(yùn)行斧账。通常被保護(hù)的信息有程序計(jì)數(shù)器谴返、程序狀態(tài)字煞肾、各工作寄存器的內(nèi)容等;

⑦:資源需求嗓袱、分配和控制方面的信息籍救;如進(jìn)程所需要或占有的I/O設(shè)備、磁盤空間渠抹、數(shù)據(jù)區(qū)等蝙昙;

⑧:進(jìn)程實(shí)體信息:指出該進(jìn)程的程序和數(shù)據(jù)的存儲(chǔ)情況,如在內(nèi)存或外存的地址梧却、大小等耸黑;

⑨:族系關(guān)系:反映父子進(jìn)程的隸屬關(guān)系;

⑩:其他信息:如文件信息篮幢、工作單元等大刊;

3.?進(jìn)程控制塊的作用

進(jìn)程的動(dòng)態(tài)、并發(fā)等特征是利用PCB表現(xiàn)出來的三椿。若沒有進(jìn)程控制塊缺菌,則多道程序環(huán)境中的程序(和數(shù)據(jù))是無法實(shí)現(xiàn)并發(fā)的。PCB是進(jìn)程存在的唯一標(biāo)志搜锰。

2.2.3?進(jìn)程組織方式

1.?線性方式

操作系統(tǒng)預(yù)先確定整個(gè)系統(tǒng)中同時(shí)存在的進(jìn)程的最大數(shù)目伴郁,然后靜態(tài)分配空間,把所有進(jìn)程的PCB都放在這個(gè)表中蛋叼。當(dāng)很多用戶同時(shí)上機(jī)時(shí)焊傅,會(huì)造成無法為用戶創(chuàng)建新進(jìn)程的情況。在執(zhí)行CPU調(diào)度時(shí)狈涮,為選擇合理的進(jìn)程投入運(yùn)行狐胎,經(jīng)常需要對(duì)整個(gè)表進(jìn)行掃描,降低了調(diào)度效率歌馍。

2.?鏈接方式

鏈接方式是經(jīng)常采用的方式握巢,按照進(jìn)程的不同狀態(tài)將其放在不同的隊(duì)列中。


3.?索引方式

索引方式是利用索引表記載相應(yīng)狀態(tài)進(jìn)程的PCB地址松却,狀態(tài)相同的進(jìn)程的PCB組織在同一索引表中暴浦,每個(gè)索引表的表目中存放該P(yáng)CB的地址。各索引表在內(nèi)存的起始地址放在專用的指針單元中晓锻。

2.3?進(jìn)程管理和有關(guān)命令

2.3.1?進(jìn)程圖和進(jìn)程管理

1.?進(jìn)程圖

開機(jī)后歌焦,首先引導(dǎo)操作系統(tǒng),把它裝入內(nèi)存砚哆,之后生成第一個(gè)進(jìn)程(在UNIX中稱為0進(jìn)程)独撇,由它創(chuàng)建1進(jìn)程及其他核心進(jìn)程;然后1進(jìn)程又為每個(gè)終端創(chuàng)建命令解釋進(jìn)程(shell進(jìn)程);用戶輸入命令后又創(chuàng)建若干進(jìn)程券勺。

2.?進(jìn)程創(chuàng)建

創(chuàng)建新進(jìn)程要執(zhí)行創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用绪钥,主要操作過程如下:

①:申請(qǐng)一個(gè)空閑的PCB,從系統(tǒng)的PCB表中找出一個(gè)空閑的PCB項(xiàng)关炼,并指定唯一的進(jìn)程標(biāo)識(shí)號(hào)PID(即進(jìn)程內(nèi)部名)

②:為新進(jìn)程分配資源

③:將新進(jìn)程的PCB初始化程腹,一般將新進(jìn)程狀態(tài)設(shè)置為就緒狀態(tài)

④:將新進(jìn)程加入就緒隊(duì)列中,一個(gè)進(jìn)程派生新進(jìn)程后儒拂,有兩種可能的執(zhí)行方式:

(1)?父進(jìn)程和子進(jìn)程同時(shí)(并發(fā))執(zhí)行寸潦;(2)?父進(jìn)程等待它的某個(gè)或全部子進(jìn)程終止

建立子進(jìn)程的地址空間也有兩種可能的方式:

(1)子進(jìn)程復(fù)制父進(jìn)程的地址空間;(2)?把程序裝入子進(jìn)程的地址空間

子進(jìn)程被創(chuàng)建后社痛,一般使用execlp系統(tǒng)調(diào)用——用一個(gè)程序(可執(zhí)行文件)取代原來內(nèi)存空間中的內(nèi)容见转,然后開始執(zhí)行。當(dāng)子進(jìn)程運(yùn)行時(shí)蒜哀,如果父進(jìn)程無事可做斩箫,就執(zhí)行wait系統(tǒng)調(diào)用,把自己插入阻塞隊(duì)列中撵儿,等待子進(jìn)程的終止

3.?進(jìn)程終止

終止進(jìn)程的主要操作過程:

①:從系統(tǒng)的PCB表中找到指定進(jìn)程的PCB乘客。若它處于運(yùn)行態(tài),則立即終止該進(jìn)程的運(yùn)行

②:回收該進(jìn)程所占用的全部資源

③:若該進(jìn)程還有子孫進(jìn)程淀歇,則還要終止其所有子孫進(jìn)程易核,回收它們所占用的全部資源

④:釋放被終止進(jìn)程的PCB,并從原來的隊(duì)列中摘走

4.?進(jìn)程阻塞

①:立即停止當(dāng)前進(jìn)程的執(zhí)行浪默;

②:將現(xiàn)行進(jìn)程的CPU現(xiàn)場(chǎng)送到該進(jìn)程的PCB現(xiàn)場(chǎng)保護(hù)區(qū)保存起來牡直,以便將來重新運(yùn)行時(shí)恢復(fù)此時(shí)的現(xiàn)場(chǎng);

③:把該進(jìn)程PCB中的現(xiàn)行狀態(tài)由“運(yùn)行”改為“阻塞”纳决,把它插入具有相同事件的阻塞隊(duì)列中碰逸;

④:然后轉(zhuǎn)到進(jìn)程調(diào)度程序,重新從就緒隊(duì)列中挑選一個(gè)合適進(jìn)程投入運(yùn)行

5.?進(jìn)程喚醒

執(zhí)行過程:

①:首先把阻塞進(jìn)程從相應(yīng)的阻塞隊(duì)列中摘下岳链;

②:將現(xiàn)行狀態(tài)改為就緒態(tài)花竞,然后將該進(jìn)程插入就緒隊(duì)列中劲件;

③:如果被喚醒進(jìn)程比運(yùn)行進(jìn)程有更高的優(yōu)先級(jí)掸哑,則設(shè)置重新調(diào)度標(biāo)志

6.?進(jìn)程映像的更換

在有些系統(tǒng)中,由于創(chuàng)建子進(jìn)程時(shí)是把父進(jìn)程的映像復(fù)制給子進(jìn)程零远,所有父子進(jìn)程的映像基本相同苗分。如果子進(jìn)程不改變自己的映像,就必然重復(fù)父進(jìn)程的過程牵辣。

改變進(jìn)程映像的主要過程:

①:釋放子進(jìn)程原來的程序和數(shù)據(jù)所占用的內(nèi)存空間摔癣;(釋放掉父進(jìn)程映像內(nèi)容)

②:從磁盤上找出子進(jìn)程所要執(zhí)行的程序和數(shù)據(jù)

③:分配內(nèi)存空間,裝入新的程序和數(shù)據(jù)

④:為子進(jìn)程建立初始的運(yùn)行環(huán)境——主要是對(duì)各個(gè)寄存器初始化,返回到用戶態(tài)择浊,運(yùn)行該進(jìn)程的程序

2.3.2 Linux進(jìn)程管理

1. Linux進(jìn)程狀態(tài)

①:運(yùn)行態(tài):進(jìn)程正在運(yùn)行或準(zhǔn)備運(yùn)行(就緒態(tài))戴卜,當(dāng)前進(jìn)程由運(yùn)行指針?biāo)赶颍?/p>

②:可中斷等待態(tài):此時(shí)進(jìn)程處于“淺度”睡眠——等待一個(gè)時(shí)間的發(fā)生或某種系統(tǒng)資源,它能夠被信號(hào)或中斷喚醒琢岩。當(dāng)所等待的資源得到滿足時(shí)投剥,它也被喚醒;

③:不可中斷等待態(tài):進(jìn)程處于“深度”睡眠的等待隊(duì)列中担孔,不能被信號(hào)或中斷喚醒江锨,只有所等待的資源得到滿足時(shí)才能被喚醒;

④:停止態(tài):通常由于接收一個(gè)信號(hào)糕篇,致使進(jìn)程停止啄育;

⑤:僵死態(tài):由于某些原因,進(jìn)程被終止了拌消,但是該進(jìn)程的控制結(jié)構(gòu)task_struct仍然保留著挑豌。

2.?進(jìn)程的運(yùn)行模式和類型

在Linux系統(tǒng)中,進(jìn)程的運(yùn)行模式劃分為用戶模式和內(nèi)核模式

Linux進(jìn)程分為兩大類型:一類是系統(tǒng)進(jìn)程墩崩,其只運(yùn)行在內(nèi)核模式浮毯,執(zhí)行操作系統(tǒng)代碼,完成一些管理性的工作泰鸡,如內(nèi)存分配和進(jìn)程切換等债蓝。另一類是用戶進(jìn)程,通常在用戶模式下執(zhí)行盛龄,并通過系統(tǒng)調(diào)用或在出現(xiàn)中斷饰迹、異常時(shí)進(jìn)入內(nèi)核模式

3. Linux進(jìn)程結(jié)構(gòu)

①:task_struct結(jié)構(gòu):Linux系統(tǒng)中的每個(gè)進(jìn)程都有一個(gè)名為task_struct的數(shù)據(jù)結(jié)構(gòu),它相當(dāng)于“進(jìn)程控制塊”余舶。系統(tǒng)中有一個(gè)進(jìn)程向量數(shù)組task啊鸭,其長(zhǎng)度默認(rèn)值是512B,數(shù)組的元素是指向task_struct結(jié)構(gòu)的指針匿值。在創(chuàng)建新進(jìn)程時(shí)赠制,Linux就從系統(tǒng)內(nèi)存中分配一個(gè)task_struct結(jié)構(gòu),并把它的首地址加入task數(shù)組挟憔。當(dāng)前正在運(yùn)行的進(jìn)程的task_struct結(jié)構(gòu)用current指針指示

②:進(jìn)程系統(tǒng)堆棧:在Linux系統(tǒng)中钟些,每個(gè)進(jìn)程都有一個(gè)系統(tǒng)堆棧,用來保存中斷現(xiàn)場(chǎng)信息和進(jìn)程進(jìn)入內(nèi)核模式后執(zhí)行子程序(函數(shù))嵌套調(diào)用的返回現(xiàn)場(chǎng)信息绊谭。每個(gè)進(jìn)程的系統(tǒng)堆棧和task_struct數(shù)據(jù)結(jié)構(gòu)之間存在緊密聯(lián)系政恍,二者物理存儲(chǔ)空間也連在一起。

2.3.3?有關(guān)進(jìn)程操作的命令

①:ps命令:查看進(jìn)程狀態(tài)最常用的命令达传,可提供關(guān)于進(jìn)程的許多信息

②:kill命令:終止一個(gè)進(jìn)程的運(yùn)行

③:sleep命令:使進(jìn)程暫停執(zhí)行一段時(shí)間

④:pstree命令:每一個(gè)進(jìn)程都是由其父進(jìn)程創(chuàng)建的(0進(jìn)程除外)篙耗。pstree命令可將系統(tǒng)中各進(jìn)程間的關(guān)系以進(jìn)程的樹狀圖展示出來

⑤:top命令:實(shí)時(shí)監(jiān)視系統(tǒng)不同進(jìn)程所使用的資源

⑥:nice命令:通常用于降低一個(gè)進(jìn)程的優(yōu)先級(jí)

⑦:fg命令和bg命令:使用bg命令迫筑,將任務(wù)放在后臺(tái)執(zhí)行;使用fg命令宗弯,將后臺(tái)運(yùn)行的進(jìn)程調(diào)度到前臺(tái)運(yùn)行

2.4?線程概念

2.4.1?什么是線程

1.?線程概念

線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位脯燃,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。

引入線程概念的原因主要有:

①:使并行實(shí)體獲得共享同一地址空間和所有可用數(shù)據(jù)的能力蒙保;

②:易于切換曲伊,代價(jià)低;

③:可以改善系統(tǒng)的性能

2.?線程的組成

每個(gè)線程有一個(gè)thread結(jié)構(gòu)追他,即線程控制塊坟募,用于保存自己私有的信息,其主要由以下4個(gè)基本部分組成:

①:一個(gè)唯一的線程標(biāo)識(shí)符邑狸;

②:描述處理器工作情況的一組寄存器(如程序計(jì)數(shù)器懈糯、狀態(tài)寄存器、通用寄存器等)的內(nèi)容单雾;

③:每個(gè)thread結(jié)構(gòu)有兩個(gè)棧指針赚哗。一個(gè)指向核心棧,一個(gè)指向用戶棧硅堆;

④:一個(gè)私有存儲(chǔ)區(qū)屿储,存放現(xiàn)場(chǎng)保護(hù)信息和其他與該線程相關(guān)的統(tǒng)計(jì)信息等。

一個(gè)進(jìn)程可以包含一個(gè)線程或多個(gè)線程渐逃。

3.?線程的狀態(tài)

線程也有若干種狀態(tài)够掠,如運(yùn)行狀態(tài)、阻塞狀態(tài)茄菊、就緒狀態(tài)和終止?fàn)顟B(tài)

線程是一個(gè)動(dòng)態(tài)過程疯潭。它的狀態(tài)轉(zhuǎn)換是在一定的條件下實(shí)現(xiàn)的。通常面殖,當(dāng)一個(gè)新進(jìn)程創(chuàng)建時(shí)竖哩,該進(jìn)程的一個(gè)線程也被創(chuàng)建。以后脊僚,這個(gè)線程還可以在它所屬的進(jìn)程內(nèi)部創(chuàng)建另外的線程相叁,為新線程提供指令指針和參數(shù),同時(shí)為新線程提供私有的寄存器內(nèi)容和椓苫希空間

4.?線程和進(jìn)程的關(guān)系

①:一個(gè)進(jìn)程可以有多個(gè)線程增淹,但至少要有一個(gè)線程;而一個(gè)線程只能在一個(gè)進(jìn)程的地址空間內(nèi)活動(dòng)舶衬;

②:資源分配給進(jìn)程埠通,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源;

③:CPU分配給線程逛犹,即真正在CPU上運(yùn)行的是線程;

④:線程在執(zhí)行過程中需要協(xié)作同步。

2.4.2?線程的實(shí)現(xiàn)方式

1.?用戶級(jí)線程

優(yōu)點(diǎn):①:線程切換速度很快虽画,無須進(jìn)行系統(tǒng)調(diào)度舞蔽;②:調(diào)度算法可以是應(yīng)用程序?qū)S玫摹T试S不同的應(yīng)用程序采用適合自己要求的不同的調(diào)度算法码撰,并且不干擾底層操作系統(tǒng)的調(diào)度程序渗柿;③:用戶級(jí)線程可以運(yùn)行在任何操作系統(tǒng)上,包括不支持線程機(jī)制的操作系統(tǒng)脖岛。

缺點(diǎn):①:系統(tǒng)調(diào)用的阻塞問題朵栖;②:在單純用戶級(jí)線程方式中,多線程應(yīng)用程序不具有多處理器的優(yōu)點(diǎn)

2.?核心級(jí)線程

優(yōu)點(diǎn):①:在多處理器系統(tǒng)中柴梆,核心可以同時(shí)調(diào)度同一進(jìn)程的多個(gè)線程陨溅,真正實(shí)現(xiàn)并行操作;②:如果一個(gè)進(jìn)程的某個(gè)線程阻塞了绍在,核心可以調(diào)度同一個(gè)進(jìn)程的另一個(gè)線程门扇;③:核心線程本身也可以是多線程的

缺點(diǎn):①:控制轉(zhuǎn)移開銷大;②:調(diào)度算法由核心確定偿渡,應(yīng)用進(jìn)程無法影響到線程的切換

2.5?進(jìn)程間的同步與互斥

2.5.1?進(jìn)程間的關(guān)系

1.?同步

邏輯上相關(guān)的兩個(gè)或多個(gè)進(jìn)程為完成一項(xiàng)任務(wù)臼寄,通過協(xié)調(diào)活動(dòng)來使用同一資源,而產(chǎn)生的執(zhí)行時(shí)序的約束關(guān)系溜宽,稱作同步

2.?互斥

邏輯上彼此獨(dú)立的兩個(gè)或多個(gè)進(jìn)程由于爭(zhēng)用同一資源而發(fā)生的相互制約關(guān)系稱作互斥

兩個(gè)或多個(gè)進(jìn)程同時(shí)訪問和操縱相同的數(shù)據(jù)時(shí)吉拳,最后的執(zhí)行結(jié)果取決于進(jìn)程運(yùn)行的精準(zhǔn)時(shí)序,這種情況稱為競(jìng)爭(zhēng)條件

2.5.2?競(jìng)爭(zhēng)條件和臨界區(qū)

一次僅允許一個(gè)進(jìn)程使用的臨界資源适揉,我們把這類共享資源稱為臨界資源合武,在每個(gè)進(jìn)程中訪問臨界資源的那段程序稱為臨界區(qū)(Critical Section),簡(jiǎn)稱CS區(qū)

進(jìn)程互斥進(jìn)入臨界區(qū)都要遵循一種通用模式:進(jìn)入前要申請(qǐng)涡扼,獲準(zhǔn)后方可進(jìn)入稼跳;執(zhí)行后要退出,然后才可以執(zhí)行其他代碼

欲進(jìn)入臨界區(qū)的若干進(jìn)程要滿足如下條件:

①:任何時(shí)候吃沪,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個(gè)汤善;②:如果若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),則一次僅允許一個(gè)進(jìn)程進(jìn)入票彪;③:不能使進(jìn)程無限期等待進(jìn)入臨界區(qū)红淡;④:不應(yīng)對(duì)CPU的速度和數(shù)量進(jìn)行任何假設(shè)

2.5.3?進(jìn)程同步機(jī)制

1.?實(shí)現(xiàn)互斥方式

①:利用硬件方法解決進(jìn)程互斥問題:禁止中斷和設(shè)置專用機(jī)器指令

②:原語操作:所謂原語是機(jī)器指令的延伸,往往是為完成某些特定的功能而編制的一段系統(tǒng)程序降铸,為保證操作的正確性在旱,在許多機(jī)器中規(guī)定,執(zhí)行原語操作時(shí)要屏蔽中斷推掸,以保證其操作的不可分割性

③:利用軟件方法解決進(jìn)程互斥問題:關(guān)鎖桶蝎,執(zhí)行臨界區(qū)程序驻仅,開鎖

2.?信號(hào)量及P、V操作原語

①:整型信號(hào)量

將信號(hào)量定義為一個(gè)特殊的登渣、可共享的整型量噪服,對(duì)信號(hào)量的操作只能有3個(gè):初始化為一個(gè)非負(fù)值,以及由P和V兩個(gè)操作分別對(duì)信號(hào)量減1和加1

②:記錄型信號(hào)量

對(duì)信號(hào)量和P胜茧、V操作的定義進(jìn)行改進(jìn)粘优,一般是由兩個(gè)成員組成的數(shù)據(jù)結(jié)構(gòu):一個(gè)成員是整型變量,表示該信號(hào)量的值呻顽;另一個(gè)是指向PCB的指針

信號(hào)量的值是與相應(yīng)資源的使用情況有關(guān)的雹顺。當(dāng)它的值大于0時(shí),則表示當(dāng)前可用資源的數(shù)量廊遍;當(dāng)它的值小于0時(shí)嬉愧,則其絕對(duì)值表示等待使用該資源的進(jìn)程個(gè)數(shù),即在該信號(hào)量隊(duì)列上排隊(duì)的PCB的個(gè)數(shù)

2.5.4?信號(hào)量的一般應(yīng)用

1.?用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥

利用信號(hào)量實(shí)現(xiàn)互斥的一般模型是:

①:在每個(gè)程序中用于實(shí)現(xiàn)互斥的P(mutex)和V(mutex)必須成對(duì)出現(xiàn)昧碉,即先做P英染,進(jìn)入臨界區(qū);后做V被饿,退出臨界區(qū)四康;②:互斥信號(hào)量mutex的初值一般為1

2.?用信號(hào)量實(shí)現(xiàn)進(jìn)程簡(jiǎn)單同步


2.6?經(jīng)典進(jìn)程同步問題

1.?生產(chǎn)者-消費(fèi)者問題

生產(chǎn)者-消費(fèi)者問題可表述為:一組生產(chǎn)者進(jìn)程和一組消費(fèi)者進(jìn)程(假設(shè)每組有多個(gè)進(jìn)程)通過緩沖區(qū)發(fā)生聯(lián)系

為使這兩類進(jìn)程協(xié)調(diào)工作,防止盲目地生產(chǎn)和消費(fèi)狭握,它們要滿足如下同步條件:

①:任一時(shí)刻所有生產(chǎn)者存放產(chǎn)品的單元數(shù)不能超過緩沖區(qū)的總?cè)萘?N)闪金;

②:所有消費(fèi)者取出產(chǎn)品的總量不能超過所有生產(chǎn)者當(dāng)前生產(chǎn)產(chǎn)品的總量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市论颅,隨后出現(xiàn)的幾起案子哎垦,更是在濱河造成了極大的恐慌,老刑警劉巖恃疯,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漏设,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡今妄,警方通過查閱死者的電腦和手機(jī)郑口,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盾鳞,“玉大人犬性,你說我怎么就攤上這事√诮觯” “怎么了乒裆?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)推励。 經(jīng)常有香客問我鹤耍,道長(zhǎng)肉迫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任惰蜜,我火速辦了婚禮昂拂,結(jié)果婚禮上受神,老公的妹妹穿的比我還像新娘抛猖。我一直安慰自己,他們只是感情好鼻听,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布财著。 她就那樣靜靜地躺著,像睡著了一般撑碴。 火紅的嫁衣襯著肌膚如雪撑教。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天醉拓,我揣著相機(jī)與錄音伟姐,去河邊找鬼。 笑死亿卤,一個(gè)胖子當(dāng)著我的面吹牛愤兵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播排吴,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秆乳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钻哩?” 一聲冷哼從身側(cè)響起屹堰,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎街氢,沒想到半個(gè)月后扯键,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡珊肃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荣刑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片近范。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘶摊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出评矩,到底是詐尸還是另有隱情叶堆,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布斥杜,位于F島的核電站虱颗,受9級(jí)特大地震影響沥匈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忘渔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一高帖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畦粮,春花似錦散址、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儒将,卻和暖如春吏祸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钩蚊。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工贡翘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砰逻。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓鸣驱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诱渤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丐巫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容