課件-2014第二章進(jìn)程管理_第1頁(yè)
課件-2014第二章進(jìn)程管理_第2頁(yè)
課件-2014第二章進(jìn)程管理_第3頁(yè)
課件-2014第二章進(jìn)程管理_第4頁(yè)
課件-2014第二章進(jìn)程管理_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余61頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)操作系統(tǒng)楊為民

湯小丹等編著22.5進(jìn)程通信2.5.1進(jìn)程通信的類(lèi)型2.5.2消息傳遞通信的實(shí)現(xiàn)方法2.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題2.5.4消息緩沖隊(duì)列通信機(jī)制32.5進(jìn)程通信通信(communication)意味著在進(jìn)程間傳送數(shù)據(jù)。操作系統(tǒng)可以被看作是各種進(jìn)程組成的。這些進(jìn)程都具有各自的獨(dú)立功能,且大多數(shù)被外部需要而啟動(dòng)執(zhí)行。一般來(lái)說(shuō),進(jìn)程間的通信根據(jù)通信內(nèi)容可以劃分為二種:控制信息的傳送與大批量數(shù)據(jù)傳送。有時(shí),也把進(jìn)程間控制信息的交換稱(chēng)為低級(jí)通信,低級(jí)通信一般只傳送一個(gè)或幾個(gè)字節(jié)的信息,以達(dá)到控制進(jìn)程執(zhí)行速度的作用。把進(jìn)程間大批量數(shù)據(jù)的交換稱(chēng)為高級(jí)通信。高級(jí)通信要傳送大量數(shù)據(jù)。高級(jí)通信的目的不是為了控制進(jìn)程的執(zhí)行速度,而是為了交換信息。42.5.1進(jìn)程通信的類(lèi)型共享存儲(chǔ)器系統(tǒng)(Shared-MemorySystem)消息傳遞系統(tǒng)(Messagepassingsystem)管道(Pipe)通信52.5.1進(jìn)程通信的類(lèi)型1.共享存儲(chǔ)器系統(tǒng)(Shared-MemorySystem)(1)基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式:諸進(jìn)程公用數(shù)據(jù)結(jié)構(gòu)以實(shí)現(xiàn)進(jìn)程間的信息交換;

(2)基于共享存儲(chǔ)區(qū)的通信方式:諸進(jìn)程通過(guò)對(duì)共享存儲(chǔ)區(qū)中數(shù)據(jù)的讀或?qū)憣?shí)現(xiàn)通信。62.5.1進(jìn)程通信的類(lèi)型2.消息傳遞系統(tǒng)(Messagepassingsystem)不論是單機(jī)系統(tǒng)、多機(jī)系統(tǒng),還是計(jì)算機(jī)網(wǎng)絡(luò),消息傳遞機(jī)制都是用得最廣泛的一種進(jìn)程間通信的機(jī)制。在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換,是以格式化的消息(message)為單位的;在計(jì)算機(jī)網(wǎng)絡(luò)中,又把message稱(chēng)為報(bào)文。程序員直接利用系統(tǒng)提供的一組通信命令(原語(yǔ))進(jìn)行通信。操作系統(tǒng)隱藏了通信的實(shí)現(xiàn)細(xì)節(jié),大大減化了通信程序編制的復(fù)雜性,而獲得廣泛的應(yīng)用。消息傳遞系統(tǒng)的通信方式屬于高級(jí)通信方式。又因其實(shí)現(xiàn)方式的不同而進(jìn)一步分成直接通信方式和間接通信方式兩種。

72.5.1進(jìn)程通信的類(lèi)型3.管道(Pipe)通信所謂“管道”,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫(xiě)進(jìn)程以實(shí)現(xiàn)他們之間通信的一個(gè)共享文件,又名pipe文件。向管道(共享文件)提供輸入的發(fā)送進(jìn)程(即寫(xiě)進(jìn)程),以字符流形式將大量的數(shù)據(jù)送入管道;而接受管道輸出的接收進(jìn)程(即讀進(jìn)程),則從管道中接收(讀)數(shù)據(jù)。由于發(fā)送進(jìn)程和接收進(jìn)程是利用管道進(jìn)行通信的,故又稱(chēng)為管道通信。這種方式首創(chuàng)于UNIX系統(tǒng),由于它能有效地傳送大量數(shù)據(jù),因而又被引入到許多其它操作系統(tǒng)中。82.5.1進(jìn)程通信的類(lèi)型為了協(xié)調(diào)雙方的通信,管道機(jī)制必須提供以下三方面的協(xié)調(diào)能力:①互斥,即當(dāng)一個(gè)進(jìn)程正在對(duì)pipe執(zhí)行讀/寫(xiě)操作時(shí),其它(另一)進(jìn)程必須等待。②同步,指當(dāng)寫(xiě)(輸入)進(jìn)程把一定數(shù)量(如4KB)的數(shù)據(jù)寫(xiě)入pipe,便去睡眠等待,直到讀(輸出)進(jìn)程取走數(shù)據(jù)后,再把他喚醒。當(dāng)讀進(jìn)程讀一空pipe時(shí),也應(yīng)睡眠等待,直至寫(xiě)進(jìn)程將數(shù)據(jù)寫(xiě)入管道后,才將之喚醒。③確定對(duì)方是否存在,只有確定了對(duì)方已存在時(shí),才能進(jìn)行通信。92.5.2消息傳遞通信的實(shí)現(xiàn)方法

1.直接通信方式這是指發(fā)送進(jìn)程利用OS所提供的發(fā)送命令,直接把消息發(fā)送給目標(biāo)進(jìn)程。此時(shí),要求發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對(duì)方的標(biāo)識(shí)符。通常,系統(tǒng)提供下述兩條通信命令(原語(yǔ)):Send(Receiver,message);發(fā)送一個(gè)消息給接收進(jìn)程;Receive(Sender,message);接收Sender發(fā)來(lái)的消息;例如,原語(yǔ)Send(P2,m1)表示將消息m1發(fā)送給接收進(jìn)程P2;而原語(yǔ)Receive(P1,m1)則表示接收由P1發(fā)來(lái)的消息m1。102.5.2消息傳遞通信的實(shí)現(xiàn)方法在某些情況下,接收進(jìn)程可與多個(gè)發(fā)送進(jìn)程通信,因此,它不可能事先指定發(fā)送進(jìn)程。例如,用于提供打印服務(wù)的進(jìn)程,它可以接收來(lái)自任何一個(gè)進(jìn)程的“打印請(qǐng)求”消息。對(duì)于這樣的應(yīng)用,在接收進(jìn)程接收消息的原語(yǔ)中的源進(jìn)程參數(shù),是完成通信后的返回值,接收原語(yǔ)可表示為:Receive(id,message);112.5.2消息傳遞通信的實(shí)現(xiàn)方法我們還可以利用直接通信原語(yǔ),來(lái)解決生產(chǎn)者-消費(fèi)者問(wèn)題。當(dāng)生產(chǎn)者生產(chǎn)出一個(gè)產(chǎn)品(消息)后,便用Send原語(yǔ)將消息發(fā)送給消費(fèi)者進(jìn)程;而消費(fèi)者進(jìn)程則利用Receive原語(yǔ)來(lái)得到一個(gè)消息。如果消息尚未生產(chǎn)出來(lái),消費(fèi)者必須等待,直至生產(chǎn)者進(jìn)程將消息發(fā)送過(guò)來(lái)。生產(chǎn)者-消費(fèi)者的通信過(guò)程可分別描述如下:

repeat

…produceaniteminnextp;

…send(consumer,nextp);untilfalse;repeatreceive(producer,nextc);

…consumetheiteminnextc;untilfalse;122.5.2消息傳遞通信的實(shí)現(xiàn)方法2.間接通信方式(1)信箱的創(chuàng)建和撤消。進(jìn)程可利用信箱創(chuàng)建原語(yǔ)來(lái)建立一個(gè)新信箱。創(chuàng)建者進(jìn)程應(yīng)給出信箱名字、信箱屬性(公用、私用或共享);對(duì)于共享信箱,還應(yīng)給出共享者的名字。當(dāng)進(jìn)程不再需要讀信箱時(shí),可用信箱撤消原語(yǔ)將之撤消。(2)消息的發(fā)送和接收。當(dāng)進(jìn)程之間要利用信箱進(jìn)行通信時(shí),必須使用共享信箱,并利用系統(tǒng)提供的下述通信原語(yǔ)進(jìn)行通信。Send(mailbox,message);將一個(gè)消息發(fā)送到指定信箱Receive(mailbox,message);從指定信箱中接收一個(gè)消息132.5.2消息傳遞通信的實(shí)現(xiàn)方法信箱可由操作系統(tǒng)創(chuàng)建,也可由用戶(hù)進(jìn)程創(chuàng)建,創(chuàng)建者是信箱的擁有者。據(jù)此,可把信箱分為以下三類(lèi)。1)私用信箱用戶(hù)進(jìn)程可為自己建立一個(gè)新信箱,并作為該進(jìn)程的一部分。信箱的擁有者有權(quán)從信箱中讀取消息,其他用戶(hù)則只能將自己構(gòu)成的消息發(fā)送到該信箱中。這種私用信箱可采用單向通信鏈路的信箱來(lái)實(shí)現(xiàn)。當(dāng)擁有該信箱的進(jìn)程結(jié)束時(shí),信箱也隨之消失。142.5.2消息傳遞通信的實(shí)現(xiàn)方法2)公用信箱它由操作系統(tǒng)創(chuàng)建,并提供給系統(tǒng)中的所有核準(zhǔn)進(jìn)程使用。核準(zhǔn)進(jìn)程既可把消息發(fā)送到該信箱中,也可從信箱中讀取發(fā)送給自己的消息。顯然,公用信箱應(yīng)采用雙向通信鏈路的信箱來(lái)實(shí)現(xiàn)。通常,公用信箱在系統(tǒng)運(yùn)行期間始終存在。3)共享信箱它由某進(jìn)程創(chuàng)建,在創(chuàng)建時(shí)或創(chuàng)建后,指明它是可共享的,同時(shí)須指出共享進(jìn)程(用戶(hù))的名字。信箱的擁有者和共享者,都有權(quán)從信箱中取走發(fā)送給自己的消息。152.5.2消息傳遞通信的實(shí)現(xiàn)方法在利用信箱通信時(shí),在發(fā)送進(jìn)程和接收進(jìn)程之間,存在以下四種關(guān)系:(1)一對(duì)一關(guān)系。這時(shí)可為發(fā)送進(jìn)程和接收進(jìn)程建立一條兩者專(zhuān)用的通信鏈路,使兩者之間的交互不受其他進(jìn)程的干擾。(2)多對(duì)一關(guān)系。允許提供服務(wù)的進(jìn)程與多個(gè)用戶(hù)進(jìn)程之間進(jìn)行交互,也稱(chēng)為客戶(hù)/服務(wù)器交互(client/serverinteraction)。(3)一對(duì)多關(guān)系。允許一個(gè)發(fā)送進(jìn)程與多個(gè)接收進(jìn)程進(jìn)行交互,使發(fā)送進(jìn)程可用廣播方式,向接收者(多個(gè))發(fā)送消息。(4)多對(duì)多關(guān)系。允許建立一個(gè)公用信箱,讓多個(gè)進(jìn)程都能向信箱中投遞消息;也可從信箱中取走屬于自己的消息。162.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題1.通信鏈路(communicationlink)為使在發(fā)送進(jìn)程和接收進(jìn)程之間能進(jìn)行通信,必須在兩者之間建立一條通信鏈路。有兩種方式建立通信鏈路。由發(fā)送進(jìn)程在通信之前,用顯式的“建立連接”命令(原語(yǔ))請(qǐng)求系統(tǒng)為之建立一條通信鏈路;在鏈路使用完后,也用顯式方式拆除鏈路。這種方式主要用于計(jì)算機(jī)網(wǎng)絡(luò)中。發(fā)送進(jìn)程無(wú)須明確提出建立鏈路的請(qǐng)求,只須利用系統(tǒng)提供的發(fā)送命令(原語(yǔ)),系統(tǒng)會(huì)自動(dòng)地為之建立一條鏈路。這種方式主要用于單機(jī)系統(tǒng)中。172.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題根據(jù)通信鏈路的連接方法,又可把通信鏈路分為兩類(lèi):①點(diǎn)—點(diǎn)連接通信鏈路,這時(shí)的一條鏈路只連接兩個(gè)結(jié)點(diǎn)(進(jìn)程);②多點(diǎn)連接鏈路,指用一條鏈路連接多個(gè)(n>2)結(jié)點(diǎn)(進(jìn)程)。而根據(jù)通信方式的不同,則又可把鏈路分成兩種:?jiǎn)蜗蛲ㄐ沛溌罚辉试S發(fā)送進(jìn)程向接收進(jìn)程發(fā)送消息;雙向鏈路,既允許由進(jìn)程A向進(jìn)程B發(fā)送消息,也允許進(jìn)程B同時(shí)向進(jìn)程A發(fā)送消息。182.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題2.消息的格式在某些OS中,消息是采用比較短的定長(zhǎng)消息格式,這減少了對(duì)消息的處理和存儲(chǔ)開(kāi)銷(xiāo)。這種方式可用于辦公自動(dòng)化系統(tǒng)中,為用戶(hù)提供快速的便箋式通信;但這對(duì)要發(fā)送較長(zhǎng)消息的用戶(hù)是不方便的。在有的OS中,采用另一種變長(zhǎng)的消息格式,即進(jìn)程所發(fā)送消息的長(zhǎng)度是可變的。系統(tǒng)在處理和存儲(chǔ)變長(zhǎng)消息時(shí),須付出更多的開(kāi)銷(xiāo),但方便了用戶(hù)。這兩種消息格式各有其優(yōu)缺點(diǎn),故在很多系統(tǒng)(包括計(jì)算機(jī)網(wǎng)絡(luò))中,是同時(shí)都用的。192.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題3.進(jìn)程同步方式(1)發(fā)送進(jìn)程阻塞、接收進(jìn)程阻塞。(2)發(fā)送進(jìn)程不阻塞、接收進(jìn)程阻塞。(3)發(fā)送進(jìn)程和接收進(jìn)程均不阻塞。202.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題1.通信鏈路(communicationlink)為使在發(fā)送進(jìn)程和接收進(jìn)程之間能進(jìn)行通信,必須在兩者之間建立一條通信鏈路。有兩種方式建立通信鏈路。由發(fā)送進(jìn)程在通信之前,用顯式的“建立連接”命令(原語(yǔ))請(qǐng)求系統(tǒng)為之建立一條通信鏈路;在鏈路使用完后,也用顯式方式拆除鏈路。這種方式主要用于計(jì)算機(jī)網(wǎng)絡(luò)中。發(fā)送進(jìn)程無(wú)須明確提出建立鏈路的請(qǐng)求,只須利用系統(tǒng)提供的發(fā)送命令(原語(yǔ)),系統(tǒng)會(huì)自動(dòng)地為之建立一條鏈路。這種方式主要用于單機(jī)系統(tǒng)中。212.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題根據(jù)通信鏈路的連接方法,又可把通信鏈路分為兩類(lèi):①點(diǎn)—點(diǎn)連接通信鏈路,這時(shí)的一條鏈路只連接兩個(gè)結(jié)點(diǎn)(進(jìn)程);②多點(diǎn)連接鏈路,指用一條鏈路連接多個(gè)(n>2)結(jié)點(diǎn)(進(jìn)程)。而根據(jù)通信方式的不同,則又可把鏈路分成兩種:?jiǎn)蜗蛲ㄐ沛溌?,只允許發(fā)送進(jìn)程向接收進(jìn)程發(fā)送消息;雙向鏈路,既允許由進(jìn)程A向進(jìn)程B發(fā)送消息,也允許進(jìn)程B同時(shí)向進(jìn)程A發(fā)送消息。222.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題2.消息的格式在某些OS中,消息是采用比較短的定長(zhǎng)消息格式,這減少了對(duì)消息的處理和存儲(chǔ)開(kāi)銷(xiāo)。這種方式可用于辦公自動(dòng)化系統(tǒng)中,為用戶(hù)提供快速的便箋式通信;但這對(duì)要發(fā)送較長(zhǎng)消息的用戶(hù)是不方便的。在有的OS中,采用另一種變長(zhǎng)的消息格式,即進(jìn)程所發(fā)送消息的長(zhǎng)度是可變的。系統(tǒng)在處理和存儲(chǔ)變長(zhǎng)消息時(shí),須付出更多的開(kāi)銷(xiāo),但方便了用戶(hù)。這兩種消息格式各有其優(yōu)缺點(diǎn),故在很多系統(tǒng)(包括計(jì)算機(jī)網(wǎng)絡(luò))中,是同時(shí)都用的。232.5.3消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問(wèn)題3.進(jìn)程同步方式(1)發(fā)送進(jìn)程阻塞、接收進(jìn)程阻塞。(2)發(fā)送進(jìn)程不阻塞、接收進(jìn)程阻塞。(3)發(fā)送進(jìn)程和接收進(jìn)程均不阻塞。242.5.4消息緩沖隊(duì)列通信機(jī)制

1.消息緩沖隊(duì)列通信機(jī)制中的數(shù)據(jù)結(jié)構(gòu)(1)消息緩沖區(qū)。在消息緩沖隊(duì)列通信方式中,主要利用的數(shù)據(jù)結(jié)構(gòu)是消息緩沖區(qū)。它可描述如下:typemessagebuffer=recordsender;發(fā)送者進(jìn)程標(biāo)識(shí)符size;消息長(zhǎng)度text;消息正文next;指向下一個(gè)消息緩沖區(qū)的指針end252.5.4消息緩沖隊(duì)列通信機(jī)制

(2)PCB中有關(guān)通信的數(shù)據(jù)項(xiàng)。在利用消息緩沖隊(duì)列通信機(jī)制時(shí),在設(shè)置消息緩沖隊(duì)列的同時(shí),還應(yīng)增加用于對(duì)消息隊(duì)列進(jìn)行操作和實(shí)現(xiàn)同步的信號(hào)量,并將它們置入進(jìn)程的PCB中。在PCB中應(yīng)增加的數(shù)據(jù)項(xiàng)可描述如下:typeprocesscontrolblock=record

…mq;消息隊(duì)列隊(duì)首指針

mutex;消息隊(duì)列互斥信號(hào)量

sm;消息隊(duì)列資源信號(hào)量

…end262.5.4消息緩沖隊(duì)列通信機(jī)制

2.發(fā)送原語(yǔ)發(fā)送進(jìn)程在利用發(fā)送原語(yǔ)發(fā)送消息之前,應(yīng)先在自己的內(nèi)存空間,設(shè)置一發(fā)送區(qū)a,把待發(fā)送的消息正文、發(fā)送進(jìn)程標(biāo)識(shí)符、消息長(zhǎng)度等信息填入其中,然后調(diào)用發(fā)送原語(yǔ),把消息發(fā)送給目標(biāo)(接收)進(jìn)程。發(fā)送原語(yǔ)首先根據(jù)發(fā)送區(qū)a中所設(shè)置的消息長(zhǎng)度a.size來(lái)申請(qǐng)一緩沖區(qū)i,接著,把發(fā)送區(qū)a中的信息復(fù)制到緩沖區(qū)i中。為了能將i掛在接收進(jìn)程的消息隊(duì)列mq上,應(yīng)先獲得接收進(jìn)程的內(nèi)部標(biāo)識(shí)符j,然后將i掛在j.mq上。由于該隊(duì)列屬于臨界資源,故在執(zhí)行insert操作的前后,都要執(zhí)行wait和signal操作。27圖2-12消息緩沖通信2.5.4消息緩沖隊(duì)列通信機(jī)制28

proceduresend(receiver,a)begingetbuf(a.size,i);根據(jù)a.size申請(qǐng)緩沖區(qū);

i.sender∶=a.sender;將發(fā)送區(qū)a中的信息復(fù)制到消息緩沖區(qū)之中;

i.size∶=a.size;i.text∶=a.text;i.next∶=0;getid(PCBset,receiver.j);獲得接收進(jìn)程內(nèi)部標(biāo)識(shí)符;

wait(j.mutex);insert(j.mq,i);將消息緩沖區(qū)插入消息隊(duì)列;

signal(j.mutex);signal(j.sm);end2.5.4消息緩沖隊(duì)列通信機(jī)制292.5.4消息緩沖隊(duì)列通信機(jī)制3.接收原語(yǔ)接收原語(yǔ)描述如下:procedurereceive(b)beginj∶=internalname;j為接收進(jìn)程內(nèi)部的標(biāo)識(shí)符;

wait(j.sm);wait(j.mutex);remove(j.mq,i);將消息隊(duì)列中第一個(gè)消息移出;

signal(j.mutex);b.sender∶=i.sender;將消息緩沖區(qū)i中的信息復(fù)制到接收區(qū)b;b.size∶=i.size;b.text∶=i.text;end302.6線程2.6.1線程的基本概念2.6.2線程間的同步和通信2.6.3線程的實(shí)現(xiàn)方式2.6.4線程的實(shí)現(xiàn)312.6.1線程的基本概念1、線程的引入在操作系統(tǒng)中引入進(jìn)程的目的,是為了使多個(gè)程序能并發(fā)執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量,在操作系統(tǒng)中再引入線程,則是為了減少程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷(xiāo),使OS具有更好的并發(fā)性。為了說(shuō)明這一點(diǎn),我們首先來(lái)回顧進(jìn)程的兩個(gè)基本屬性:①進(jìn)程是一個(gè)可擁有資源的獨(dú)立單位;②進(jìn)程同時(shí)又是一個(gè)可獨(dú)立調(diào)度和分派的基本單位。正是由于進(jìn)程有這兩個(gè)基本屬性,才使之成為一個(gè)能獨(dú)立運(yùn)行的基本單位,從而也就構(gòu)成了進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)。然而,為使程序能并發(fā)執(zhí)行,系統(tǒng)還必須進(jìn)行以下的一系列操作。322.6.1線程的基本概念為使程序能并發(fā)執(zhí)行,系統(tǒng)還必須進(jìn)行以下的一系列操作。創(chuàng)建進(jìn)程系統(tǒng)在創(chuàng)建一個(gè)進(jìn)程時(shí),必須為它分配其所必需的、除處理機(jī)以外的所有資源,如內(nèi)存空間、I/O設(shè)備,以及建立相應(yīng)的PCB。2)撤消進(jìn)程系統(tǒng)在撤消進(jìn)程時(shí),又必須先對(duì)其所占有的資源執(zhí)行回收操作,然后再撤消PCB。3)進(jìn)程切換對(duì)進(jìn)程進(jìn)行切換時(shí),由于要保留當(dāng)前進(jìn)程的CPU環(huán)境和設(shè)置新選中進(jìn)程的CPU環(huán)境,因而須花費(fèi)不少的處理機(jī)時(shí)間。換言之,由于進(jìn)程是一個(gè)資源的擁有者,因而在創(chuàng)建、撤消和切換中,系統(tǒng)必須為之付出較大的時(shí)空開(kāi)銷(xiāo)。正因如此,在系統(tǒng)中所設(shè)置的進(jìn)程,其數(shù)目不宜過(guò)多,進(jìn)程切換的頻率也不宜過(guò)高,這也就限制了并發(fā)程度的進(jìn)一步提高。332.6.1線程的基本概念2、線程的屬性輕型實(shí)體。線程中的實(shí)體基本上不擁有系統(tǒng)資源,只是有一點(diǎn)必不可少的、能保證其獨(dú)立運(yùn)行的資源,比如,在每個(gè)線程中都應(yīng)具有一個(gè)用于控制線程運(yùn)行的線程控制塊TCB,用于指示被執(zhí)行指令序列的程序計(jì)數(shù)器,保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧。(2)獨(dú)立調(diào)度和分派的基本單位。在多線程O(píng)S中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。由于線程很“輕”,故線程的切換非常迅速且開(kāi)銷(xiāo)小。(3)可并發(fā)執(zhí)行。在一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行,甚至允許在一個(gè)進(jìn)程中的所有線程都能并發(fā)執(zhí)行;同樣,不同進(jìn)程中的線程也能并發(fā)執(zhí)行。(4)共享進(jìn)程資源。在同一進(jìn)程中的各個(gè)線程都可以共享該進(jìn)程所擁有的資源,這首先表現(xiàn)在所有線程都具有相同的地址空間(進(jìn)程的地址空間)。這意味著線程可以訪問(wèn)該地址空間中的每一個(gè)虛地址;此外,還可以訪問(wèn)進(jìn)程所擁有的已打開(kāi)文件、定時(shí)器、信號(hào)量機(jī)構(gòu)等。34線程與進(jìn)程的比較3、線程與進(jìn)程的比較1.調(diào)度:在傳統(tǒng)的操作系統(tǒng)中,擁有資源的基本單位和獨(dú)立調(diào)度、分派的基本單位都是進(jìn)程。2.并發(fā)性:在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且在一個(gè)進(jìn)程中的多個(gè)線程之間亦可并發(fā)執(zhí)行,因而使操作系統(tǒng)具有更好的并發(fā)性,從而能更有效地使用系統(tǒng)資源和提高系統(tǒng)吞吐量。3.擁有資源:不論是傳統(tǒng)的操作系統(tǒng),還是設(shè)有線程的操作系統(tǒng),進(jìn)程都是擁有資源的一個(gè)獨(dú)立單位,它可以擁有自己的資源。4.系統(tǒng)開(kāi)銷(xiāo):由于在創(chuàng)建或撤消進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等。因此,操作系統(tǒng)所付出的開(kāi)銷(xiāo)將明顯地大于在創(chuàng)建或撤消線程時(shí)的開(kāi)銷(xiāo)。352.6.1線程的基本概念

4、線程的狀態(tài)(1)狀態(tài)參數(shù)。在OS中的每一個(gè)線程都可以利用線程標(biāo)識(shí)符和一組狀態(tài)參數(shù)進(jìn)行描述。狀態(tài)參數(shù)通常有這樣幾項(xiàng):①寄存器狀態(tài),它包括程序計(jì)數(shù)器PC和堆棧指針中的內(nèi)容;②堆棧,在堆棧中通常保存有局部變量和返回地址;③線程運(yùn)行狀態(tài),用于描述線程正處于何種運(yùn)行狀態(tài);④優(yōu)先級(jí),描述線程執(zhí)行的優(yōu)先程度;⑤線程專(zhuān)有存儲(chǔ)器,用于保存線程自己的局部變量拷貝;⑥信號(hào)屏蔽,即對(duì)某些信號(hào)加以屏蔽。362.6.1線程的基本概念

(2)線程運(yùn)行狀態(tài)。如同傳統(tǒng)的進(jìn)程一樣,在各線程之間也存在著共享資源和相互合作的制約關(guān)系,致使線程在運(yùn)行時(shí)也具有間斷性。相應(yīng)地,線程在運(yùn)行時(shí),也具有下述三種基本狀態(tài):①執(zhí)行狀態(tài),表示線程正獲得處理機(jī)而運(yùn)行;②就緒狀態(tài),指線程已具備了各種執(zhí)行條件,一旦獲得CPU便可執(zhí)行的狀態(tài);③阻塞狀態(tài),指線程在執(zhí)行中因某事件而受阻,處于暫停執(zhí)行時(shí)的狀態(tài)。372.6.1線程的基本概念

5、線程的創(chuàng)建和終止在多線程O(píng)S環(huán)境下,應(yīng)用程序在啟動(dòng)時(shí),通常僅有一個(gè)線程在執(zhí)行,該線程被人們稱(chēng)為“初始化線程”。它可根據(jù)需要再去創(chuàng)建若干個(gè)線程。在創(chuàng)建新線程時(shí),需要利用一個(gè)線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用),并提供相應(yīng)的參數(shù),如指向線程主程序的入口指針、堆棧的大小,以及用于調(diào)度的優(yōu)先級(jí)等。在線程創(chuàng)建函數(shù)執(zhí)行完后,將返回一個(gè)線程標(biāo)識(shí)符供以后使用。終止線程的方式有兩種:一種是在線程完成了自己的工作后自愿退出;另一種是線程在運(yùn)行中出現(xiàn)錯(cuò)誤或由于某種原因而被其它線程強(qiáng)行終止。382.6.1線程的基本概念6、多線程O(píng)S中的進(jìn)程在多線程O(píng)S中,進(jìn)程是作為擁有系統(tǒng)資源的基本單位,通常的進(jìn)程都包含多個(gè)線程并為它們提供資源,但此時(shí)的進(jìn)程就不再作為一個(gè)執(zhí)行的實(shí)體。多線程O(píng)S中的進(jìn)程有以下屬性:(1)作為系統(tǒng)資源分配的單位。(2)可包括多個(gè)線程。(3)進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。392.6.1線程的基本概念(1)作為系統(tǒng)資源分配的單位。在多線程O(píng)S中,仍是將進(jìn)程作為系統(tǒng)資源分配的基本單位,在任一進(jìn)程中所擁有的資源包括受到分別保護(hù)的用戶(hù)地址空間、用于實(shí)現(xiàn)進(jìn)程間和線程間同步和通信的機(jī)制、已打開(kāi)的文件和已申請(qǐng)到的I/O設(shè)備,以及一張由核心進(jìn)程維護(hù)的地址映射表,該表用于實(shí)現(xiàn)用戶(hù)程序的邏輯地址到其內(nèi)存物理地址的映射。402.6.1線程的基本概念(2)可包括多個(gè)線程。通常,一個(gè)進(jìn)程都含有多個(gè)相對(duì)獨(dú)立的線程,其數(shù)目可多可少,但至少也要有一個(gè)線程,由進(jìn)程為這些(個(gè))線程提供資源及運(yùn)行環(huán)境,使這些線程可并發(fā)執(zhí)行。在OS中的所有線程都只能屬于某一個(gè)特定進(jìn)程。(3)進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。在多線程O(píng)S中,是把線程作為獨(dú)立運(yùn)行的基本單位,所以此時(shí)的進(jìn)程已不再是一個(gè)可執(zhí)行的實(shí)體。雖然如此,進(jìn)程仍具有與執(zhí)行相關(guān)的狀態(tài)。例如,所謂進(jìn)程處于“執(zhí)行”狀態(tài),實(shí)際上是指該進(jìn)程中的某線程正在執(zhí)行。此外,對(duì)進(jìn)程所施加的與進(jìn)程狀態(tài)有關(guān)的操作,也對(duì)其線程起作用。例如,在把某個(gè)進(jìn)程掛起時(shí),該進(jìn)程中的所有線程也都將被掛起;又如,在把某進(jìn)程激活時(shí),屬于該進(jìn)程的所有線程也都將被激活。412.6.2線程間的同步和通信

1.互斥鎖(mutex)互斥鎖是一種比較簡(jiǎn)單的、用于實(shí)現(xiàn)線程間對(duì)資源互斥訪問(wèn)的機(jī)制。由于操作互斥鎖的時(shí)間和空間開(kāi)鎖都較低,因而較適合于高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段?;コ怄i可以有兩種狀態(tài),即開(kāi)鎖(unlock)和關(guān)鎖(lock)狀態(tài)。相應(yīng)地,可用兩條命令(函數(shù))對(duì)互斥鎖進(jìn)行操作。其中的關(guān)鎖lock操作用于將mutex關(guān)上,開(kāi)鎖操作unlock則用于打開(kāi)mutex。422.6.2線程間的同步和通信2.條件變量每一個(gè)條件變量通常都與一個(gè)互斥鎖一起使用,亦即,在創(chuàng)建一個(gè)互斥鎖時(shí)便聯(lián)系著一個(gè)條件變量。單純的互斥鎖用于短期鎖定,主要是用來(lái)保證對(duì)臨界區(qū)的互斥進(jìn)入。而條件變量則用于線程的長(zhǎng)期等待,直至所等待的資源成為可用的。線程首先對(duì)mutex執(zhí)行關(guān)鎖操作,若成功便進(jìn)入臨界區(qū),然后查找用于描述資源狀態(tài)的數(shù)據(jù)結(jié)構(gòu),以了解資源的情況。只要發(fā)現(xiàn)所需資源R正處于忙碌狀態(tài),線程便轉(zhuǎn)為等待狀態(tài),并對(duì)mutex執(zhí)行開(kāi)鎖操作后,等待該資源被釋放;若資源處于空閑狀態(tài),表明線程可以使用該資源,于是將該資源設(shè)置為忙碌狀態(tài),再對(duì)mutex執(zhí)行開(kāi)鎖操作。43

LockmutexLockmutexcheckdatastructures; markresourceasfree;while(resourcebusy); unlockmutex;wait(conditionvariable); wakeup(conditionvariable);markresourceasbusy;unlockmutex;2.6.2線程間的同步和通信下面給出了對(duì)上述資源的申請(qǐng)(左半部分)和釋放(右半部分)操作的描述。442.6.2線程間的同步和通信3.信號(hào)量機(jī)制(1)私用信號(hào)量(privatesamephore)。當(dāng)某線程需利用信號(hào)量來(lái)實(shí)現(xiàn)同一進(jìn)程中各線程之間的同步時(shí),可調(diào)用創(chuàng)建信號(hào)量的命令來(lái)創(chuàng)建一私用信號(hào)量,其數(shù)據(jù)結(jié)構(gòu)是存放在應(yīng)用程序的地址空間中。私用信號(hào)量屬于特定的進(jìn)程所有,OS并不知道私用信號(hào)量的存在,因此,一旦發(fā)生私用信號(hào)量的占用者異常結(jié)束或正常結(jié)束,但并未釋放該信號(hào)量所占有空間的情況時(shí),系統(tǒng)將無(wú)法使它恢復(fù)為0(空),也不能將它傳送給下一個(gè)請(qǐng)求它的線程。452.6.2線程間的同步和通信(2)公用信號(hào)量(publicsemaphort)。公用信號(hào)量是為實(shí)現(xiàn)不同進(jìn)程間或不同進(jìn)程中各線程之間的同步而設(shè)置的。由于它有著一個(gè)公開(kāi)的名字供所有的進(jìn)程使用,故而把它稱(chēng)為公用信號(hào)量。其數(shù)據(jù)結(jié)構(gòu)是存放在受保護(hù)的系統(tǒng)存儲(chǔ)區(qū)中,由OS為它分配空間并進(jìn)行管理,故也稱(chēng)為系統(tǒng)信號(hào)量。如果信號(hào)量的占有者在結(jié)束時(shí)未釋放該公用信號(hào)量,則OS會(huì)自動(dòng)將該信號(hào)量空間回收,并通知下一進(jìn)程。可見(jiàn),公用信號(hào)量是一種比較安全的同步機(jī)制。462.6.3線程的實(shí)現(xiàn)方式1.內(nèi)核支持線程這里所謂的內(nèi)核支持線程,也都同樣是在內(nèi)核的支持下運(yùn)行的,即無(wú)論是用戶(hù)進(jìn)程中的線程,還是系統(tǒng)進(jìn)程中的線程,他們的創(chuàng)建、撤消和切換等,也是依靠?jī)?nèi)核實(shí)現(xiàn)的。此外,在內(nèi)核空間還為每一個(gè)內(nèi)核支持線程設(shè)置了一個(gè)線程控制塊,內(nèi)核是根據(jù)該控制塊而感知某線程的存在的,并對(duì)其加以控制。472.6.3線程的實(shí)現(xiàn)方式2.用戶(hù)級(jí)線程用戶(hù)級(jí)線程僅存在于用戶(hù)空間中。對(duì)于這種線程的創(chuàng)建、撤消、線程之間的同步與通信等功能,都無(wú)須利用系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)。對(duì)于用戶(hù)級(jí)線程的切換,通常是發(fā)生在一個(gè)應(yīng)用進(jìn)程的諸多線程之間,這時(shí),也同樣無(wú)須內(nèi)核的支持。由于切換的規(guī)則遠(yuǎn)比進(jìn)程調(diào)度和切換的規(guī)則簡(jiǎn)單,因而使線程的切換速度特別快??梢?jiàn),這種線程是與內(nèi)核無(wú)關(guān)的。482.6.4線程的實(shí)現(xiàn)1.內(nèi)核支持線程的實(shí)現(xiàn)在僅設(shè)置了內(nèi)核支持線程的OS中,一種可能的線程控制方法是,系統(tǒng)在創(chuàng)建一個(gè)新進(jìn)程時(shí),便為它分配一個(gè)任務(wù)數(shù)據(jù)區(qū)PTDA(PerTaskDataArea),其中包括若干個(gè)線程控制塊TCB空間,如圖2-13所示。在每一個(gè)TCB中可保存線程標(biāo)識(shí)符、優(yōu)先級(jí)、線程運(yùn)行的CPU狀態(tài)等信息。雖然這些信息與用戶(hù)級(jí)線程TCB中的信息相同,但現(xiàn)在卻是被保存在內(nèi)核空間中。491.內(nèi)核支持線程的實(shí)現(xiàn)圖2-13任務(wù)數(shù)據(jù)區(qū)空間PTDA進(jìn)程資源TCB#1TCB#2TCB#32.6.4線程的實(shí)現(xiàn)502.6.4線程的實(shí)現(xiàn)每當(dāng)進(jìn)程要?jiǎng)?chuàng)建一個(gè)線程時(shí),便為新線程分配一個(gè)TCB,將有關(guān)信息填入該TCB中,并為之分配必要的資源,如為線程分配數(shù)百至數(shù)千個(gè)字節(jié)的??臻g和局部存儲(chǔ)區(qū),于是新創(chuàng)建的線程便有條件立即執(zhí)行。當(dāng)PTDA中的所有TCB空間已用完,而進(jìn)程又要?jiǎng)?chuàng)建新的線程時(shí),只要其所創(chuàng)建的線程數(shù)目未超過(guò)系統(tǒng)的允許值(通常為數(shù)十至數(shù)百個(gè)),系統(tǒng)可再為之分配新的TCB空間;在撤消一個(gè)線程時(shí),也應(yīng)回收該線程的所有資源和TCB??梢?jiàn),內(nèi)核支持線程的創(chuàng)建、撤消均與進(jìn)程的相類(lèi)似。在有的系統(tǒng)中為了減少創(chuàng)建和撤消一個(gè)線程時(shí)的開(kāi)銷(xiāo),在撤消一個(gè)線程時(shí),并不立即回收該線程的資源和TCB,當(dāng)以后再要?jiǎng)?chuàng)建一個(gè)新線程時(shí),便可直接利用已被撤消但仍保持有資源和TCB的線程作為新線程。512.6.4線程的實(shí)現(xiàn)2.用戶(hù)級(jí)線程的實(shí)現(xiàn)1)運(yùn)行時(shí)系統(tǒng)(RuntimeSystem)所謂“運(yùn)行時(shí)系統(tǒng)”,實(shí)質(zhì)上是用于管理和控制線程的函數(shù)(過(guò)程)的集合,其中包括用于創(chuàng)建和撤消線程的函數(shù)、線程同步和通信的函數(shù)以及實(shí)現(xiàn)線程調(diào)度的函數(shù)等。正因?yàn)橛羞@些函數(shù),才能使用戶(hù)級(jí)線程與內(nèi)核無(wú)關(guān)。運(yùn)行時(shí)系統(tǒng)中的所有函數(shù)都駐留在用戶(hù)空間,并作為用戶(hù)級(jí)線程與內(nèi)核之間的接口。522.6.4線程的實(shí)現(xiàn)在傳統(tǒng)的OS中,進(jìn)程在切換時(shí)必須先由用戶(hù)態(tài)轉(zhuǎn)為核心態(tài),再由核心來(lái)執(zhí)行切換任務(wù);而用戶(hù)級(jí)線程在切換時(shí)則不需轉(zhuǎn)入核心態(tài),而是由運(yùn)行時(shí)系統(tǒng)中的線程切換過(guò)程來(lái)執(zhí)行切換任務(wù)。該過(guò)程將線程的CPU狀態(tài)保存在該線程的堆棧中,然后按照一定的算法選擇一個(gè)處于就緒狀態(tài)的新線程運(yùn)行,將新線程堆棧中的CPU狀態(tài)裝入到CPU相應(yīng)的寄存器中,一旦將棧指針和程序計(jì)數(shù)器切換后,便開(kāi)始了新線程的運(yùn)行。由于用戶(hù)級(jí)線程的切換無(wú)需進(jìn)入內(nèi)核,且切換操作簡(jiǎn)單,因而使用戶(hù)級(jí)線程的切換速度非???。不論在傳統(tǒng)的OS中,還是在多線程O(píng)S中,系統(tǒng)資源都是由內(nèi)核管理的。在傳統(tǒng)的OS中,進(jìn)程是利用OS提供的系統(tǒng)調(diào)用來(lái)請(qǐng)求系統(tǒng)資源的,系統(tǒng)調(diào)用通過(guò)軟中斷(如trap)機(jī)制進(jìn)入OS內(nèi)核,由內(nèi)核來(lái)完成相應(yīng)資源的分配。用戶(hù)級(jí)線程是不能利用系統(tǒng)調(diào)用的。當(dāng)線程需要系統(tǒng)資源時(shí),是將該要求傳送給運(yùn)行時(shí)系統(tǒng),由后者通過(guò)相應(yīng)的系統(tǒng)調(diào)用來(lái)獲得系統(tǒng)資源的。532.6.4線程的實(shí)現(xiàn)2)內(nèi)核控制線程這種線程又稱(chēng)為輕型進(jìn)程LWP(LightWeightProcess)。每一個(gè)進(jìn)程都可擁有多個(gè)LWP,同用戶(hù)級(jí)線程一樣,每個(gè)LWP都有自己的數(shù)據(jù)結(jié)構(gòu)(如TCB),其中包括線程標(biāo)識(shí)符、優(yōu)先級(jí)、狀態(tài),另外還有棧和局部存儲(chǔ)區(qū)等。它們也可以共享進(jìn)程所擁有的資源。LWP可通過(guò)系統(tǒng)調(diào)用來(lái)獲得內(nèi)核提供的服務(wù),這樣,當(dāng)一個(gè)用戶(hù)級(jí)線程運(yùn)行時(shí),只要將它連接到一個(gè)LWP上,此時(shí)它便具有了內(nèi)核支持線程的所有屬性。542.6.4線程的實(shí)現(xiàn)在一個(gè)系統(tǒng)中的用戶(hù)級(jí)線程數(shù)量可能很大,為了節(jié)省系統(tǒng)開(kāi)銷(xiāo),不可能設(shè)置太多的LWP,而把這些LWP做成一個(gè)緩沖池,稱(chēng)為“線程池”。用戶(hù)進(jìn)程中的任一用戶(hù)線程都可以連接到LWP池中的任何一個(gè)LWP上。為使每一用戶(hù)級(jí)線程都能利用LWP與內(nèi)核通信,可以使多個(gè)用戶(hù)級(jí)線程多路復(fù)用一個(gè)LWP,但只有當(dāng)前連接到LWP上的線程才能與內(nèi)核通信,其余進(jìn)程或者阻塞,或者等待LWP。而每一個(gè)LWP都要連接到一個(gè)內(nèi)核級(jí)線程上,這樣,通過(guò)LWP可把用戶(hù)級(jí)線程與內(nèi)核線程連接起來(lái),用戶(hù)級(jí)線程可通過(guò)LWP來(lái)訪問(wèn)內(nèi)核,但內(nèi)核所看到的總是多個(gè)LWP而看不到用戶(hù)級(jí)線程。亦即,由LWP實(shí)現(xiàn)了在內(nèi)核與用戶(hù)級(jí)線程之間的隔離,從而使用戶(hù)級(jí)線程與內(nèi)核無(wú)關(guān)。圖2-14示出了利用輕型進(jìn)程作為中間系統(tǒng)時(shí)用戶(hù)級(jí)線程的實(shí)現(xiàn)方法。55圖2-14利用輕型進(jìn)程作為中間系統(tǒng)2.6.4線程的實(shí)現(xiàn)56作業(yè)修訂版:P685、6、22、24、27第三版:P

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論