




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 進(jìn)程進(jìn)程典型的典型的os中用于進(jìn)程管理的數(shù)中用于進(jìn)程管理的數(shù)據(jù)結(jié)構(gòu)和技術(shù)據(jù)結(jié)構(gòu)和技術(shù)4.0.1 程序的程序的順序執(zhí)行順序執(zhí)行和和并發(fā)執(zhí)行并發(fā)執(zhí)行(1)u程序的順序執(zhí)行:程序的順序執(zhí)行:具有獨立功能的程序具有獨立功能的程序獨占獨占cpu直至得到直至得到最終結(jié)果的過程最終結(jié)果的過程u 順序環(huán)境:順序環(huán)境: 計算機(jī)系統(tǒng)中計算機(jī)系統(tǒng)中 只有一個程序在運行只有一個程序在運行 該程序獨占系統(tǒng)中所有資源該程序獨占系統(tǒng)中所有資源 其執(zhí)行不受外界影響其執(zhí)行不受外界影響u現(xiàn)在的操作系統(tǒng)多為現(xiàn)在的操作系統(tǒng)多為并發(fā)執(zhí)行并發(fā)執(zhí)行,具有許多新的特征。引入,具有許多新的特征。引入并發(fā)執(zhí)行的目的是為了提高并發(fā)執(zhí)行
2、的目的是為了提高資源利用率資源利用率。4.0.1 程序的程序的順序執(zhí)行順序執(zhí)行和和并發(fā)執(zhí)行并發(fā)執(zhí)行(1)u順序執(zhí)行的特征順序執(zhí)行的特征u順序性順序性:按照程序結(jié)構(gòu)所指定的次序(可能有分支或循環(huán)):按照程序結(jié)構(gòu)所指定的次序(可能有分支或循環(huán))u封閉性封閉性:獨占全部資源,計算機(jī)的狀態(tài)只由于該程序的控制:獨占全部資源,計算機(jī)的狀態(tài)只由于該程序的控制邏輯所決定邏輯所決定,不受外界影響。不受外界影響。u可再現(xiàn)性可再現(xiàn)性:初始條件相同則結(jié)果相同。如:可通過空指令控:初始條件相同則結(jié)果相同。如:可通過空指令控制時間關(guān)系。制時間關(guān)系。(程序執(zhí)行結(jié)果的確定性,程序運行結(jié)果與程序執(zhí)行程序執(zhí)行結(jié)果的確定性,程序運
3、行結(jié)果與程序執(zhí)行速度無關(guān),只要初始狀態(tài)相同,結(jié)果應(yīng)相同速度無關(guān),只要初始狀態(tài)相同,結(jié)果應(yīng)相同)u現(xiàn)在的操作系統(tǒng)多為現(xiàn)在的操作系統(tǒng)多為并發(fā)執(zhí)行并發(fā)執(zhí)行,具有許多新的特征。引入,具有許多新的特征。引入并發(fā)執(zhí)行的目的是為了提高并發(fā)執(zhí)行的目的是為了提高資源利用率資源利用率。4.0.1 程序的程序的順序執(zhí)行順序執(zhí)行和和并發(fā)執(zhí)行并發(fā)執(zhí)行(2)u程序的并發(fā)執(zhí)行程序的并發(fā)執(zhí)行:指一組在邏輯上互相獨立的程序或程序段指一組在邏輯上互相獨立的程序或程序段在在執(zhí)行時間上客觀上互相重疊執(zhí)行時間上客觀上互相重疊,即一個程序或程序段的執(zhí),即一個程序或程序段的執(zhí)行尚未結(jié)束,另一個程序(段)的執(zhí)行已經(jīng)開始的方式。行尚未結(jié)束,另
4、一個程序(段)的執(zhí)行已經(jīng)開始的方式。u 并發(fā)執(zhí)行的并發(fā)執(zhí)行的特征特征u 間斷間斷(異步異步)性:性:“走走停停走走停停”,一個程序可能走到中途,一個程序可能走到中途停下來,失去原有的時序關(guān)系;停下來,失去原有的時序關(guān)系;u 失去封閉性:失去封閉性:共享資源,受其他程序的控制邏輯的影響共享資源,受其他程序的控制邏輯的影響。如:一個程序?qū)懙酱鎯ζ髦械臄?shù)據(jù)可能被另一個程序。如:一個程序?qū)懙酱鎯ζ髦械臄?shù)據(jù)可能被另一個程序修改,失去原有的不變特征。修改,失去原有的不變特征。u 失去可再現(xiàn)性:失去可再現(xiàn)性:失去封閉性失去封閉性 失去可再現(xiàn)性;外界環(huán)失去可再現(xiàn)性;外界環(huán)境在程序的兩次執(zhí)行期間發(fā)生變化,失去原
5、有的可重復(fù)境在程序的兩次執(zhí)行期間發(fā)生變化,失去原有的可重復(fù)特征。特征。并發(fā)程序執(zhí)行的結(jié)果與其執(zhí)行的相對速度有關(guān),并發(fā)程序執(zhí)行的結(jié)果與其執(zhí)行的相對速度有關(guān),是不確定的。是不確定的。u資源共享資源共享 系統(tǒng)中資源被多個程序使用系統(tǒng)中資源被多個程序使用u獨立性和制約性獨立性和制約性獨立的相對速度、起始時間獨立的相對速度、起始時間 程序之間可相互作用(相互制約)程序之間可相互作用(相互制約) 可分為直接作用和間接作用可分為直接作用和間接作用u程序和計算不再一一對應(yīng)程序和計算不再一一對應(yīng) (計算:一個程序的執(zhí)行)(計算:一個程序的執(zhí)行)并發(fā)程序并發(fā)程序并發(fā)程序并發(fā)程序并發(fā)環(huán)境:并發(fā)環(huán)境: 一定時間內(nèi),物
6、理機(jī)器上有兩個或兩個以上的程序一定時間內(nèi),物理機(jī)器上有兩個或兩個以上的程序同時同時處于開始運行但尚未結(jié)束的狀態(tài)處于開始運行但尚未結(jié)束的狀態(tài),并且,并且次序不是事先確次序不是事先確定的定的baabbaab引入并發(fā)的目的:引入并發(fā)的目的: 為了提高資源利用率,從而為了提高資源利用率,從而提高系統(tǒng)效率提高系統(tǒng)效率 t(s) t(s)cpu dev1 dev2 cpu cpua1015203040 dev2cpudev 1 dev2 cpu b1020304025并發(fā)程序并發(fā)程序在順序環(huán)境下,在順序環(huán)境下,a先執(zhí)行,先執(zhí)行,b再執(zhí)行再執(zhí)行 cpu利用率利用率= 40/80 = 50% dev1利用率利
7、用率= 15/80 =18.75% dev2利用率利用率= 25/80 =31.25% t(s) t(s)cpu dev1 dev2 cpu cpua1015203040 dev2cpudev 1 dev2 cpu b1020304025并發(fā)程序并發(fā)程序在并發(fā)環(huán)境下在并發(fā)環(huán)境下 cpucpu利用率利用率 = 89%= 89%dev1dev1并發(fā)環(huán)境下利用率并發(fā)環(huán)境下利用率= 33%= 33%dev2dev2并發(fā)環(huán)境下利用率并發(fā)環(huán)境下利用率= 66%= 66%并發(fā)程序(并發(fā)程序(3/a ab bcpucpudev1dev1dev2dev2cpucpucpucpu10101515202030304
8、040 t(s) t(s)2525dev1dev1cpucpu35354545dev2dev2cpucpudev2dev2 t(s) t(s)cpu dev1 dev2 cpu cpua1015203040 dev2cpudev 1 dev2 cpu b10203040254.1 進(jìn)程進(jìn)程-定義和特征定義和特征(1)u進(jìn)程描述了程序的進(jìn)程描述了程序的動態(tài)執(zhí)行動態(tài)執(zhí)行過程;過程;u它對應(yīng)虛擬處理機(jī)、虛擬存儲器和虛擬外設(shè)等它對應(yīng)虛擬處理機(jī)、虛擬存儲器和虛擬外設(shè)等資源的分資源的分配和回收配和回收;u反映系統(tǒng)中程序執(zhí)行的并發(fā)性、隨機(jī)性和資源共享反映系統(tǒng)中程序執(zhí)行的并發(fā)性、隨機(jī)性和資源共享u多進(jìn)程,提高
9、了對硬件資源的多進(jìn)程,提高了對硬件資源的利用率利用率,但又帶來額外的,但又帶來額外的空間和時間開銷空間和時間開銷,增加了,增加了os 的復(fù)雜性的復(fù)雜性;一個具有一定獨立功能的一個具有一定獨立功能的程序程序在一個在一個數(shù)據(jù)集合上數(shù)據(jù)集合上的一次的一次動態(tài)執(zhí)行動態(tài)執(zhí)行過程。簡言之,過程。簡言之,進(jìn)程是程序的一次執(zhí)行活動進(jìn)程是程序的一次執(zhí)行活動。4.1 進(jìn)程進(jìn)程-定義和特征定義和特征(2)u動態(tài)性:動態(tài)性:u進(jìn)程對應(yīng)進(jìn)程對應(yīng)程序的執(zhí)行程序的執(zhí)行u進(jìn)程是進(jìn)程是動態(tài)產(chǎn)生,動態(tài)消亡動態(tài)產(chǎn)生,動態(tài)消亡的的u進(jìn)程在其生命周期內(nèi),進(jìn)程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換在三種基本狀態(tài)之間轉(zhuǎn)換u獨立性:獨立性:
10、各進(jìn)程的各進(jìn)程的地址空間相互獨立地址空間相互獨立,除非采用進(jìn)程間,除非采用進(jìn)程間通信手段;通信手段;u并發(fā)性:并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起向前推進(jìn)任何進(jìn)程都可以同其他進(jìn)程一起向前推進(jìn)u異步性:異步性:每個進(jìn)程都以其相對獨立的不可預(yù)知的速度向每個進(jìn)程都以其相對獨立的不可預(yù)知的速度向前推進(jìn)前推進(jìn)u結(jié)構(gòu)化:結(jié)構(gòu)化:進(jìn)程進(jìn)程 = 代碼段代碼段 + 數(shù)據(jù)段數(shù)據(jù)段 + pcb4.1 進(jìn)程進(jìn)程-與程序的區(qū)別與程序的區(qū)別 u進(jìn)程是動態(tài)的,程序是靜態(tài)的:進(jìn)程是動態(tài)的,程序是靜態(tài)的:程序是有序代碼的集程序是有序代碼的集合;通常對應(yīng)著文件、靜態(tài)和可以復(fù)制。進(jìn)程是程序合;通常對應(yīng)著文件、靜態(tài)和可以復(fù)制。進(jìn)程是
11、程序的執(zhí)行。的執(zhí)行。u進(jìn)程是暫時的,程序是永久的:進(jìn)程是暫時的,程序是永久的:進(jìn)程是一個狀態(tài)變化進(jìn)程是一個狀態(tài)變化的過程,程序可長久保存。的過程,程序可長久保存。u進(jìn)程與程序的組成不同:進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序、數(shù)據(jù)進(jìn)程的組成包括程序、數(shù)據(jù)和和pcb(進(jìn)程控制塊進(jìn)程控制塊)。u進(jìn)程與程序的對應(yīng)關(guān)系:進(jìn)程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行,一個程序可通過多次執(zhí)行,一個程序可對應(yīng)多個進(jìn)程;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個對應(yīng)多個進(jìn)程;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個程序。程序。u舉例:舉例:正在運行的正在運行的web瀏覽器是一個進(jìn)程,正在運行的瀏覽器是一個進(jìn)程,正在運行的windows
12、資源管理器是一個進(jìn)程,正在運行的資源管理器是一個進(jìn)程,正在運行的visual c編程環(huán)境也是一個進(jìn)程編程環(huán)境也是一個進(jìn)程4.1 進(jìn)程進(jìn)程并發(fā)示例并發(fā)示例u3個進(jìn)程并個進(jìn)程并發(fā)執(zhí)行的圖發(fā)執(zhí)行的圖示示單進(jìn)程的軌跡單進(jìn)程的軌跡3進(jìn)程進(jìn)程并發(fā)執(zhí)行并發(fā)執(zhí)行的軌跡:理解的軌跡:理解處理器的行為處理器的行為,如何在三個,如何在三個進(jìn)程間交替執(zhí)進(jìn)程間交替執(zhí)行行abcdispatcherdispatcherdispatcheraci/o請求4.2、進(jìn)程狀態(tài)、進(jìn)程狀態(tài)4.2、進(jìn)程狀態(tài)、進(jìn)程狀態(tài)五狀態(tài)模型五狀態(tài)模型u就緒態(tài)(就緒態(tài)(ready) :一個進(jìn)程已經(jīng)具備運行條件,但:一個進(jìn)程已經(jīng)具備運行條件,但由于無由于
13、無cpu暫時不能運行的狀態(tài),當(dāng)調(diào)度給其暫時不能運行的狀態(tài),當(dāng)調(diào)度給其cpu時時,立即可以運行。位于,立即可以運行。位于“就緒隊列就緒隊列”中中u執(zhí)行態(tài)(執(zhí)行態(tài)(running) :進(jìn)程占有了包括:進(jìn)程占有了包括cpu在內(nèi)的全在內(nèi)的全部資源,并在部資源,并在cpu上運行上運行u等待態(tài)等待態(tài)(阻塞態(tài))(阻塞態(tài))(waiting,blocked) :指進(jìn)程因等:指進(jìn)程因等待某種事件的發(fā)生而暫時不能運行的狀態(tài)(即使待某種事件的發(fā)生而暫時不能運行的狀態(tài)(即使cpu空閑,該進(jìn)程也不可運行)。位于空閑,該進(jìn)程也不可運行)。位于“等待隊列等待隊列”中。中。u新建狀態(tài)新建狀態(tài)(new):剛剛創(chuàng)建的進(jìn)程,輔存中。
14、剛剛創(chuàng)建的進(jìn)程,輔存中。u終止(退出狀態(tài),終止(退出狀態(tài),exit):終止后進(jìn)程移入該狀態(tài),它終止后進(jìn)程移入該狀態(tài),它不再有執(zhí)行資格不再有執(zhí)行資格4.2、進(jìn)程狀態(tài)、進(jìn)程狀態(tài)new和和exit進(jìn)一步理解進(jìn)一步理解u新建新建( 新新new)狀態(tài):狀態(tài):uos 已完成為創(chuàng)建一進(jìn)程所必要的工作已完成為創(chuàng)建一進(jìn)程所必要的工作u已構(gòu)造了進(jìn)程標(biāo)識符已構(gòu)造了進(jìn)程標(biāo)識符u已創(chuàng)建了管理進(jìn)程所需的表格已創(chuàng)建了管理進(jìn)程所需的表格u但還沒有允許執(zhí)行該進(jìn)程但還沒有允許執(zhí)行該進(jìn)程 (尚未同意尚未同意)u 因為資源(如主存或性能原因)有限,因為資源(如主存或性能原因)有限,os所需的關(guān)于該進(jìn)程的所需的關(guān)于該進(jìn)程的信息保存在主
15、存中的進(jìn)程表中,但進(jìn)程自身還未進(jìn)入主存,也沒信息保存在主存中的進(jìn)程表中,但進(jìn)程自身還未進(jìn)入主存,也沒有為與這個程序相關(guān)的數(shù)據(jù)分配空間,程序保留在輔存中。有為與這個程序相關(guān)的數(shù)據(jù)分配空間,程序保留在輔存中。u如:如:在批處理系統(tǒng)中,提交新作業(yè);為新登錄用戶創(chuàng)建進(jìn)程;為在批處理系統(tǒng)中,提交新作業(yè);為新登錄用戶創(chuàng)建進(jìn)程;為請求打印的進(jìn)程創(chuàng)建打印進(jìn)程,請求進(jìn)程可以繼續(xù)處理其它事情請求打印的進(jìn)程創(chuàng)建打印進(jìn)程,請求進(jìn)程可以繼續(xù)處理其它事情u退出狀態(tài)退出狀態(tài)(exit):(exit):終止后進(jìn)程移入該狀態(tài)終止后進(jìn)程移入該狀態(tài)u它不再有執(zhí)行資格它不再有執(zhí)行資格u表格和其它信息暫時由輔助程序保留表格和其它信息暫
16、時由輔助程序保留u例子例子: : 為處理用戶帳單而累計資源使用情況的財務(wù)程序為處理用戶帳單而累計資源使用情況的財務(wù)程序?qū)е聦?dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型(1)u狀態(tài)轉(zhuǎn)換:狀態(tài)轉(zhuǎn)換:在進(jìn)程運行過程中,由于進(jìn)程自身進(jìn)展情況及在進(jìn)程運行過程中,由于進(jìn)程自身進(jìn)展情況及外界環(huán)境的變化,這三種基本狀態(tài)可以依據(jù)一定的條件相外界環(huán)境的變化,這三種基本狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換互轉(zhuǎn)換u 導(dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型導(dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型unull null 新建:新建:創(chuàng)建執(zhí)行一個程序的新進(jìn)程創(chuàng)建執(zhí)行一個程序的新進(jìn)程u新建新建 就緒:就緒:osos準(zhǔn)備好了接納一個進(jìn)程,進(jìn)程進(jìn)入內(nèi)存準(zhǔn)備好
17、了接納一個進(jìn)程,進(jìn)程進(jìn)入內(nèi)存u就緒就緒 運行:運行:osos調(diào)度程序選擇一個新的進(jìn)程運行(占據(jù)調(diào)度程序選擇一個新的進(jìn)程運行(占據(jù)cpucpu)u運行運行 就緒:就緒:u運行進(jìn)程用完了時間片運行進(jìn)程用完了時間片u運行進(jìn)程被中斷(剝奪),因為一高優(yōu)先級進(jìn)程處于就緒狀態(tài)運行進(jìn)程被中斷(剝奪),因為一高優(yōu)先級進(jìn)程處于就緒狀態(tài)u運行運行阻塞:阻塞:當(dāng)一進(jìn)程等待某一事件的發(fā)生時,如當(dāng)一進(jìn)程等待某一事件的發(fā)生時,如uosos尚未完成系統(tǒng)服務(wù)調(diào)用尚未完成系統(tǒng)服務(wù)調(diào)用u對一資源的訪問尚不能進(jìn)行對一資源的訪問尚不能進(jìn)行u初始化初始化i/o i/o 且必須等待結(jié)果且必須等待結(jié)果u等待某一進(jìn)程提供輸入等待某一進(jìn)程提供
18、輸入 (ipc)(ipc)導(dǎo)致導(dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型(2)u導(dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型(續(xù))導(dǎo)致進(jìn)程狀態(tài)轉(zhuǎn)換的事件類型(續(xù))u阻塞阻塞就緒:就緒:當(dāng)進(jìn)程所等待的事件發(fā)生時當(dāng)進(jìn)程所等待的事件發(fā)生時u就緒就緒退出:退出:父進(jìn)程可以中止一個子進(jìn)程;如果一個父父進(jìn)程可以中止一個子進(jìn)程;如果一個父進(jìn)程終止,與該父進(jìn)程相關(guān)的所有子進(jìn)程都被終止。進(jìn)程終止,與該父進(jìn)程相關(guān)的所有子進(jìn)程都被終止。u阻塞阻塞退出:退出:父進(jìn)程可以中止一個子進(jìn)程父進(jìn)程可以中止一個子進(jìn)程u隊列隊列u單阻塞隊列:單阻塞隊列:所有阻塞進(jìn)程都在一個隊列中所有阻塞進(jìn)程都在一個隊列中u缺點:等待事件發(fā)生時,掃描整個隊列
19、,時間長缺點:等待事件發(fā)生時,掃描整個隊列,時間長u多阻塞隊列:多阻塞隊列:每個事件對應(yīng)一個阻塞隊列每個事件對應(yīng)一個阻塞隊列,當(dāng)事件發(fā)生,當(dāng)事件發(fā)生時,相應(yīng)隊列中的所有進(jìn)程都轉(zhuǎn)換到就緒隊列時,相應(yīng)隊列中的所有進(jìn)程都轉(zhuǎn)換到就緒隊列u多就緒隊列:多就緒隊列:按照按照優(yōu)先級優(yōu)先級方案分配進(jìn)程,維護(hù)多個就緒方案分配進(jìn)程,維護(hù)多個就緒隊列,每個優(yōu)先級一個隊列,隊列,每個優(yōu)先級一個隊列,os可以容易地確定哪個可以容易地確定哪個就緒進(jìn)程具有最高的優(yōu)先級且等待時間最長。就緒進(jìn)程具有最高的優(yōu)先級且等待時間最長。4.2、進(jìn)程狀態(tài)、進(jìn)程狀態(tài)交換與掛起狀態(tài)交換與掛起狀態(tài)u交換的引入交換的引入(swapping)u沒有
20、使用虛存的系統(tǒng)沒有使用虛存的系統(tǒng), 多個進(jìn)程須完全進(jìn)入主存多個進(jìn)程須完全進(jìn)入主存ui/o速度比計算速度慢很多速度比計算速度慢很多 u 可能出現(xiàn)主存中的多個進(jìn)程全部阻塞可能出現(xiàn)主存中的多個進(jìn)程全部阻塞,等等i/o u cpu時間浪費時間浪費u其他作業(yè)因沒有主存空間不能投入運行其他作業(yè)因沒有主存空間不能投入運行u交換交換:當(dāng)主存中沒有就緒態(tài)進(jìn)程時當(dāng)主存中沒有就緒態(tài)進(jìn)程時u把主存中某個進(jìn)程的部分或全部移到磁盤掛起操作把主存中某個進(jìn)程的部分或全部移到磁盤掛起操作u進(jìn)入掛起隊列進(jìn)入掛起隊列u負(fù)作用負(fù)作用: 交換是交換是i/o操作,費時間操作,費時間u掛起(掛起(suspend):):把一個進(jìn)程從內(nèi)存轉(zhuǎn)到
21、外存把一個進(jìn)程從內(nèi)存轉(zhuǎn)到外存u激活(激活(activate):):把一個進(jìn)程從外存轉(zhuǎn)到內(nèi)存把一個進(jìn)程從外存轉(zhuǎn)到內(nèi)存單掛起狀態(tài)的轉(zhuǎn)換圖單掛起狀態(tài)的轉(zhuǎn)換圖導(dǎo)致進(jìn)程掛起的原因?qū)е逻M(jìn)程掛起的原因u交換:交換:os需要釋放足夠的內(nèi)存空間,以調(diào)入并執(zhí)行處需要釋放足夠的內(nèi)存空間,以調(diào)入并執(zhí)行處于就緒狀態(tài)的進(jìn)程,以提高處理機(jī)效率;于就緒狀態(tài)的進(jìn)程,以提高處理機(jī)效率;u交互式用戶請求:交互式用戶請求:如調(diào)試系統(tǒng)故障如調(diào)試系統(tǒng)故障,系統(tǒng)有時可能出現(xiàn)系統(tǒng)有時可能出現(xiàn)故障或某些功能受到破壞,這時就需要暫時將系統(tǒng)中故障或某些功能受到破壞,這時就需要暫時將系統(tǒng)中的進(jìn)程掛起,以便系統(tǒng)將故障消除后,再將這些進(jìn)程的進(jìn)程掛起,以
22、便系統(tǒng)將故障消除后,再將這些進(jìn)程恢復(fù)到原來狀態(tài)恢復(fù)到原來狀態(tài)u定時:定時:一個進(jìn)程可能會周期性執(zhí)行(如記帳或監(jiān)視進(jìn)一個進(jìn)程可能會周期性執(zhí)行(如記帳或監(jiān)視進(jìn)程),而且可能在等待下一個時間間隔時被掛起程),而且可能在等待下一個時間間隔時被掛起u父進(jìn)程請求:父進(jìn)程請求:父進(jìn)程掛起后代進(jìn)程,以檢查或修改掛父進(jìn)程掛起后代進(jìn)程,以檢查或修改掛起的進(jìn)程,或者協(xié)調(diào)不同后代進(jìn)程之間的行為起的進(jìn)程,或者協(xié)調(diào)不同后代進(jìn)程之間的行為u其他其他os原因:原因:掛起后臺進(jìn)程或工具程序進(jìn)程等掛起后臺進(jìn)程或工具程序進(jìn)程等u就緒狀態(tài)就緒狀態(tài)(ready):進(jìn)程在內(nèi)存且可立即進(jìn)入運行狀態(tài);進(jìn)程在內(nèi)存且可立即進(jìn)入運行狀態(tài);u阻塞狀
23、態(tài)阻塞狀態(tài)(blocked):進(jìn)程在內(nèi)存,并等待某事件的出現(xiàn);進(jìn)程在內(nèi)存,并等待某事件的出現(xiàn);u阻塞阻塞 / 掛起狀態(tài)(掛起狀態(tài)(blocked, suspend):):進(jìn)程在外存并等待進(jìn)程在外存并等待某事件的出現(xiàn);某事件的出現(xiàn);u就緒就緒 / 掛起狀態(tài)(掛起狀態(tài)(ready, suspend):):進(jìn)程在外存,但只要進(jìn)程在外存,但只要進(jìn)入內(nèi)存,即可運行;進(jìn)入內(nèi)存,即可運行;雙掛起狀態(tài)的轉(zhuǎn)換雙掛起狀態(tài)的轉(zhuǎn)換u進(jìn)程不能立即執(zhí)行進(jìn)程不能立即執(zhí)行u為了阻止進(jìn)程執(zhí)行,可以通過代理將這個進(jìn)程置于掛起狀態(tài),(為了阻止進(jìn)程執(zhí)行,可以通過代理將這個進(jìn)程置于掛起狀態(tài),(自己,父進(jìn)程,自己,父進(jìn)程,os)u除非代
24、理顯示地命令系統(tǒng)進(jìn)行狀態(tài)轉(zhuǎn)換,否則進(jìn)程無法從這個狀除非代理顯示地命令系統(tǒng)進(jìn)行狀態(tài)轉(zhuǎn)換,否則進(jìn)程無法從這個狀態(tài)轉(zhuǎn)移態(tài)轉(zhuǎn)移雙掛起狀態(tài)的轉(zhuǎn)換圖雙掛起狀態(tài)的轉(zhuǎn)換圖具有掛起狀態(tài)的進(jìn)程狀態(tài)轉(zhuǎn)換具有掛起狀態(tài)的進(jìn)程狀態(tài)轉(zhuǎn)換(1)u阻塞阻塞阻塞阻塞/掛起:掛起:沒有進(jìn)程處于沒有進(jìn)程處于就緒狀態(tài)就緒狀態(tài)或就緒進(jìn)或就緒進(jìn)程要求更多內(nèi)存資源時,會進(jìn)行這種轉(zhuǎn)換,以提交新程要求更多內(nèi)存資源時,會進(jìn)行這種轉(zhuǎn)換,以提交新進(jìn)程或運行就緒進(jìn)程;進(jìn)程或運行就緒進(jìn)程;u阻塞阻塞/掛起掛起就緒就緒/掛起:掛起:針對外存進(jìn)程的事件出現(xiàn);針對外存進(jìn)程的事件出現(xiàn);u就緒就緒/掛起掛起就緒:就緒:沒有就緒進(jìn)程沒有就緒進(jìn)程或或就緒掛起進(jìn)程優(yōu)就緒
25、掛起進(jìn)程優(yōu)先級高于就緒進(jìn)程時,會進(jìn)行這種轉(zhuǎn)換;先級高于就緒進(jìn)程時,會進(jìn)行這種轉(zhuǎn)換;u就緒就緒就緒就緒/掛起:掛起:當(dāng)有當(dāng)有高優(yōu)先級阻塞高優(yōu)先級阻塞(系統(tǒng)認(rèn)為它會系統(tǒng)認(rèn)為它會很快就緒的)進(jìn)程和低優(yōu)先級就緒進(jìn)程時,系統(tǒng)會選很快就緒的)進(jìn)程和低優(yōu)先級就緒進(jìn)程時,系統(tǒng)會選擇掛起低優(yōu)先級就緒進(jìn)程;擇掛起低優(yōu)先級就緒進(jìn)程;具有掛起狀態(tài)的進(jìn)程狀態(tài)轉(zhuǎn)換具有掛起狀態(tài)的進(jìn)程狀態(tài)轉(zhuǎn)換(2)u運行運行就緒就緒/掛起:掛起:對搶先式分時系統(tǒng)對搶先式分時系統(tǒng),當(dāng)有當(dāng)有高高優(yōu)先級優(yōu)先級阻塞阻塞/掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起時,系統(tǒng)可能會把運行進(jìn)程轉(zhuǎn)到就緒時,系統(tǒng)可能會把運行進(jìn)程轉(zhuǎn)到就緒/
26、掛起狀態(tài);掛起狀態(tài);u阻塞阻塞/掛起掛起阻塞:阻塞:當(dāng)一個當(dāng)一個進(jìn)程釋放足夠內(nèi)存時進(jìn)程釋放足夠內(nèi)存時,系統(tǒng)會把一個高優(yōu)先級阻塞掛起(系統(tǒng)認(rèn)為會,系統(tǒng)會把一個高優(yōu)先級阻塞掛起(系統(tǒng)認(rèn)為會很快出現(xiàn)所等待的事件)進(jìn)程轉(zhuǎn)為阻塞狀態(tài);很快出現(xiàn)所等待的事件)進(jìn)程轉(zhuǎn)為阻塞狀態(tài);u新建新建就緒就緒/掛起以及新建掛起以及新建就緒:就緒:當(dāng)新建一當(dāng)新建一個新進(jìn)程,進(jìn)入就緒狀態(tài)或就緒個新進(jìn)程,進(jìn)入就緒狀態(tài)或就緒/掛起狀態(tài)。進(jìn)入掛起狀態(tài)。進(jìn)入就緒掛起的原因是系統(tǒng)希望保持一個大的就緒進(jìn)就緒掛起的原因是系統(tǒng)希望保持一個大的就緒進(jìn)程隊列程隊列u9種狀態(tài):種狀態(tài):u用戶模式下運行用戶模式下運行 ; 內(nèi)核模式下運行內(nèi)核模式下運
27、行u在存儲器中就緒;在存儲器中就緒; 在存儲器中睡眠在存儲器中睡眠u就緒,被交換;就緒,被交換; 睡眠,被交換睡眠,被交換u被剝奪;被剝奪; 創(chuàng)建創(chuàng)建u僵死僵死uunix采用兩個狀態(tài)表示進(jìn)程在用戶模式下還是在內(nèi)核模采用兩個狀態(tài)表示進(jìn)程在用戶模式下還是在內(nèi)核模式下執(zhí)行式下執(zhí)行:用戶態(tài)用戶態(tài)/ 內(nèi)核態(tài)內(nèi)核態(tài)u狀態(tài)狀態(tài)“被搶先(被剝奪)被搶先(被剝奪)”與與“內(nèi)存就緒內(nèi)存就緒”的地位相同的地位相同,要等到下一次進(jìn)程調(diào)度時,才能回到,要等到下一次進(jìn)程調(diào)度時,才能回到“用戶態(tài)執(zhí)行用戶態(tài)執(zhí)行”。這是為了強(qiáng)調(diào)正在核心態(tài)運行的進(jìn)程不能被剝奪,僅。這是為了強(qiáng)調(diào)正在核心態(tài)運行的進(jìn)程不能被剝奪,僅當(dāng)它即將返回用戶態(tài)
28、時,才能被剝奪當(dāng)它即將返回用戶態(tài)時,才能被剝奪u作業(yè):自己看!作業(yè):自己看!實例分析實例分析unix的進(jìn)程狀態(tài)及其轉(zhuǎn)換的進(jìn)程狀態(tài)及其轉(zhuǎn)換進(jìn)程標(biāo)識信息進(jìn)程標(biāo)識信息進(jìn)程的標(biāo)識號進(jìn)程的標(biāo)識號(process id, pid),唯一,唯一父進(jìn)程父進(jìn)程id用戶用戶idcpu寄存器寄存器用戶可見寄存器用戶可見寄存器控制和狀態(tài)寄存器控制和狀態(tài)寄存器程序計數(shù)器程序計數(shù)器狀態(tài)信息狀態(tài)信息: 中斷允許中斷允許/禁止標(biāo)志、禁止標(biāo)志、執(zhí)行模式等執(zhí)行模式等u進(jìn)程控制信息進(jìn)程控制信息u調(diào)度和狀態(tài)信息調(diào)度和狀態(tài)信息u進(jìn)程狀態(tài)進(jìn)程狀態(tài) u優(yōu)先級優(yōu)先級u與調(diào)度有關(guān)的信息與調(diào)度有關(guān)的信息u事件事件u數(shù)據(jù)結(jié)構(gòu):隊列等數(shù)據(jù)結(jié)構(gòu):隊列
29、等u進(jìn)程間通信進(jìn)程間通信u進(jìn)程特權(quán)進(jìn)程特權(quán)u內(nèi)存管理信息內(nèi)存管理信息u計帳信息計帳信息ui/o狀態(tài)信息狀態(tài)信息進(jìn)程在進(jìn)程在os內(nèi)用內(nèi)用pcb表示(表示(process control block) ,pcb是進(jìn)程的是進(jìn)程的屬性屬性之一。包含:之一。包含:4.3 、進(jìn)程控制塊、進(jìn)程控制塊pcb4.3、進(jìn)程操作、進(jìn)程操作創(chuàng)建和終止創(chuàng)建和終止u創(chuàng)建進(jìn)程創(chuàng)建進(jìn)程u給新進(jìn)程分配一個唯一的給新進(jìn)程分配一個唯一的pid:在基本表中增加一個在基本表中增加一個項目項目u 給進(jìn)程分配空間:給進(jìn)程分配空間:進(jìn)程映像、進(jìn)程映像、pcbu 初始化初始化pcbu 設(shè)置正確的連接:設(shè)置正確的連接:置入相應(yīng)隊列中置入相應(yīng)隊列
30、中u 創(chuàng)建或擴(kuò)充其他數(shù)據(jù)結(jié)構(gòu):創(chuàng)建或擴(kuò)充其他數(shù)據(jù)結(jié)構(gòu):如記帳文件等如記帳文件等u導(dǎo)致進(jìn)程創(chuàng)建的導(dǎo)致進(jìn)程創(chuàng)建的事件事件u新的批作業(yè)(批處理系統(tǒng)中)新的批作業(yè)(批處理系統(tǒng)中)u交互登錄(分時系統(tǒng))交互登錄(分時系統(tǒng))uos為提供一項服務(wù)而創(chuàng)建為提供一項服務(wù)而創(chuàng)建u由已有的進(jìn)程生成(用戶進(jìn)程規(guī)定創(chuàng)建的,并發(fā)執(zhí)行)由已有的進(jìn)程生成(用戶進(jìn)程規(guī)定創(chuàng)建的,并發(fā)執(zhí)行)u提交一個程序執(zhí)行提交一個程序執(zhí)行u父進(jìn)程、子進(jìn)程、進(jìn)程樹父進(jìn)程、子進(jìn)程、進(jìn)程樹進(jìn)程何時中止進(jìn)程何時中止? ?l程序執(zhí)行程序執(zhí)行halthalt指令指令l用戶退出登錄用戶退出登錄l進(jìn)程執(zhí)行一個中止服務(wù)請求進(jìn)程執(zhí)行一個中止服務(wù)請求l出錯及失敗因素
31、出錯及失敗因素進(jìn)程中止的原因進(jìn)程中止的原因l正常結(jié)束正常結(jié)束l給定時限到給定時限到l缺少內(nèi)存缺少內(nèi)存l存儲器出界存儲器出界l保護(hù)性出錯保護(hù)性出錯u例子例子: 寫只讀文件寫只讀文件l算術(shù)錯算術(shù)錯l超出時間超出時間u進(jìn)程等待超過對某事件的最大值進(jìn)程等待超過對某事件的最大值進(jìn)程中止的原因(進(jìn)程中止的原因(li/o 失敗失敗l無效指令無效指令u如試圖執(zhí)行數(shù)據(jù)如試圖執(zhí)行數(shù)據(jù)l特權(quán)指令特權(quán)指令l操作系統(tǒng)干預(yù)操作系統(tǒng)干預(yù)u如當(dāng)死鎖發(fā)生時如當(dāng)死鎖發(fā)生時l父進(jìn)程請求中止某一子進(jìn)程父進(jìn)程請求中止某一子進(jìn)程l父進(jìn)程中止,所以子進(jìn)程也中止父進(jìn)程中止,所以子進(jìn)程也中止舉例:進(jìn)程創(chuàng)建時形成的進(jìn)程樹舉例:進(jìn)程創(chuàng)建時形成的進(jìn)
32、程樹u進(jìn)程在執(zhí)行過程中,能進(jìn)程在執(zhí)行過程中,能通過系統(tǒng)調(diào)用創(chuàng)建通過系統(tǒng)調(diào)用創(chuàng)建多個進(jìn)程多個進(jìn)程u子進(jìn)程資源的獲得:子進(jìn)程資源的獲得:u物理資源(物理資源(cpu時間、內(nèi)存、時間、內(nèi)存、i/o設(shè)備、文件)設(shè)備、文件)u從從os那里獲得那里獲得u從其父進(jìn)程資源子集中獲得(可以防止超載)從其父進(jìn)程資源子集中獲得(可以防止超載)u初始化數(shù)據(jù)(或者輸入數(shù)據(jù)):見教材初始化數(shù)據(jù)(或者輸入數(shù)據(jù)):見教材p79u創(chuàng)建新進(jìn)程后:創(chuàng)建新進(jìn)程后:u父進(jìn)程與子進(jìn)程并發(fā)執(zhí)行父進(jìn)程與子進(jìn)程并發(fā)執(zhí)行u父進(jìn)程等待,直到某個或者全部子進(jìn)程執(zhí)行完畢。父進(jìn)程等待,直到某個或者全部子進(jìn)程執(zhí)行完畢。4.3、進(jìn)程操作、進(jìn)程操作創(chuàng)建創(chuàng)建進(jìn)
33、程操作進(jìn)程操作unix的進(jìn)程控制的系統(tǒng)調(diào)用:的進(jìn)程控制的系統(tǒng)調(diào)用:fork() : 創(chuàng)建一個新進(jìn)程創(chuàng)建一個新進(jìn)程exec():: 執(zhí)行一個可執(zhí)行程序執(zhí)行一個可執(zhí)行程序exit() : 終止終止sleep() :暫停一段時間暫停一段時間pause():暫停并等待信號暫停并等待信號wait() :等待子進(jìn)程暫停或終止等待子進(jìn)程暫?;蚪K止kill() : 發(fā)送信號到某個或一組進(jìn)程發(fā)送信號到某個或一組進(jìn)程ptrace() :設(shè)置執(zhí)行斷點設(shè)置執(zhí)行斷點(breakpoint),允許父進(jìn)程,允許父進(jìn)程控制子進(jìn)程的運行控制子進(jìn)程的運行fork()創(chuàng)建一個新進(jìn)程創(chuàng)建一個新進(jìn)程ufork()調(diào)用格式:調(diào)用格式:
34、pid = fork()u在調(diào)用在調(diào)用fork()之后,父進(jìn)程和子進(jìn)程均在下一條語句上繼()之后,父進(jìn)程和子進(jìn)程均在下一條語句上繼續(xù)運行??梢詸z查續(xù)運行??梢詸z查fork()返回值,同時進(jìn)程可以決定下面()返回值,同時進(jìn)程可以決定下面要執(zhí)行的代碼。要執(zhí)行的代碼。u父、子進(jìn)程的父、子進(jìn)程的fork()返回值返回值不同不同u在子進(jìn)程中返回時,在子進(jìn)程中返回時,pid為為0;u在父進(jìn)程中返回時,在父進(jìn)程中返回時, pid為所創(chuàng)建的子進(jìn)程的標(biāo)識。為所創(chuàng)建的子進(jìn)程的標(biāo)識。ufork()創(chuàng)建子進(jìn)程之后,執(zhí)行創(chuàng)建子進(jìn)程之后,執(zhí)行返回父進(jìn)程返回父進(jìn)程,或,或調(diào)度切換調(diào)度切換到子到子進(jìn)程或其他進(jìn)程。進(jìn)程或其他進(jìn)
35、程。ufork創(chuàng)建一個新進(jìn)程(子進(jìn)程),除了子進(jìn)程標(biāo)識符和其創(chuàng)建一個新進(jìn)程(子進(jìn)程),除了子進(jìn)程標(biāo)識符和其pcb結(jié)構(gòu)中的某些特性參數(shù)不同之外,子進(jìn)程是父進(jìn)程的結(jié)構(gòu)中的某些特性參數(shù)不同之外,子進(jìn)程是父進(jìn)程的精精確復(fù)制確復(fù)制。u父、子進(jìn)程的運行是無關(guān)的,所以運行順序也不固定。若要父、子進(jìn)程的運行是無關(guān)的,所以運行順序也不固定。若要求父子進(jìn)程運行順序一定,則要用到進(jìn)程間的通信。求父子進(jìn)程運行順序一定,則要用到進(jìn)程間的通信。main() pid_t val; printf(“pid); val=fork(); if(val!=0) printf(“parent”); else printf(“chil
36、d);main( ) pid_t val; printf(“pid); val=fork(); if(val!=0) printf(“parent”); else printf(“child);main( ) pid_t val; printf(“pid); val=fork(); if(val!=0) printf(“parent”); else printf(“child);父進(jìn)程父進(jìn)程父進(jìn)程父進(jìn)程子進(jìn)程子進(jìn)程分裂分裂執(zhí)執(zhí)行行繼繼續(xù)續(xù)執(zhí)執(zhí)行行繼繼續(xù)續(xù)執(zhí)執(zhí)行行fork()調(diào)用例子(調(diào)用例子(1)#include#include#include /*fork系統(tǒng)調(diào)用的一個簡單例子(不含出錯檢查
37、)系統(tǒng)調(diào)用的一個簡單例子(不含出錯檢查)*/void main(void) printf(“hello n”); fork(); printf(“bye n”);運行結(jié)果運行結(jié)果hellobyebye#include#include#includevoid main(void) if (fork()=0) printf(“in the child processn”); else printf(“in the parent processn”);程序的運行無法保證輸程序的運行無法保證輸出順序,出順序,如果多次運行如果多次運行該程序,有時語句該程序,有時語句“in the child proce
38、ss” 會在會在in the parent process”之前,有時之前,有時卻相反。卻相反。輸出順序依賴于內(nèi)核輸出順序依賴于內(nèi)核所用的調(diào)度算法所用的調(diào)度算法fork()調(diào)用例子(調(diào)用例子(2)#include#include#includevoid main(void) int i; static char buffer10; if (fork()=0) /* 在子進(jìn)程中在子進(jìn)程中 */ strcpy(buffer,”childn”);else /*在父進(jìn)程中在父進(jìn)程中*/ strcpy(buffer,”parentn”);for(i=0;i5;+i) /*兩個進(jìn)程均執(zhí)行此語句兩個進(jìn)程均執(zhí)
39、行此語句*/ sleep(1); /*每次每次5遍遍*/ write(1,buffer,siseof(buffer); 運行結(jié)果運行結(jié)果parentchildparentchildparentchildparentchildparentchildfork()調(diào)用例子(調(diào)用例子(3)#include#include#includeint global=4;void main(void) int pid; int vari=5; printf(“before forkn”); if (pid=fork()0) printf(“fork errorn”); exit(0);else if(pid=0
40、) global+; vari-; printf(“child changed the vari and global.n”);else printf(“parent didnt changed the vari and global.n”); printf(“global=%d,vari=%dn”,global,vari); exit(0);int global=4;void main(void) int pid; int vari=5; printf(“before forkn”);運行結(jié)果運行結(jié)果1global=5,vari=4;global=4,vari=5;運行結(jié)果運行結(jié)果2glob
41、al=4,vari=5;global=5,vari=4分析:分析:子進(jìn)程和父進(jìn)程的數(shù)據(jù)段、堆棧段不同。子進(jìn)程執(zhí)子進(jìn)程和父進(jìn)程的數(shù)據(jù)段、堆棧段不同。子進(jìn)程執(zhí)行語句行語句“global,vari”時,只是對自己的數(shù)據(jù)段時,只是對自己的數(shù)據(jù)段進(jìn)行了修改,并未影響到父進(jìn)程的數(shù)據(jù)段,進(jìn)行了修改,并未影響到父進(jìn)程的數(shù)據(jù)段,u子進(jìn)程如何執(zhí)行一個新的程序文本?子進(jìn)程如何執(zhí)行一個新的程序文本?u通過通過exec()調(diào)用族,加載新的程序文本()調(diào)用族,加載新的程序文本u 通過一個系統(tǒng)調(diào)用通過一個系統(tǒng)調(diào)用exec,子進(jìn)程可以擁有自己的可,子進(jìn)程可以擁有自己的可執(zhí)行代碼。即執(zhí)行代碼。即exec用一個新進(jìn)程用一個新進(jìn)程
42、覆蓋調(diào)用進(jìn)程覆蓋調(diào)用進(jìn)程。u它的參數(shù)包括新進(jìn)程對應(yīng)的文件和命令行參數(shù)。它的參數(shù)包括新進(jìn)程對應(yīng)的文件和命令行參數(shù)。成成功調(diào)用時,不再返回功調(diào)用時,不再返回;否則,返回出錯原因。;否則,返回出錯原因。u六種六種exec調(diào)用格式:各種調(diào)用的區(qū)別在于參數(shù)的處調(diào)用格式:各種調(diào)用的區(qū)別在于參數(shù)的處理方法不同,常用的格式有:理方法不同,常用的格式有:uexecvp(filename, argp):uexeclp(filename,arg0,arg1,.,(char *)0):u在大多數(shù)程序中,在大多數(shù)程序中,系統(tǒng)調(diào)用系統(tǒng)調(diào)用fork和和exec是結(jié)合在一起使用的是結(jié)合在一起使用的。父進(jìn)程生成一個子進(jìn)程,然后
43、通過調(diào)用。父進(jìn)程生成一個子進(jìn)程,然后通過調(diào)用exec覆蓋該子進(jìn)程覆蓋該子進(jìn)程。int global;main() int local; if (child=fork() = -1) 創(chuàng)建失敗 if (child = 0) 子進(jìn)程 global=local + 2; exit(); 父進(jìn)程 global=local + 1; exit();if (execlp(b,) = -1) 加載程序失敗main() exit();program aprogram bu典型原因是進(jìn)程使用資源過典型原因是進(jìn)程使用資源過多多u交互式用戶退出系統(tǒng)交互式用戶退出系統(tǒng), 關(guān)閉關(guān)閉終端終端u用戶結(jié)束一個應(yīng)用程序用戶結(jié)束
44、一個應(yīng)用程序u錯誤和故障錯誤和故障: 超時超時, 無可用無可用存儲器存儲器, 越界越界.u當(dāng)父進(jìn)程終止時終止子進(jìn)程當(dāng)父進(jìn)程終止時終止子進(jìn)程(級聯(lián)終止)級聯(lián)終止)u正常完成正常完成u超過時限超過時限u無可用存儲器無可用存儲器u越界越界u保護(hù)錯誤保護(hù)錯誤u算術(shù)錯誤算術(shù)錯誤u時間超出時間超出ui/o失敗失敗u無效指令無效指令u特權(quán)指令特權(quán)指令u數(shù)據(jù)誤用數(shù)據(jù)誤用u操作員或操作系統(tǒng)干涉操作員或操作系統(tǒng)干涉u父進(jìn)程終止父進(jìn)程終止u父進(jìn)程請求父進(jìn)程請求u進(jìn)程終止:進(jìn)程終止:unix中系統(tǒng)調(diào)用中系統(tǒng)調(diào)用exit()u進(jìn)程終止時:進(jìn)程終止時:返回數(shù)據(jù)到其父進(jìn)程,它相關(guān)所有返回數(shù)據(jù)到其父進(jìn)程,它相關(guān)所有資源:內(nèi)存
45、、打開文件和資源:內(nèi)存、打開文件和i/o緩沖會被釋放掉。緩沖會被釋放掉。u父進(jìn)程可以通過父進(jìn)程可以通過wait()()等待子進(jìn)程的結(jié)束,等待子進(jìn)程的結(jié)束,wait()可以將子進(jìn)程的標(biāo)識符返回給父進(jìn)程。()可以將子進(jìn)程的標(biāo)識符返回給父進(jìn)程。 4.4 進(jìn)程協(xié)作進(jìn)程協(xié)作u獨立進(jìn)程:獨立進(jìn)程:不能不能影響其它進(jìn)程或者不被其它進(jìn)程所影響其它進(jìn)程或者不被其它進(jìn)程所 影響影響u協(xié)作進(jìn)程:協(xié)作進(jìn)程:能能影響其它進(jìn)程或者被其它進(jìn)程所影響影響其它進(jìn)程或者被其它進(jìn)程所影響u協(xié)作進(jìn)程非常必要:協(xié)作進(jìn)程非常必要:u信息共享信息共享u加快計算加快計算u模塊化模塊化u方便方便u例:生產(chǎn)者進(jìn)程消費者進(jìn)程通過共享內(nèi)存來通信例:
46、生產(chǎn)者進(jìn)程消費者進(jìn)程通過共享內(nèi)存來通信4.5 進(jìn)程間通信機(jī)制進(jìn)程間通信機(jī)制ipcu操作系統(tǒng)提供了一種機(jī)制,使協(xié)作進(jìn)程通過進(jìn)程間通操作系統(tǒng)提供了一種機(jī)制,使協(xié)作進(jìn)程通過進(jìn)程間通信(信(ipc)工具來進(jìn)行彼此間的通信。)工具來進(jìn)行彼此間的通信。u管道管道u消息消息u共享存儲區(qū)共享存儲區(qū)u信號量信號量(下一章講)下一章講)u信號信號u 管道是一條在進(jìn)程間以管道是一條在進(jìn)程間以字節(jié)流字節(jié)流方式傳送的通信通道。方式傳送的通信通道。它由它由os核心的緩沖區(qū)(通常幾十核心的緩沖區(qū)(通常幾十kb)來實現(xiàn),是)來實現(xiàn),是單單向向的,是一個先進(jìn)先出(的,是一個先進(jìn)先出(fifo)的隊列,由一個進(jìn)程)的隊列,由一個
47、進(jìn)程寫,一個進(jìn)程讀寫,一個進(jìn)程讀;u管道可以看作是連接兩個命令的一個打開文件。一個管道可以看作是連接兩個命令的一個打開文件。一個命令向該文件中寫入數(shù)據(jù),另一個命令從該文件中讀命令向該文件中寫入數(shù)據(jù),另一個命令從該文件中讀出數(shù)據(jù)。出數(shù)據(jù)。u 例如:例如:cat filename.txt | lessu 在使用管道前要在使用管道前要建立相應(yīng)的管道建立相應(yīng)的管道,然后才可使用。創(chuàng),然后才可使用。創(chuàng)建一個管道后,它的大小是固定的字節(jié)數(shù)。建一個管道后,它的大小是固定的字節(jié)數(shù)。4.5.1 管道管道(pipe)寫進(jìn)程寫進(jìn)程讀進(jìn)程讀進(jìn)程pipeu通過通過pipepipe系統(tǒng)調(diào)用創(chuàng)建,得到兩個文件描述符,分別系
48、統(tǒng)調(diào)用創(chuàng)建,得到兩個文件描述符,分別用于寫和讀。用于寫和讀。uint pipe(int fildes2);int pipe(int fildes2);u文件描述符文件描述符fildes0fildes0為讀端,為讀端,fildes1fildes1為寫端;為寫端;u通過系統(tǒng)調(diào)用通過系統(tǒng)調(diào)用writewrite和和readread進(jìn)行管道的寫和讀;進(jìn)行管道的寫和讀;4.5.2共享存儲區(qū)共享存儲區(qū)(shared memory)u系統(tǒng)在系統(tǒng)在存儲區(qū)存儲區(qū)中劃出一塊共享存儲區(qū),各進(jìn)程間可通中劃出一塊共享存儲區(qū),各進(jìn)程間可通過對共享存儲區(qū)中的數(shù)據(jù)進(jìn)行讀或?qū)憗韺崿F(xiàn)通信。過對共享存儲區(qū)中的數(shù)據(jù)進(jìn)行讀或?qū)憗韺崿F(xiàn)通
49、信。u需要通信的各個進(jìn)程把共享存儲區(qū)附加到自己的地址需要通信的各個進(jìn)程把共享存儲區(qū)附加到自己的地址空間中,然后,就像讀寫普通存儲器一樣對共享區(qū)中空間中,然后,就像讀寫普通存儲器一樣對共享區(qū)中的數(shù)據(jù)進(jìn)行讀或者寫。的數(shù)據(jù)進(jìn)行讀或者寫。u如果用戶不需要某個共享存儲區(qū),可以把它取消。如果用戶不需要某個共享存儲區(qū),可以把它取消。u主要用于主要用于unix system vunix system v中。中。4.5.3 消息傳遞方式消息傳遞方式u消息傳遞:消息傳遞:是相互合作的并發(fā)進(jìn)程是相互合作的并發(fā)進(jìn)程交換信息的一種方交換信息的一種方式,式,進(jìn)程間的數(shù)據(jù)交換以進(jìn)程間的數(shù)據(jù)交換以消息消息為單位。為單位。u消
50、息隊列:消息隊列:每個進(jìn)程有一個與之相關(guān)的消息隊列,每個進(jìn)程有一個與之相關(guān)的消息隊列,u發(fā)送者:發(fā)送者:指定發(fā)送的每個消息的類型,類型可以被接指定發(fā)送的每個消息的類型,類型可以被接收者用作選擇原則,接收者可以按先進(jìn)先出的順序接收者用作選擇原則,接收者可以按先進(jìn)先出的順序接收消息,或者按類型接收。收消息,或者按類型接收。u當(dāng)進(jìn)程向一個滿隊列發(fā)送消息時,它將被掛起;當(dāng)進(jìn)程向一個滿隊列發(fā)送消息時,它將被掛起;u當(dāng)進(jìn)程從一個空隊列讀取時也會被掛起。當(dāng)進(jìn)程從一個空隊列讀取時也會被掛起。u消息:一段文本。消息格式設(shè)計與應(yīng)用環(huán)境和要求有關(guān)消息:一段文本。消息格式設(shè)計與應(yīng)用環(huán)境和要求有關(guān)u固定長度消息:固定長
51、度消息:可以減小處理和存儲的開銷可以減小處理和存儲的開銷u基于文件的:基于文件的:傳送大量的數(shù)據(jù)傳送大量的數(shù)據(jù)u可變長度消息:可變長度消息:靈活靈活u消息的一般格式消息的一般格式u消息頭:消息頭:源標(biāo)識、目的標(biāo)識、源標(biāo)識、目的標(biāo)識、 長度域、類型域、控制域長度域、類型域、控制域u消息體消息體4.5.3 消息傳遞方式消息傳遞方式消息消息4.5.3 消息傳遞方式消息傳遞方式消息隊列消息隊列pcbpcb.send(r, m)send(r, m).size:size:消息長度消息長度text:text:消息正文消息正文.消息鏈指針消息鏈指針.receive(pid, n)receive(pid, n)
52、.size:size:消息長度消息長度text:text:消息正文消息正文.m:m:n:n:接收進(jìn)程接收進(jìn)程 r r發(fā)送進(jìn)程發(fā)送進(jìn)程 s s消息消息消息消息消息消息.unixunix消息隊列消息隊列apiapiumsggetmsgget依據(jù)用戶給出的整數(shù)值依據(jù)用戶給出的整數(shù)值keykey,創(chuàng)建新消息隊,創(chuàng)建新消息隊列或打開現(xiàn)有消息隊列,返回一個消息隊列列或打開現(xiàn)有消息隊列,返回一個消息隊列idid;umsgsndmsgsnd發(fā)送消息;發(fā)送消息;umsgrcvmsgrcv接收消息,可以指定消息類型;沒有消息時接收消息,可以指定消息類型;沒有消息時,返回,返回-1-1;umsgctlmsgctl對
53、消息隊列進(jìn)行控制,如刪除消息隊列;對消息隊列進(jìn)行控制,如刪除消息隊列;4.5.3 消息傳遞方式消息傳遞方式類型類型u直接通信:直接通信:u必須明確命名通信的接收者或發(fā)送者,原語必須明確命名通信的接收者或發(fā)送者,原語send和和receive的定義如下:的定義如下:usend(p,message):發(fā)送消息到進(jìn)程發(fā)送消息到進(jìn)程pureceive(q,message):接收來自進(jìn)程接收來自進(jìn)程q的消的消息。息。u間接通信:間接通信:消息通過郵箱或端口來發(fā)送和接收。原消息通過郵箱或端口來發(fā)送和接收。原語定義如下:語定義如下:usend(a,message););ureceive(a,message););u思考:思考:設(shè)設(shè)p1,p2和和p3都共享郵箱都共享郵箱a,進(jìn)程,進(jìn)程p1發(fā)送一個消發(fā)送一個消息到息到a,而進(jìn)程,而進(jìn)程p2和和p3都對都對a執(zhí)行執(zhí)行reveive。哪個進(jìn)程能接。哪個進(jìn)程能接收到收到p1所發(fā)送的消息?(所發(fā)送的消息?(p85)4.5.4 信號信號(signal)u 信號:信號:用于通知發(fā)生一個進(jìn)程通信事件的用于通知發(fā)生一個進(jìn)程通信事件的軟件機(jī)制軟件機(jī)制,相,相當(dāng)于給進(jìn)程的當(dāng)于給進(jìn)程的“軟件軟件”中斷;沒有優(yōu)先級,它平等對待中斷;沒有優(yōu)先級,它平等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年經(jīng)濟(jì)法基礎(chǔ)的試題及答案
- 2024-2025學(xué)年河南省駐馬店市九年級(上)期中物理試卷(含解析)
- 2025年國際影業(yè)面試試題及答案
- 八年級歷史下冊第二單元社會主義制度的建立與社會主義建設(shè)的探索第5課三大改造教學(xué)設(shè)計1新人教版
- 2025年高考?xì)v史二輪復(fù)習(xí)答題模版:歷史概念類選擇題(含答案)
- 2025年第六屆中小學(xué)全國國家版圖知識競賽題庫及答案
- 2025-2030年中國不銹鋼板翅式機(jī)油冷卻器數(shù)據(jù)監(jiān)測研究報告
- 2025-2030年中國松鼠尾毛數(shù)據(jù)監(jiān)測研究報告
- Unit 4 Fun with numbers Lesson 1 Get ready Start up 表格式教學(xué)設(shè)計
- 土地使用權(quán)轉(zhuǎn)讓協(xié)議
- 小學(xué)體育《陽光運動身體好》課件
- 研究生面試復(fù)試英語+常問問題
- 安徽省教育科學(xué)研究項目課題申請書【模板】
- 數(shù)學(xué)名詞中英文對照
- 幼年特發(fā)性關(guān)節(jié)炎.
- 線束加工工時對照表
- 一年級古詩新唱社團(tuán)計劃
- 關(guān)于超細(xì)碳酸鈣粉體的干法表面改性分析
- 中考數(shù)學(xué)復(fù)習(xí)經(jīng)驗交流PPT課件
- 美國簽證在職證明中英文模板.doc
- 患者約束技術(shù)評分標(biāo)準(zhǔn)
評論
0/150
提交評論