操作系統(tǒng)教程第三版課件_第1頁(yè)
操作系統(tǒng)教程第三版課件_第2頁(yè)
操作系統(tǒng)教程第三版課件_第3頁(yè)
操作系統(tǒng)教程第三版課件_第4頁(yè)
操作系統(tǒng)教程第三版課件_第5頁(yè)
已閱讀5頁(yè),還剩230頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)教程(第3版)

第二章處理器管理

面向21世紀(jì)課程教材高等教育出版社出版2003年8月操作系統(tǒng)教程(第3版)

第二章處理器管理

面向21世紀(jì)1第二章處理器管理2.1中央處理器2.2中斷技術(shù)2.3進(jìn)程及其實(shí)現(xiàn)2.4線程及其實(shí)現(xiàn)2.5處理器調(diào)度2.6批處理作業(yè)的管理與調(diào)度2.7低級(jí)調(diào)度第二章處理器管理2.1中央處理器22.1中央處理器

2.1.1單處理器系統(tǒng)和多處理器系統(tǒng)2.1.2寄存器2.1.3特權(quán)指令與非特權(quán)指令2.1.4處理器狀態(tài)2.1.5程序狀態(tài)字寄存器2.1中央處理器

2.1.1單處理器系統(tǒng)和多處理器系統(tǒng)32.1.1單處理器和多處理器系統(tǒng)

計(jì)算機(jī)系統(tǒng)的核心是中央處理器單處理器系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)只包括一個(gè)運(yùn)算處理器。多處理器系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)有多個(gè)運(yùn)算處理器。2.1.1單處理器和多處理器系統(tǒng)計(jì)算機(jī)系統(tǒng)的核心是中央處4計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)分類單指令流單數(shù)據(jù)流(SISD):一個(gè)處理器在一個(gè)存儲(chǔ)器中的數(shù)據(jù)上執(zhí)行單條指令流單指令流多數(shù)據(jù)流(SIMD):?jiǎn)螚l指令流控制多個(gè)處理單元同時(shí)執(zhí)行,每個(gè)處理單元包括處理器和相關(guān)的數(shù)據(jù)存儲(chǔ),一條指令控制了不同的處理器對(duì)不同的數(shù)據(jù)進(jìn)行操作。向量機(jī)和陣列機(jī)是這類計(jì)算機(jī)系統(tǒng)的代表多指令流單數(shù)據(jù)流(MISD):一個(gè)數(shù)據(jù)流被傳送給一組處理器,通過(guò)處理器上不同指令操作最終得到處理結(jié)果多指令流多數(shù)據(jù)流(MIMD):多個(gè)處理器對(duì)各自不同的數(shù)據(jù)集同時(shí)執(zhí)行不同的指令流。可以把MIMD系統(tǒng)劃分為共享內(nèi)存緊密耦合系統(tǒng)和內(nèi)存分布松散耦合系統(tǒng)兩類計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)分類單指令流單數(shù)據(jù)流(SISD):一個(gè)處理器在52.1.2寄存器(1)計(jì)算機(jī)系統(tǒng)的處理器包括一組寄存器,其個(gè)數(shù)根據(jù)機(jī)型的不同而不同,它們構(gòu)成了一級(jí)存儲(chǔ),比主存容量小,但訪問(wèn)速度快。這組寄存器所存儲(chǔ)的信息與程序的執(zhí)行有很大關(guān)系,構(gòu)成了處理器現(xiàn)場(chǎng)。2.1.2寄存器(1)計(jì)算機(jī)系統(tǒng)的處理器包括一組寄存器,其個(gè)6寄存器(2)

通用寄存器:數(shù)據(jù)寄存器:基地址寄存器:I/O地址寄存器:I/O緩沖寄存器:控制寄存器:其他寄存器寄存器(2)

通用寄存器:72.1.3特權(quán)指令與非特權(quán)指令(1)機(jī)器指令的集合稱指令系統(tǒng)(1)數(shù)據(jù)處理類指令;(2)轉(zhuǎn)移類指令;(3)數(shù)據(jù)傳送類指令;(4)移位與字符串指令;(5)I/O類指令。2.1.3特權(quán)指令與非特權(quán)指令(1)機(jī)器指令的集合稱指令系8特權(quán)指令與非特權(quán)指令(2)從資源管理和控制程序執(zhí)行的角度出發(fā),必須把指令系統(tǒng)中的指令分作兩部分:特權(quán)指令和非特權(quán)指令。特權(quán)指令是指只能提供給操作系統(tǒng)的核心程序使用的指令,如啟動(dòng)I/O設(shè)備、設(shè)置時(shí)鐘、控制中斷屏蔽位、清內(nèi)存、建立存儲(chǔ)鍵,加載PSW等。特權(quán)指令與非特權(quán)指令(2)從資源管理和控制程序執(zhí)行的角度出發(fā)92.1.4處理器狀態(tài)中央處理器怎么知道當(dāng)前是操作系統(tǒng)還是一般用戶程序在運(yùn)行呢?處理器狀態(tài)標(biāo)志和設(shè)置處理器成不同狀態(tài):管理狀態(tài)(特權(quán)狀態(tài)、系統(tǒng)模式、特態(tài)或管態(tài))和用戶狀態(tài)(目標(biāo)狀態(tài)、用戶模式、常態(tài)或目態(tài))處理器處于管理狀態(tài)時(shí),程序可以執(zhí)行全部指令,使用所有資源,具有改變處理器狀態(tài)的能力;處理器處于用戶狀態(tài)時(shí),程序只能執(zhí)行非特權(quán)指令I(lǐng)ntelPentium的處理器狀態(tài)有四種,支持4個(gè)保護(hù)級(jí)別,0級(jí)權(quán)限最高,3級(jí)權(quán)限最低2.1.4處理器狀態(tài)中央處理器怎么知道當(dāng)前是操作系統(tǒng)還是102.1.5程序狀態(tài)字寄存器(1)計(jì)算機(jī)如何知道當(dāng)前處于何種工作狀態(tài)?這時(shí)能否執(zhí)行特權(quán)指令?通常操作系統(tǒng)都引入程序狀態(tài)字PSW(ProgramStatusWord)來(lái)區(qū)別不同的處理器工作狀態(tài)PSW用來(lái)控制指令執(zhí)行順序并保留和指示與程序有關(guān)的系統(tǒng)狀態(tài),主要作用是實(shí)現(xiàn)程序狀態(tài)的保護(hù)和恢復(fù)每個(gè)程序都有一個(gè)與其執(zhí)行相關(guān)的PSW,每個(gè)處理器都設(shè)置一個(gè)PSW寄存器。程序占有處理器執(zhí)行,它的PSW將占有PSW寄存器2.1.5程序狀態(tài)字寄存器(1)計(jì)算機(jī)如何知道當(dāng)前處于何11程序狀態(tài)字寄存器(2)

PSW寄存器包括以下內(nèi)容:程序基本狀態(tài):

(1)程序計(jì)數(shù)器;(2)條件碼;(3)處理器狀態(tài)位。中斷碼。保存程序執(zhí)行時(shí)當(dāng)前發(fā)生的中斷事件。中斷屏蔽位。指明程序執(zhí)行中發(fā)生中斷事件時(shí),是否響應(yīng)出現(xiàn)的中斷事件。

程序狀態(tài)字寄存器(2)PSW寄存器包括以下內(nèi)容:12IBM360/370系列計(jì)算機(jī)

程序狀態(tài)字的基本格式

XXXXXXXXXXXXXXXX8位系統(tǒng)屏蔽4位CMWP字段4位程序屏蔽4位保護(hù)鍵16位中斷碼字段指令長(zhǎng)和條件碼24位指令地址IBM360/370系列計(jì)算機(jī)

程序狀態(tài)字的基本格式13IntelPentium程序狀態(tài)字IntelPentium中,PSW由標(biāo)志寄存器EFLAGS和指令指針寄存器EIP組成,均為32位。EFLAGS的低16位稱FLAGS,標(biāo)志可劃分為三組:狀態(tài)標(biāo)志、控制標(biāo)志、系統(tǒng)標(biāo)志。IntelPentium程序狀態(tài)字IntelPentiu142.2中斷技術(shù)2.2.1中斷的概念2.2.2中斷源分類2.2.3中斷裝置2.2.4中斷處理程序2.2.5中斷事件的具體處理方法2.2.6中斷的優(yōu)先級(jí)和多重中斷2.2.7實(shí)例研究:Windows2000/XP中斷處理2.2.8實(shí)例研究:Solaris中斷處理2.2.9實(shí)例研究:Linux中斷處理2.2中斷技術(shù)2.2.1中斷的概念152.2.1中斷的概念

?請(qǐng)求系統(tǒng)服務(wù),?實(shí)現(xiàn)并行工作,?處理突發(fā)事件,?滿足實(shí)時(shí)要求,都需要打斷處理器正常的工作,為此,提出了中斷概念。2.2.1中斷的概念?請(qǐng)求系統(tǒng)服務(wù),16中斷的定義中斷是指程序執(zhí)行過(guò)程中,當(dāng)發(fā)生某個(gè)事件時(shí),中止CPU上現(xiàn)行程序的運(yùn)行,引出處理該事件的程序執(zhí)行的過(guò)程。中斷的定義中斷是指程序執(zhí)行過(guò)程中,當(dāng)發(fā)生某個(gè)事件時(shí),中止CP172.2.2中斷源分類(1)

從中斷事件的性質(zhì)和激活的手段來(lái)說(shuō),可以分成兩類:?強(qiáng)迫性中斷事件強(qiáng)迫性中斷事件不是正在運(yùn)行的程序所期待的,而是由于某種事故或外部請(qǐng)求信息所引起的,分為:機(jī)器故障中斷事件。程序性中斷事件。外部中斷事件。輸入輸出中斷事件。?自愿性中斷事件自愿性中斷事件是正在運(yùn)行的程序所期待的事件。

2.2.2中斷源分類(1)從中斷事件的性質(zhì)和激活的手段來(lái)18中斷源分類(2)

兩類中斷事件

運(yùn)行程序中斷處理程序中斷裝置中斷處理程序中斷裝置機(jī)器故障中斷事件程序性中斷事件外部中斷事件輸入輸出中斷事件運(yùn)行程序訪管指令中斷源分類(2)

兩類中斷事件運(yùn)行程序中斷處理中斷裝置中19中斷源分類(3)

按照中斷信號(hào)的來(lái)源,可把中斷分為如下兩類:?外中斷(又稱中斷)指來(lái)自處理器和主存之外的中斷。?內(nèi)中斷(又稱異常)指來(lái)自處理器和主存內(nèi)部的中斷。中斷源分類(3)

按照中斷信號(hào)的來(lái)源,可把中斷分為如下兩20中斷源分類(4)

?外中斷包括:電源故障中斷、時(shí)鐘中斷、控制臺(tái)中斷、它機(jī)中斷和I/O中斷等。不同的中斷具有不同的中斷優(yōu)先級(jí),處理高一級(jí)中斷時(shí),往往會(huì)屏蔽部分或全部低級(jí)中斷。?內(nèi)中斷包括:通路校驗(yàn)錯(cuò)、主存奇偶錯(cuò)、非法操作碼、地址越界、頁(yè)面失效、調(diào)試指令、訪管中斷、算術(shù)操作溢出等各種程序性中斷。?異常是不能被屏蔽的,一旦出現(xiàn)應(yīng)立即響應(yīng)并加以處理。中斷源分類(4)

?外中斷包括:電源故障中斷、時(shí)鐘中斷、控21中斷和異常的區(qū)別

?中斷是由與現(xiàn)行指令無(wú)關(guān)的中斷信號(hào)觸發(fā)的(異步的),且中斷的發(fā)生與CPU處在用戶模式或內(nèi)核模式無(wú)關(guān),在兩條機(jī)器指令之間才可響應(yīng)中斷,一般來(lái)說(shuō),中斷處理程序提供的服務(wù)不是為當(dāng)前進(jìn)程所需的;?異常是由處理器正在執(zhí)行現(xiàn)行指令而引起的,一條指令執(zhí)行期間允許響應(yīng)異常,異常處理程序提供的服務(wù)是為當(dāng)前進(jìn)程所用的。異常包括很多方面,有出錯(cuò)(fault),也有陷入(trap)。

中斷和異常的區(qū)別

?中斷是由與現(xiàn)行指令無(wú)關(guān)的中斷信號(hào)觸發(fā)22

出錯(cuò)和陷入的區(qū)別

?它們發(fā)生時(shí)保存的返回指令地址不同,出錯(cuò)保存指向觸發(fā)異常的那條指令,而陷入保存指向觸發(fā)異常的那條指令的下一條指令。?從異常返回時(shí),出錯(cuò)會(huì)重新執(zhí)行那條指令,而陷入就不會(huì)重新執(zhí)行那條指令。如缺頁(yè)異常是一種出錯(cuò),而陷入主要應(yīng)用在調(diào)試中。出錯(cuò)和陷入的區(qū)別

?它們發(fā)生時(shí)保存的返回指令地址不同,23硬中斷與軟中斷

中斷和異常要通過(guò)硬件設(shè)施來(lái)產(chǎn)生中斷請(qǐng)求,可看作硬中斷。不必由硬件發(fā)信號(hào)而能引發(fā)的中斷稱軟中斷,軟中斷是利用硬件中斷的概念,用軟件方式進(jìn)行模擬,實(shí)現(xiàn)宏觀上的異步執(zhí)行效果。硬中斷與軟中斷

中斷和異常要通過(guò)硬件設(shè)施來(lái)產(chǎn)生中斷請(qǐng)求,可看242.2.3中斷裝置發(fā)現(xiàn)中斷源并產(chǎn)生中斷的硬件稱中斷裝置所有計(jì)算機(jī)系統(tǒng)都采用硬件和軟件結(jié)合的方法實(shí)現(xiàn)中斷處理中斷裝置主要做以下三件事:發(fā)現(xiàn)中斷源保護(hù)現(xiàn)場(chǎng)啟動(dòng)處理中斷事件的程序2.2.3中斷裝置發(fā)現(xiàn)中斷源并產(chǎn)生中斷的硬件稱中斷裝置252.2.4中斷處理程序處理中斷事件的程序稱為中斷處理程序。它的主要任務(wù)是處理中斷事件和恢復(fù)正常操作不同中斷源對(duì)應(yīng)不同中斷處理程序,故快速找到中斷處理程序的入口地址是一個(gè)關(guān)鍵問(wèn)題中斷處理程序主要做四項(xiàng)工作:保護(hù)未被硬件保護(hù)的一些必需的處理狀態(tài)識(shí)別各個(gè)中斷源,分析產(chǎn)生中斷的原因處理發(fā)生的中斷事件恢復(fù)正常操作

2.2.4中斷處理程序處理中斷事件的程序稱為中斷處理程序26IBM中大型機(jī)中斷響應(yīng)過(guò)程

外中斷舊PSW訪管中斷舊PSW程序中斷舊PSW機(jī)器故障中斷舊PSWI/O中斷舊PSW外中斷新PSW訪管中斷新PSW程序中斷新PSW機(jī)器故障中斷新PSWI/O中斷新PSW18202830385860687078現(xiàn)行PSW②中斷時(shí)保存現(xiàn)行PSW③中斷時(shí)裝入現(xiàn)行PSW④中斷后恢復(fù)PSW主存專用雙字單元(16進(jìn)制)①裝配中斷碼IBM中大型機(jī)中斷響應(yīng)過(guò)程

外中斷舊PSW現(xiàn)行P27

IBMPC機(jī)中斷的響應(yīng)過(guò)程

IPCSPSW現(xiàn)行PSW寄存器新IP新CS老IP老CS老PSW新棧頂主存新PSWIBMPC機(jī)中斷的響應(yīng)過(guò)程IPCSPSW現(xiàn)行PS282.2.5中斷事件具體處理方法1、機(jī)器故障中斷事件的處理

事件是由硬件故障產(chǎn)生的,排除故障須進(jìn)行人工干預(yù)。中斷處理能做的工作是:保護(hù)現(xiàn)場(chǎng),防止故障蔓延,報(bào)告給操作員并提供故障信息以便維修和校正,及對(duì)程序中所造成的破壞進(jìn)行估價(jià)和恢復(fù)。2.2.5中斷事件具體處理方法1、機(jī)器故障中斷事件的處理292、程序性中斷事件的處理

終止程序執(zhí)行警告用戶交給用戶處理2、程序性中斷事件的處理

終止程序執(zhí)行303、外部中斷事件的處理

時(shí)鐘是操作系統(tǒng)進(jìn)行調(diào)度工作的重要工具,如讓分時(shí)進(jìn)程作時(shí)間片輪轉(zhuǎn)、讓實(shí)時(shí)進(jìn)程定時(shí)發(fā)出或接收控制信號(hào)、系統(tǒng)定時(shí)喚醒或阻塞一個(gè)進(jìn)程、對(duì)用戶進(jìn)程進(jìn)行記賬時(shí)鐘可分成絕對(duì)時(shí)鐘和間隔時(shí)鐘兩種控制臺(tái)中斷事件的處理3、外部中斷事件的處理

時(shí)鐘是操作系統(tǒng)進(jìn)行調(diào)度工作的重要工具314、I/O中斷的處理(1)

I/O中斷種類較多,處理方法各異1)I/O操作正常結(jié)束后的處理2)I/O操作發(fā)生故障后的處理3)I/O操作發(fā)生異常后的處理4)設(shè)備報(bào)到或設(shè)備結(jié)束的處理

4、I/O中斷的處理(1)

I/O中斷種類較多,處理方法325、自愿中斷事件的處理(1)系統(tǒng)程序或用戶程序執(zhí)行訪管指令而引起的中斷,它表示運(yùn)行程序?qū)Σ僮飨到y(tǒng)功能的調(diào)用,所以,也稱系統(tǒng)調(diào)用,可以看作是機(jī)器指令的一種擴(kuò)充。5、自愿中斷事件的處理(1)系統(tǒng)程序或用戶程序執(zhí)行訪管指令而33自愿中斷事件的處理(2)系統(tǒng)調(diào)用機(jī)制通過(guò)特殊硬指令和中斷系統(tǒng)來(lái)實(shí)現(xiàn)。共性處理流程:用戶程序執(zhí)行n號(hào)系統(tǒng)調(diào)用通過(guò)中斷系統(tǒng)進(jìn)入訪管中斷處理,保護(hù)現(xiàn)場(chǎng)通過(guò)系統(tǒng)調(diào)用入口表,按功能號(hào)跳轉(zhuǎn)找到相應(yīng)功能入口地址執(zhí)行相應(yīng)例行程序,結(jié)束后正常情況返回系統(tǒng)調(diào)用的下一條指令執(zhí)行自愿中斷事件的處理(2)系統(tǒng)調(diào)用機(jī)制通過(guò)特殊硬指令和中斷342.2.6中斷優(yōu)先級(jí)和多重中斷1、中斷的優(yōu)先級(jí)2、中斷的屏蔽3、多重中斷事件的處理2.2.6中斷優(yōu)先級(jí)和多重中斷1、中斷的優(yōu)先級(jí)351中斷優(yōu)先級(jí)計(jì)算機(jī)執(zhí)行的每一瞬間,可能有幾個(gè)中斷事件同時(shí)發(fā)生,中斷裝置如何來(lái)響應(yīng)同時(shí)發(fā)生的中斷呢?它按照預(yù)定順序來(lái)響應(yīng),這個(gè)預(yù)定順序稱中斷的優(yōu)先級(jí),首先響應(yīng)優(yōu)先級(jí)高的中斷事件。1中斷優(yōu)先級(jí)計(jì)算機(jī)執(zhí)行的每一瞬間,可能有幾個(gè)中斷事362中斷的屏蔽

?主機(jī)可允許或禁止某類中斷的響應(yīng),如允許或禁止所有的I/O中斷、外部中斷、及某些程序性中斷。?有些中斷是不能被禁止的,例如,計(jì)算機(jī)中的自愿性訪管中斷就不能被禁止。

2中斷的屏蔽?主機(jī)可允許或禁止某類中斷的響應(yīng),如允許或373多重中斷事件的處理

中斷正在進(jìn)行處理期間,這時(shí)CPU又響應(yīng)了新的中斷事件,于是暫時(shí)停止正在運(yùn)行的中斷處理程序,轉(zhuǎn)去執(zhí)行新的中斷處理程序,這就叫多重中斷(又稱中斷嵌套)。

3多重中斷事件的處理

中斷正在進(jìn)行處理期間,這時(shí)382.2.7實(shí)例研究:Windows2000/XP中斷處理

Windows2000/XP中斷類型中斷有I/O設(shè)備、處理器時(shí)鐘或定時(shí)器等,可以啟用或禁用。中斷是異步事件,可能隨時(shí)發(fā)生,與處理器正在執(zhí)行的內(nèi)容無(wú)關(guān)。異常是同步事件,它是某一個(gè)特定指令執(zhí)行的結(jié)果。異常的例子是內(nèi)存訪問(wèn)錯(cuò)誤、調(diào)試指令及被零除。內(nèi)核也將系統(tǒng)服務(wù)調(diào)用視作異常。硬件和軟件都可以產(chǎn)生中斷和異常,如總線出錯(cuò)異常由硬件造成,而被零除異常是由軟件引起的;同樣,I/O設(shè)備可產(chǎn)生中斷,而內(nèi)核自身也可以發(fā)出中斷。

2.2.7實(shí)例研究:Windows2000/XP中斷處理39

Windows2000/XP陷阱調(diào)度

中斷服務(wù)例程中斷服務(wù)例程中斷服務(wù)例程異常調(diào)度器虛存管理的頁(yè)面管理器中斷調(diào)度器系統(tǒng)服務(wù)調(diào)度器異常調(diào)度器陷阱處理程序異常幀虛擬地址異常硬件異常軟件異常系統(tǒng)服務(wù)調(diào)用中斷Windows2000/XP陷阱調(diào)度

中斷服務(wù)中斷服務(wù)40

Windows2000/XP中斷請(qǐng)求級(jí)

系統(tǒng)關(guān)閉高31掉電30處理器內(nèi)的中斷29時(shí)鐘28配置文件設(shè)備n………設(shè)備1Dispatch/DPC2APC1低0硬件中斷軟件中斷正常的線程執(zhí)行

Windows2000/XP中斷請(qǐng)求級(jí)

系統(tǒng)關(guān)閉高41Windows2000/XP中斷屏蔽

高掉電處理器內(nèi)的中斷時(shí)鐘配置文件設(shè)備n………設(shè)備1在處理器A上被屏蔽的中斷Dispatch/DPCAPC低IRQL=時(shí)鐘處理器A在處理器B上被屏蔽的中斷IRQL=Dispatch/DPC處理器BWindows2000/XP中斷屏蔽

高掉電處理器內(nèi)的42Windows2000/XP硬件中斷處理

高掉電處理器間的中斷時(shí)鐘設(shè)備n………設(shè)備1②中斷調(diào)度程序接收到中斷源的IRQL,用作查詢IDT的索引Dispatch/DPCAPC低①有中斷產(chǎn)生………線程調(diào)度程序/DPC處理程序(無(wú))系統(tǒng)關(guān)閉例程系統(tǒng)調(diào)電例程處理器間中斷處理程序時(shí)鐘處理程序設(shè)備nISR設(shè)備1ISRAPC處理程序③中斷調(diào)度程序跟隨該指針,調(diào)用相應(yīng)的處理程序Windows2000/XP硬件中斷處理

高掉電43Windows2000/XP軟件中斷處理

多數(shù)中斷由硬件產(chǎn)生,但內(nèi)核也為多種任務(wù)產(chǎn)生軟件中斷,包括:?jiǎn)?dòng)線程調(diào)度、處理計(jì)時(shí)器到時(shí)、在特定線程的描述表中異步執(zhí)行一個(gè)過(guò)程及支持異步I/O等。延遲過(guò)程調(diào)用DPC軟件中斷Windows2000/XP軟件中斷處理

多數(shù)中斷由硬件產(chǎn)44延遲過(guò)程調(diào)用--提交DPC

高掉電………②如果IRQL降到比Dispatch/DPC級(jí)低,則DPC中斷發(fā)生。Dispatch/DPCAPC低①定時(shí)器到時(shí),內(nèi)核排好DPC隊(duì)列,準(zhǔn)備釋放等候在定時(shí)器上的所有線程,然后內(nèi)核請(qǐng)求軟件中斷。………調(diào)度程序③DPC中斷之后,控制傳送給(線程)調(diào)度程序DPCDPCDPC④調(diào)度程序執(zhí)行DPC中的每一個(gè)DPC例程,然后使隊(duì)列變空。如果需要,調(diào)度程序還重新安排處理器延遲過(guò)程調(diào)用--提交DPC

高掉電…②如果IRQL降到45異步過(guò)程調(diào)用

異步過(guò)程調(diào)用APC為用戶程序和系統(tǒng)代碼提供了一種在特殊用戶線程的描述表(特殊的地址空間)中執(zhí)行代碼的方法。

異步過(guò)程調(diào)用

異步過(guò)程調(diào)用APC為用戶程序和系統(tǒng)代碼提供了一46異常調(diào)度

異常是由運(yùn)行程序的執(zhí)行產(chǎn)生的情況。異常處理工具,允許應(yīng)用程序在異常發(fā)生時(shí)可以得到控制。應(yīng)用程序可以固定這個(gè)狀態(tài)并返回到異常發(fā)生的地方展開堆棧,也可以向系統(tǒng)聲明不能識(shí)別異常,并繼續(xù)搜尋能處理異常的異常處理程序。除陷阱處理程序解決的異常外,所有異常均由異常調(diào)度程序提供服務(wù),它的任務(wù)是找到能處理該異常的異常處理程序。如果異常產(chǎn)生于核心態(tài),異常調(diào)度程序?qū)⒄{(diào)用一個(gè)例程來(lái)定位處理該異常的異常處理程序。沒(méi)有被處理的核心態(tài)異常是一種致命的系統(tǒng)錯(cuò)誤。異常調(diào)度

異常是由運(yùn)行程序的執(zhí)行產(chǎn)生的情況。異常處理工具,允47用戶態(tài)核心態(tài)系統(tǒng)服務(wù)調(diào)用陷阱處理程序系統(tǒng)服務(wù)調(diào)度程序系統(tǒng)服務(wù)調(diào)度表0123………n系統(tǒng)服務(wù)擴(kuò)展系統(tǒng)服務(wù)2系統(tǒng)服務(wù)調(diào)度(1)

用戶態(tài)核心態(tài)系統(tǒng)服務(wù)調(diào)用陷阱處理程序系統(tǒng)服務(wù)系統(tǒng)服務(wù)調(diào)度表048系統(tǒng)服務(wù)調(diào)度(2)

調(diào)用WriteFile()Win32應(yīng)用程序調(diào)用NtWriteFile返回調(diào)用者KERNEL32.DLL中的WriteFileINT2E返回調(diào)用者NTDLL.DLL中的NtWriteFile調(diào)用NtWriteFile開中斷NTOSKRNL.EXE中的KiSystemService執(zhí)行操作返回調(diào)用者NTOSKRNL.EXE中的NtWriteFile調(diào)用USER及GDI服務(wù)應(yīng)用程序INT2E返回調(diào)用者GDI32.DLL或USER32.DLL調(diào)用WIN32例程開中斷NTOSKRNL.EXE中的KiSystemService執(zhí)行操作返回調(diào)用者WIN32K.SYS中的服務(wù)入口點(diǎn)用戶態(tài)核心態(tài)WIN32專用WIN32專用所有子系統(tǒng)使用軟件中斷軟件中斷WIN32內(nèi)核APIWIN32USER及GDIAPI系統(tǒng)服務(wù)調(diào)度(2)調(diào)用Win32應(yīng)用程序調(diào)用NtWri492.2.9實(shí)例研究:Linux中斷處理

1Linux中斷處理過(guò)程2快中斷與慢中斷3底半處理4任務(wù)隊(duì)列5底半處理數(shù)據(jù)結(jié)構(gòu)6底半處理的執(zhí)行過(guò)程7Linux軟中斷機(jī)制2.2.9實(shí)例研究:Linux中斷處理1Linux中斷處50快中斷與慢中斷

?Linux中,可以區(qū)分快中斷和慢中斷兩類中斷事件。?處理慢中斷前需保存所有寄存器的內(nèi)容,而快中斷處理僅要保存被常規(guī)C函數(shù)修改的寄存器;慢中斷處理時(shí),不屏蔽其他中斷信號(hào),而快中斷處理時(shí)會(huì)屏蔽所有其他中斷;?慢中斷處理完畢后,通常不立即返回被中斷的進(jìn)程,而是進(jìn)入調(diào)度程序重新調(diào)度,調(diào)度結(jié)果未必是被中斷的進(jìn)程運(yùn)行(是搶先式調(diào)度)。而快中斷處理完畢后,通常恢復(fù)現(xiàn)場(chǎng)返回被中斷的進(jìn)程繼續(xù)執(zhí)行(是非搶先式調(diào)度)。快中斷與慢中斷

?Linux中,可以區(qū)分快中斷和慢中斷兩類中51底半處理

?為了盡快縮短快中斷處理時(shí)間,以便及時(shí)響應(yīng)處理期間到達(dá)的其他中斷信號(hào),引入了底半處理的概念。(1)什么是底半處理?(2)為什么需要有底半處理??bottomhalfhandling是一種任務(wù)延遲處理機(jī)制

?“硬中斷”是外部設(shè)備對(duì)CPU的中斷,tophalf是硬中斷;同時(shí),“軟中斷”通常是硬中斷服務(wù)程序?qū)?nèi)核的中斷,bottomhalf是軟中斷;而“信號(hào)”也是一種軟中斷,“信號(hào)”是由內(nèi)核或進(jìn)程對(duì)其他進(jìn)程的中斷。

底半處理

?為了盡快縮短快中斷處理時(shí)間,以便及時(shí)響應(yīng)處理52任務(wù)隊(duì)列

?Linux內(nèi)核中設(shè)立任務(wù)隊(duì)列,這是核心對(duì)任務(wù)進(jìn)行延遲處理的方法,提供對(duì)任務(wù)隊(duì)列中任務(wù)排隊(duì)及處理的通用機(jī)制。?任務(wù)隊(duì)列和底半處理過(guò)程bottomhalf的關(guān)系??核心建立和維護(hù)三個(gè)一般性任務(wù)隊(duì)列:(1)定時(shí)器隊(duì)列(TQ-TIMER)(2)即時(shí)隊(duì)列(TQ-IMMEDIATE)(3)進(jìn)程調(diào)度隊(duì)列(TQ-SCHEDULER任務(wù)隊(duì)列?Linux內(nèi)核中設(shè)立任務(wù)隊(duì)列,這是核心對(duì)任務(wù)進(jìn)53底半處理數(shù)據(jù)結(jié)構(gòu)

··bh-active310bh-mask310bh-base底半處理過(guò)程031底半處理數(shù)據(jù)結(jié)構(gòu)bh-acti54底半處理的執(zhí)行過(guò)程

三種情況下執(zhí)行bottomhalf處理過(guò)程:當(dāng)調(diào)度程序欲選擇下一個(gè)運(yùn)行進(jìn)程之前(Schedule())。當(dāng)從系統(tǒng)調(diào)用返回之前(ret_from_syscall)。當(dāng)每個(gè)中斷處理和異常處理返回前(ret_from_intr和ret_from_exception)。定時(shí)器中斷(IRQ0)中斷服務(wù)例程的tophalf與bottomhalf處理過(guò)程間的聯(lián)系。定時(shí)器中斷服務(wù)例程(函數(shù))叫timer-interrupt,執(zhí)行它的tophalf函數(shù)為do-timer。執(zhí)行它的bottomhalf函數(shù)為timer-bh。底半處理的執(zhí)行過(guò)程

三種情況下執(zhí)行bottomhalf55Linux軟中斷機(jī)制

Linux的bottomhalfLinux的taskletLinux的softirqLinux軟中斷機(jī)制

Linux的bottomhalf562.3進(jìn)程及其實(shí)現(xiàn)

2.3.1進(jìn)程的定義和屬性2.3.2進(jìn)程的狀態(tài)和轉(zhuǎn)換2.3.3進(jìn)程的描述2.3.4進(jìn)程切換與模式切換2.3.5進(jìn)程的控制2.3.6實(shí)例研究:UNIXSVR4進(jìn)程管理2.3.7實(shí)例研究:Linux進(jìn)程管理2.3進(jìn)程及其實(shí)現(xiàn)

2.3.1進(jìn)程的定義和屬性572.3.1進(jìn)程的定義和性質(zhì)

?進(jìn)程是一個(gè)可并發(fā)執(zhí)行的具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過(guò)程,也是操作系統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位。?進(jìn)程是一個(gè)既能用來(lái)共享資源,又能描述程序并發(fā)執(zhí)行過(guò)程的一個(gè)基本單位。?操作系統(tǒng)引入進(jìn)程的概念從理論角度看,是對(duì)正在運(yùn)行的程序過(guò)程的抽象;從實(shí)現(xiàn)角度看,是一種數(shù)據(jù)結(jié)構(gòu),目的在于清晰地刻劃動(dòng)態(tài)系統(tǒng)的內(nèi)在規(guī)律,有效管理和調(diào)度進(jìn)入計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器運(yùn)行的程序。2.3.1進(jìn)程的定義和性質(zhì)

?進(jìn)程是一個(gè)可并發(fā)執(zhí)行的具有獨(dú)58操作系統(tǒng)為什么要引入進(jìn)程概念?原因1-刻畫系統(tǒng)的動(dòng)態(tài)性,發(fā)揮系統(tǒng)的并發(fā)性,提高資源利用率。原因2-它能解決系統(tǒng)的“共享性”,正確描述程序的執(zhí)行狀態(tài)。“可再用”程序“可再入”程序“可再入”程序具有的性質(zhì)操作系統(tǒng)為什么要引入進(jìn)程概念?原因1-刻畫系統(tǒng)的動(dòng)態(tài)性,發(fā)揮59

進(jìn)程的屬性

?結(jié)構(gòu)性:?共享性:?動(dòng)態(tài)性:?獨(dú)立性:?制約性:?并發(fā)性:

進(jìn)程的屬性?結(jié)構(gòu)性:60“可再入”程序舉例

編譯程序P(P的入口,處理源程序乙)(P把源程序甲的信息記盤等磁盤完成)AB源程序甲源程序乙“可再入”程序舉例

編譯程序P(P的入口,處理源程序乙612.3.2進(jìn)程的狀態(tài)和轉(zhuǎn)換

進(jìn)程三態(tài)模型及其狀態(tài)轉(zhuǎn)換

運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待事件等待事件結(jié)束2.3.2進(jìn)程的狀態(tài)和轉(zhuǎn)換

進(jìn)程三態(tài)模型及其狀態(tài)轉(zhuǎn)換

運(yùn)62進(jìn)程五態(tài)模型及其轉(zhuǎn)換運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待事件等待事件結(jié)束新建態(tài)終止態(tài)進(jìn)程五態(tài)模型及其轉(zhuǎn)換運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待等待事63進(jìn)程的掛起

為什么要有“掛起”狀態(tài)?由于進(jìn)程的不斷創(chuàng)建,系統(tǒng)資源已不能滿足進(jìn)程運(yùn)行的要求,就必須把某些進(jìn)程掛起(suspend),對(duì)換到磁盤鏡像區(qū)中,暫時(shí)不參與進(jìn)程調(diào)度,起到平滑系統(tǒng)操作負(fù)荷的目的。

進(jìn)程的掛起

為什么要有“掛起”狀態(tài)?64進(jìn)程的掛起原因(1)

(1)系統(tǒng)中的進(jìn)程均處于等待狀態(tài),需要把一些阻塞進(jìn)程對(duì)換出去,騰出足夠內(nèi)存裝入就緒進(jìn)程運(yùn)行。(2)進(jìn)程競(jìng)爭(zhēng)資源,導(dǎo)致系統(tǒng)資源不足,負(fù)荷過(guò)重,需要掛起部分進(jìn)程以調(diào)整系統(tǒng)負(fù)荷,保證系統(tǒng)的實(shí)時(shí)性或讓系統(tǒng)正常運(yùn)行。(3)定期執(zhí)行的進(jìn)程(如審計(jì)、監(jiān)控、記賬程序)對(duì)換出去,以減輕系統(tǒng)負(fù)荷。

進(jìn)程的掛起原因(1)

(1)系統(tǒng)中的進(jìn)程均處于等待狀65進(jìn)程的掛起原因(2)

(4)用戶要求掛起自己的進(jìn)程,以便進(jìn)行某些調(diào)試、檢查和改正。(5)父進(jìn)程要求掛起后代進(jìn)程,以進(jìn)行某些檢查和改正。(6)操作系統(tǒng)需要掛起某些進(jìn)程,檢查運(yùn)行中資源使用情況,以改善系統(tǒng)性能;或當(dāng)系統(tǒng)出現(xiàn)故障或某些功能受到破壞時(shí),需要掛起某些進(jìn)程以排除故障。進(jìn)程的掛起原因(2)

(4)用戶要求掛起自己的進(jìn)程,66具有掛起功能的進(jìn)程狀態(tài)及其轉(zhuǎn)換

掛起等待事件結(jié)束出現(xiàn)等待事件解除掛起掛起落選選中運(yùn)行態(tài)就緒態(tài)等待事件結(jié)束終止態(tài)新建態(tài)掛起就緒態(tài)解除掛起掛起掛起等待態(tài)等待態(tài)提交提交具有掛起功能的進(jìn)程狀態(tài)及其轉(zhuǎn)換

掛起等待事件結(jié)束出現(xiàn)等待事67具有掛起進(jìn)程功能的進(jìn)程狀態(tài)

進(jìn)程增加了兩個(gè)新?tīng)顟B(tài):掛起就緒態(tài)(readysuspend)表明進(jìn)程具備運(yùn)行條件但目前在二級(jí)存儲(chǔ)器中,當(dāng)它被對(duì)換到主存才能被調(diào)度執(zhí)行。掛起等待態(tài)(blockedsuspend)表明進(jìn)程正在等待某一個(gè)事件且在二級(jí)存儲(chǔ)器中。具有掛起進(jìn)程功能的進(jìn)程狀態(tài)進(jìn)程增加了68掛起進(jìn)程具有如下特征

?該進(jìn)程不能立即被執(zhí)行。?掛起進(jìn)程可能會(huì)等待事件,但所等待事件是獨(dú)立于掛起條件的,事件結(jié)束并不能導(dǎo)致進(jìn)程具備執(zhí)行條件。?進(jìn)程進(jìn)入掛起狀態(tài)是由于操作系統(tǒng)、父進(jìn)程或進(jìn)程本身阻止它的運(yùn)行。?結(jié)束進(jìn)程掛起狀態(tài)的命令只能通過(guò)操作系統(tǒng)或父進(jìn)程發(fā)出。掛起進(jìn)程具有如下特征

?該進(jìn)程不能立即被執(zhí)行。692.3.3進(jìn)程的描述操作系統(tǒng)核心控制結(jié)構(gòu)是進(jìn)程結(jié)構(gòu),資源管理的數(shù)據(jù)結(jié)構(gòu)將圍繞進(jìn)程結(jié)構(gòu)展開。操作系統(tǒng)的控制表分為四類,進(jìn)程控制表,存儲(chǔ)控制表,I/O控制表和文件控制表。2.3.3進(jìn)程的描述操作系統(tǒng)核心控制結(jié)構(gòu)是進(jìn)程結(jié)構(gòu),資源管70操作系統(tǒng)控制表的通用結(jié)構(gòu)

MemoryDevicesFilesProcessesMemoryTablesI/OTablesFileTablesPrimaryProcessTableProcess1……ProcessNProcess2ProcessImageProcess1Image……ProcessNImage操作系統(tǒng)控制表的通用結(jié)構(gòu)

MemoryDevicesFi71

進(jìn)程映像

操作系統(tǒng)中把進(jìn)程物理實(shí)體和支持進(jìn)程運(yùn)行的環(huán)境合稱為進(jìn)程上下文(context)。當(dāng)系統(tǒng)調(diào)度新進(jìn)程占有處理器時(shí),新老進(jìn)程隨之發(fā)生上下文切換。進(jìn)程的運(yùn)行被認(rèn)為是在上下文中執(zhí)行。

進(jìn)程映像

操作系統(tǒng)中把進(jìn)程物理實(shí)體和支持進(jìn)程運(yùn)行的環(huán)境合72進(jìn)程上下文組成

?用戶級(jí)上下文:由用戶程序塊、用戶數(shù)據(jù)塊和用戶堆棧組成的進(jìn)程地址空間。?系統(tǒng)級(jí)上下文:包括進(jìn)程的標(biāo)識(shí)信息、現(xiàn)場(chǎng)信息和控制信息,進(jìn)程環(huán)境塊,及系統(tǒng)堆棧等組成的進(jìn)程地址空間。?寄存器上下文:由PSW寄存器和各類控制寄存器、地址寄存器、通用寄存器組成。進(jìn)程上下文組成?用戶級(jí)上下文:由用戶程序塊、用戶數(shù)據(jù)塊和用73進(jìn)程有四個(gè)要素組成

?進(jìn)程程序塊?進(jìn)程數(shù)據(jù)塊?系統(tǒng)堆棧?用戶堆棧進(jìn)程有四個(gè)要素組成

?進(jìn)程程序塊74用戶進(jìn)程在虛擬內(nèi)存中的組織

進(jìn)程標(biāo)識(shí)信息進(jìn)程現(xiàn)場(chǎng)信息進(jìn)程控制信息用戶堆棧用戶私有地址空間(代碼、數(shù)據(jù))進(jìn)程控制塊共享地址空間用戶進(jìn)程在虛擬內(nèi)存中的組織

進(jìn)程標(biāo)識(shí)信息進(jìn)程現(xiàn)場(chǎng)信息進(jìn)程75

進(jìn)程控制塊

進(jìn)程控制塊PCB,是操作系統(tǒng)用于記錄和刻劃進(jìn)程狀態(tài)及有關(guān)信息的數(shù)據(jù)結(jié)構(gòu)。也是操作系統(tǒng)掌握進(jìn)程的唯一資料結(jié)構(gòu),它包括了進(jìn)程執(zhí)行時(shí)的情況,以及進(jìn)程讓出處理器后所處的狀態(tài)、斷點(diǎn)等信息。進(jìn)程控制塊包含三類信息標(biāo)識(shí)信息現(xiàn)場(chǎng)信息控制信息

進(jìn)程控制塊

進(jìn)程控制塊PCB,是操作系統(tǒng)用于記錄和刻76

進(jìn)程管理

處于同一狀態(tài)的所有PCB鏈接在一起的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程隊(duì)列(ProcessQueues)。同一狀態(tài)進(jìn)程的PCB既可按先來(lái)先到的原則排成隊(duì)列;也可按優(yōu)先數(shù)或其它原則排成隊(duì)列。單向鏈接與雙向鏈接

進(jìn)程管理

處于同一狀態(tài)的所有PCB鏈接在一起的數(shù)據(jù)結(jié)構(gòu)稱77隊(duì)列標(biāo)志

系統(tǒng)為每個(gè)隊(duì)列設(shè)置一個(gè)隊(duì)列標(biāo)志:單向鏈接時(shí),隊(duì)列標(biāo)志指引元指向隊(duì)列中第一個(gè)進(jìn)程的隊(duì)列指引元的位置;雙向鏈接時(shí),隊(duì)列標(biāo)志的后向指引元指向隊(duì)列中第一個(gè)進(jìn)程的后向隊(duì)列指引元的位置;隊(duì)列標(biāo)志的前向指引元指向隊(duì)列中最后一個(gè)進(jìn)程的前向隊(duì)列指引元的位置隊(duì)列標(biāo)志

系統(tǒng)為每個(gè)隊(duì)列設(shè)置一個(gè)隊(duì)列標(biāo)志:78進(jìn)程控制塊的鏈接

隊(duì)列標(biāo)志0隊(duì)列標(biāo)志00后向前向(a)單向連接(b)雙向連接是隊(duì)列指引元進(jìn)程控制塊的鏈接

隊(duì)列標(biāo)志0隊(duì)列標(biāo)志00后向前向(a)79隊(duì)列管理和狀態(tài)轉(zhuǎn)換示意圖

處理器指派提交完成超時(shí)事件1等待隊(duì)列事件2等待隊(duì)列事件n等待隊(duì)列就緒隊(duì)列……等待事件1等待事件2等待事件n事件1出現(xiàn)事件2出現(xiàn)事件n出現(xiàn)隊(duì)列管理和狀態(tài)轉(zhuǎn)換示意圖

處理器指派提交完成超時(shí)事件1等80表格法組織PCB表格法組織PCB。所有進(jìn)程的PCB都組織在一個(gè)線性表中,進(jìn)程調(diào)度時(shí)需要查找整個(gè)PCB表;也可以把相同狀態(tài)進(jìn)程的PCB組織在一個(gè)線性表中,系統(tǒng)有多個(gè)線性表,這樣可縮短查表時(shí)間。表格法組織PCB表格法組織PCB。所有進(jìn)程的PCB都組織在一812.3.4進(jìn)程切換與CPU模式切換

進(jìn)程切換是讓處于運(yùn)行態(tài)的進(jìn)程中斷運(yùn)行,讓出處理器,這時(shí)要做一次進(jìn)程上下文切換、即保存老進(jìn)程狀態(tài)而裝入被保護(hù)了的新進(jìn)程的狀態(tài),以便新進(jìn)程運(yùn)行2.3.4進(jìn)程切換與CPU模式切換

進(jìn)程切換是讓處于運(yùn)行82進(jìn)程切換的步驟保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng)信息修改被中斷進(jìn)程的進(jìn)程控制塊的有關(guān)信息,如進(jìn)程狀態(tài)等把被中斷進(jìn)程的進(jìn)程控制塊加入有關(guān)隊(duì)列選擇下一個(gè)占有處理器運(yùn)行的進(jìn)程修改被選中進(jìn)程的進(jìn)程控制塊的有關(guān)信息根據(jù)被選中進(jìn)程設(shè)置操作系統(tǒng)用到的地址轉(zhuǎn)換和存儲(chǔ)保護(hù)信息根據(jù)被選中進(jìn)程恢復(fù)處理器現(xiàn)場(chǎng)進(jìn)程切換的步驟保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng)信息83調(diào)度和切換時(shí)機(jī)問(wèn)題

?請(qǐng)求調(diào)度的事件發(fā)生后,就會(huì)運(yùn)行低級(jí)調(diào)度程序,低級(jí)調(diào)度程序選中新的就緒進(jìn)程后,就會(huì)進(jìn)行上下文切換。實(shí)際上,由于種種原因,調(diào)度和切換并不一定能一氣呵成。?通常的做法是,由內(nèi)核置上請(qǐng)求調(diào)度標(biāo)志,延遲到上述工作完成后再進(jìn)行調(diào)度和進(jìn)程上下文切換,?Linux進(jìn)程調(diào)度標(biāo)志位need-resched,Windows延遲過(guò)程調(diào)用DPC/dispatch軟件中斷。調(diào)度和切換時(shí)機(jī)問(wèn)題?請(qǐng)求調(diào)度的事件發(fā)生后,就會(huì)運(yùn)行低級(jí)調(diào)84CPU模式切換?當(dāng)中斷發(fā)生時(shí),暫時(shí)中斷正在執(zhí)行的用戶進(jìn)程,把進(jìn)程從用戶狀態(tài)切換到內(nèi)核狀態(tài),去執(zhí)行操作系統(tǒng)例行程序以獲得服務(wù),這就是一次模式切換,?內(nèi)核在被中斷了的進(jìn)程的上下文中對(duì)這個(gè)中斷事件作處理,即使該中斷可能不是此進(jìn)程引起的CPU模式切換?當(dāng)中斷發(fā)生時(shí),暫時(shí)中斷正在執(zhí)行的用戶進(jìn)程,85模式切換的步驟?保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng)信息。?根據(jù)中斷號(hào)置程序計(jì)數(shù)器。?把用戶狀態(tài)切換到內(nèi)核狀態(tài),以便執(zhí)行中斷處理程序。模式切換的步驟?保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng)信息。86CPU模式切換與進(jìn)程上下文切換模式切換不同于進(jìn)程切換,它并不引起進(jìn)程狀態(tài)變化,也不一定引起進(jìn)程的切換,在完成了中斷調(diào)用之后,完全可以再通過(guò)一次逆向的模式切換來(lái)繼續(xù)執(zhí)行用戶進(jìn)程。CPU模式切換與進(jìn)程上下文切換模式切換不同于進(jìn)程切換,它并不87UNIX中進(jìn)程上下文切換和模式切換

核心態(tài)運(yùn)行系統(tǒng)調(diào)用或中斷(隱含模式切換)模式切換用戶態(tài)運(yùn)行等待狀態(tài)就緒狀態(tài)發(fā)生事件喚醒調(diào)度進(jìn)程中斷、中斷返回允許的上下文切換切換UNIX中進(jìn)程上下文切換和模式切換

核心態(tài)系統(tǒng)調(diào)用或中斷(882.3.5進(jìn)程的控制

處理器管理的一個(gè)主要工作是對(duì)進(jìn)程的控制,包括:創(chuàng)建進(jìn)程、阻塞進(jìn)程、喚醒進(jìn)程、掛起進(jìn)程、激活進(jìn)程、終止進(jìn)程和撤銷進(jìn)程等。這些控制和管理功能由操作系統(tǒng)中的原語(yǔ)實(shí)現(xiàn)。原語(yǔ)(Primitive)是在管態(tài)下執(zhí)行、完成系統(tǒng)特定功能的過(guò)程。原語(yǔ)和機(jī)器指令類似,其特點(diǎn)是執(zhí)行過(guò)程中不允許被中斷,是一個(gè)不可分割的基本單位,原語(yǔ)的執(zhí)行是順序的而不可能是并發(fā)的。2.3.5進(jìn)程的控制

處理器管理的892.3.6實(shí)例研究:UNIXSVR4的

進(jìn)程管理

UNIXSVR4采用基于用戶進(jìn)程的運(yùn)行模型,操作系統(tǒng)功能在用戶進(jìn)程的環(huán)境中執(zhí)行,需要在用戶和內(nèi)核模式間切換。UNIXSVR4允許兩類進(jìn)程:用戶進(jìn)程和系統(tǒng)進(jìn)程。系統(tǒng)進(jìn)程在內(nèi)核模式下執(zhí)行,完成系統(tǒng)的一些重要功能。用戶進(jìn)程在用戶模式下執(zhí)行用戶程序,系統(tǒng)調(diào)用、中斷和異常將引起模式切換。?UNIXSVR4

進(jìn)程狀態(tài)?userrunning:?kernelrunning:?preempted:?readytorun,inmemory:?Asleepinmemory:?readytorun,swapped:?sleeping,swapped:?zombie:2.3.6實(shí)例研究:UNIXSVR4的

進(jìn)程管理

UNI90

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

內(nèi)存就緒用戶態(tài)運(yùn)行內(nèi)核態(tài)運(yùn)行被剝奪就緒換出創(chuàng)建內(nèi)存睡眠睡眠換出僵死返回用戶模式系統(tǒng)調(diào)用或中斷返回剝奪選中退出中斷,中斷返回內(nèi)存空間足夠內(nèi)存空間不足喚醒喚醒換出換進(jìn)換出睡眠Fork

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

內(nèi)存就緒用戶態(tài)內(nèi)核91

UNIXSVR4的進(jìn)程描述

UNIX進(jìn)程由三部分組成:proc結(jié)構(gòu)、數(shù)據(jù)段和正文段,合稱進(jìn)程映像,UNIX中把進(jìn)程定義為映像的執(zhí)行。PCB由基本控制塊proc結(jié)構(gòu)和擴(kuò)充控制塊user結(jié)構(gòu)組成。proc結(jié)構(gòu)存放一個(gè)進(jìn)程最基本、必需的信息,常駐內(nèi)存;user結(jié)構(gòu)存放進(jìn)程運(yùn)行時(shí)才用到的數(shù)據(jù)和狀態(tài)信息,當(dāng)進(jìn)程暫時(shí)不在處理機(jī)上運(yùn)行時(shí),就把它放在磁盤的對(duì)換區(qū)中,進(jìn)程的user結(jié)構(gòu)總和進(jìn)程的數(shù)據(jù)段一起,在主存和磁盤對(duì)換區(qū)之間換進(jìn)/換出

UNIXSVR4的進(jìn)程描述

UNIX進(jìn)程由三部分組成:p92UNIXSVR4進(jìn)程組成

processstructureuserstructurekernelstacktextstructurestackdatatextSystemdatastructureuserspaceSwappableprocessimageResidenttablesUNIXSVR4進(jìn)程組成

processuserkern93UNIXSVR4的進(jìn)程創(chuàng)建

fork()創(chuàng)建子進(jìn)程,系統(tǒng)執(zhí)行操作:?為子進(jìn)程分配進(jìn)程表。?為子進(jìn)程分配進(jìn)程標(biāo)識(shí)符。?復(fù)制父進(jìn)程的進(jìn)程映像,但不復(fù)制共享內(nèi)存區(qū)。?增加父進(jìn)程所打開文件的計(jì)數(shù),表示新進(jìn)程也在使用這些文件。?把子進(jìn)程置為readytorun狀態(tài)。?返回子進(jìn)程標(biāo)識(shí)符給父進(jìn)程,把0值返回給子進(jìn)程。UNIXSVR4的進(jìn)程創(chuàng)建

fork()創(chuàng)建子進(jìn)程,942.3.7實(shí)例研究:Linux進(jìn)程管理

Linux的進(jìn)程概念與傳統(tǒng)操作系統(tǒng)中的進(jìn)程概念完全一致,進(jìn)程是操作系統(tǒng)調(diào)度的最小單位。用戶態(tài)稱進(jìn)程,核心態(tài)稱任務(wù),實(shí)質(zhì)上是一個(gè)實(shí)體2.3.7實(shí)例研究:Linux進(jìn)程管理

Lin95Linux的進(jìn)程狀態(tài)

?TASK_RUNNING:?TASK_INTERRUPTIBLE:?TASK_UNINTERRUPTIBLE:

?TASK_ZOMBIE:?TASK_STOPPED:?TASK_SWAPPING:Linux的進(jìn)程狀態(tài)

?TASK_RUNNING:96Linux的進(jìn)程狀態(tài)轉(zhuǎn)換

僵死TASK_ZOMBIE就緒TASK_RUNNING不可中斷TASK_UNINTERRUPTIBLE可中斷TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU運(yùn)行調(diào)度schedulle時(shí)間片到申請(qǐng)資源未果,調(diào)用interruptible_sleep_on()申請(qǐng)資源未果,調(diào)用sleep_on()申請(qǐng)資源可用后wake_up()申請(qǐng)資源可用,收到信號(hào)、wake_up()wake_up_interruptible()創(chuàng)建do_fork()執(zhí)行do_exit()跟蹤系統(tǒng)調(diào)用,執(zhí)行syscall_trace()sys_exit()schedulle()收到SIG_KILL或SIG_CONT后,執(zhí)行wake_up()Linux的進(jìn)程狀態(tài)轉(zhuǎn)換僵死TASK_ZOMBIE就緒T97Linux創(chuàng)建進(jìn)程

?sys_fork()和sys_clone都通過(guò)調(diào)用do_fork()函數(shù)來(lái)完成進(jìn)程的創(chuàng)建。?分配進(jìn)程控制塊task_struct的內(nèi)存和進(jìn)程所需的堆棧,并監(jiān)測(cè)是否可以增加新進(jìn)程;?拷貝當(dāng)前進(jìn)程的內(nèi)容,并對(duì)數(shù)據(jù)成員初始化;為進(jìn)程運(yùn)行做準(zhǔn)備;返回生成的新進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)(pid)。如果進(jìn)程是根據(jù)sys_clone()產(chǎn)生的,它的進(jìn)程標(biāo)識(shí)號(hào)就是當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào),并且進(jìn)程控制塊中的一些成員指針并不進(jìn)行復(fù)制,僅僅把這些成員指針的計(jì)數(shù)count增加1。這樣,父子進(jìn)程可以有效地共享資源。Linux創(chuàng)建進(jìn)程?sys_fork()和sys_cl98Linux進(jìn)程終止進(jìn)程終止的系統(tǒng)調(diào)用sys_exit()通過(guò)調(diào)用do_exit()函數(shù)實(shí)現(xiàn)。函數(shù)do_exit()釋放進(jìn)程占用的大部分資源,進(jìn)入TASK_ZOMBIE狀態(tài)。Linux進(jìn)程終止進(jìn)程終止的系統(tǒng)調(diào)用sys_exit()通過(guò)992.4線程及其實(shí)現(xiàn)

2.4.1引入多線程技術(shù)的動(dòng)機(jī)2.4.2多線程環(huán)境中的進(jìn)程和線程2.4.3線程的實(shí)現(xiàn)2.4.4實(shí)例研究:Solaris的進(jìn)程與線程2.4.5實(shí)例研究:Windows2000/XP的進(jìn)程與線程2.4線程及其實(shí)現(xiàn)

2.4.1引入多線程技術(shù)的動(dòng)機(jī)1002.4.1引入多線程技術(shù)的動(dòng)機(jī)

考察一個(gè)文件服務(wù)器的例子單線程(結(jié)構(gòu))進(jìn)程(SingleThreadedProcess)多線程(結(jié)構(gòu))進(jìn)程(MultipleThreadedprocess)2.4.1引入多線程技術(shù)的動(dòng)機(jī)

考察一個(gè)文件服101

單線程結(jié)構(gòu)進(jìn)程給并發(fā)程序設(shè)計(jì)效率帶來(lái)問(wèn)題

?進(jìn)程切換開銷大?進(jìn)程通信代價(jià)大?進(jìn)程間的并發(fā)性粒度較粗,并發(fā)度不高?不適合并行計(jì)算和分布并行計(jì)算的要求?不適合客戶/服務(wù)器計(jì)算的要求。單線程結(jié)構(gòu)進(jìn)程給并發(fā)程序設(shè)計(jì)效率帶來(lái)問(wèn)題

?進(jìn)程切換102線程的概念(1)操作系統(tǒng)中引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)執(zhí)行,以改善資源使用率和提高系統(tǒng)效率,操作系統(tǒng)中再引入線程,則是為了減少程序并發(fā)執(zhí)行時(shí)所付出的時(shí)空開銷,使得并發(fā)粒度更細(xì)、并發(fā)性更好。線程的概念(1)操作系統(tǒng)中引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)103線程的概念(2)

解決問(wèn)題的基本思路:?把進(jìn)程的兩項(xiàng)功能--“獨(dú)立分配資源”與“被調(diào)度分派執(zhí)行”分離開來(lái),?進(jìn)程作為系統(tǒng)資源分配和保護(hù)的獨(dú)立單位,不需要頻繁地切換;?線程作為系統(tǒng)調(diào)度和分派的基本單位,能輕裝運(yùn)行,會(huì)被頻繁地調(diào)度和切換,在這種指導(dǎo)思想下,產(chǎn)生了線程的概念。線程的概念(2)解決問(wèn)題的基本思路:1042.4.2多線程環(huán)境中的進(jìn)程與線程

單線程進(jìn)程的內(nèi)存布局和運(yùn)行進(jìn)程控制塊進(jìn)程用戶地址空間用戶堆棧系統(tǒng)堆棧管理者執(zhí)行序列單線程進(jìn)程(模型)

用戶地址空間進(jìn)程控制塊用戶堆棧系統(tǒng)堆棧2.4.2多線程環(huán)境中的進(jìn)程與線程

單線程進(jìn)程的105

管理和執(zhí)行相分離的進(jìn)程模型

用戶堆棧系統(tǒng)堆棧執(zhí)行控制進(jìn)程進(jìn)程控制塊用戶地址空間共享執(zhí)行序列管理者執(zhí)行序列用戶堆棧系統(tǒng)堆棧執(zhí)行控制管理和執(zhí)行相分離的進(jìn)程模型

用戶堆棧系統(tǒng)堆棧執(zhí)行控制進(jìn)106

多線程進(jìn)程的內(nèi)存布局

多線程進(jìn)程模型

用戶地址空間進(jìn)程控制塊線程控制塊系統(tǒng)堆棧用戶堆棧線程1線程控制塊系統(tǒng)堆棧用戶堆棧線程N(yùn)多線程進(jìn)程的內(nèi)存布局

多線程進(jìn)程模型用戶進(jìn)程線程控制塊系107多線程環(huán)境中進(jìn)程的定義

進(jìn)程是操作系統(tǒng)中進(jìn)行保護(hù)和資源分配的基本單位。它具有:?一個(gè)虛擬地址空間,用來(lái)容納進(jìn)程的映像;?對(duì)處理器、其他(通信的)進(jìn)程、文件和I/O資源等的存取保護(hù)機(jī)制。多線程環(huán)境中進(jìn)程的定義進(jìn)程是操作系統(tǒng)中進(jìn)行保護(hù)和資源分配108

多線程環(huán)境中的線程概念

線程是操作系統(tǒng)進(jìn)程中能夠獨(dú)立執(zhí)行的實(shí)體(控制流),是處理器調(diào)度和分派的基本單位。線程是進(jìn)程的組成部分,每個(gè)進(jìn)程內(nèi)允許包含多個(gè)并發(fā)執(zhí)行的實(shí)體(控制流),這就是多線程。

多線程環(huán)境中的線程概念

線程是操作系統(tǒng)進(jìn)程中能夠獨(dú)立109線程組成與特性?組成?線程執(zhí)行狀態(tài)(運(yùn)行、就緒、…);?當(dāng)線程不運(yùn)行時(shí),有一個(gè)受保護(hù)的線程上下文,用于存儲(chǔ)現(xiàn)場(chǎng)信息。所以,線程也可被看作是執(zhí)行在進(jìn)程內(nèi)的一個(gè)獨(dú)立的程序計(jì)數(shù)器;?一個(gè)執(zhí)行堆棧?一個(gè)容納局部變量的主存存儲(chǔ)區(qū)。?特性并行性:共享性:動(dòng)態(tài)性:結(jié)構(gòu)性:線程組成與特性?組成110線程又稱輕量進(jìn)程

?線程運(yùn)行在進(jìn)程的上下文中,并使用進(jìn)程的資源和環(huán)境。?系統(tǒng)調(diào)度的基本單位是線程而不是進(jìn)程,每當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),至少要同時(shí)為該進(jìn)程創(chuàng)建一個(gè)線程,否則該進(jìn)程無(wú)法被調(diào)度執(zhí)行。線程又稱輕量進(jìn)程?線程運(yùn)行在進(jìn)程的上下文中,并使用進(jìn)程的111

線程的狀態(tài)

線程狀態(tài)有:運(yùn)行、就緒和阻塞,線程的狀態(tài)轉(zhuǎn)換也類似于進(jìn)程。掛起狀態(tài)對(duì)線程是沒(méi)有意義的,如果進(jìn)程掛起后被對(duì)換出主存,則它的所有線程因共享了進(jìn)程的地址空間,也必須全部對(duì)換出去。

線程的狀態(tài)

線程狀態(tài)有:運(yùn)行、就緒和阻塞,線程的狀態(tài)轉(zhuǎn)換也112線程管理和線程庫(kù)(1)多線程技術(shù)利用線程包(庫(kù))提供線程原語(yǔ)集來(lái)支持多線程運(yùn)行,有的操作系統(tǒng)直接支持多線程,而有的操作系統(tǒng)不支持多線程。線程包(庫(kù))可分成兩種:用戶空間中運(yùn)行的線程包(庫(kù))和內(nèi)核中運(yùn)行的線程包(庫(kù))。線程管理和線程庫(kù)(1)多線程技術(shù)利用線程包(庫(kù))提供線程原語(yǔ)113線程管理和線程庫(kù)(2)

線程包(庫(kù))提供一組API,支持應(yīng)用程序創(chuàng)建、調(diào)度、撤銷和管理線程的運(yùn)行?;揪€程控制原語(yǔ):?孵化(Spawn):又稱創(chuàng)建線程。?封鎖(Block):又稱阻塞線程。?活化(Unblock):又稱恢復(fù)線程。?結(jié)束(Finish):又稱撤銷線程。線程管理和線程庫(kù)(2)

線程包(庫(kù))提供一組API,支持114并發(fā)多線程程序設(shè)計(jì)的優(yōu)點(diǎn)

?快速線程切換。?減少(系統(tǒng))管理開銷。?(線程)通信易于實(shí)現(xiàn)。?(線程)通信易于實(shí)現(xiàn)。?并行程度提高。?節(jié)省內(nèi)存空間。并發(fā)多線程程序設(shè)計(jì)的優(yōu)點(diǎn)

?快速線程切換。115

多線程技術(shù)的應(yīng)用

進(jìn)程中線程多種組織方式:第一種是調(diào)度員/工作者模式第二種是組模式第三種是流水線模式

多線程技術(shù)的應(yīng)用

?前臺(tái)和后臺(tái)工作?C/S應(yīng)用模式?異步處理?加快執(zhí)行速度。?設(shè)計(jì)用戶接口。

多線程技術(shù)的應(yīng)用

進(jìn)程中線程多種組織方式:1162.4.3線程的實(shí)現(xiàn)

從實(shí)現(xiàn)的角度看,線程可以分成:?用戶級(jí)線程ULT(如Java,Informix)?內(nèi)核級(jí)線程KLT(如OS/2)。?混合式線程(如,Solaris)。2.4.3線程的實(shí)現(xiàn)

從實(shí)現(xiàn)的角度看,線程可以分成:117各種線程實(shí)現(xiàn)方法

用戶空間線程庫(kù)P內(nèi)核空間2)用戶級(jí)線程用戶空間P內(nèi)核空間1)內(nèi)核級(jí)線程用戶空間線程庫(kù)PP內(nèi)核空間3)混合式線程ULTKLTProcessP各種線程實(shí)現(xiàn)方法用戶空間線程庫(kù)P內(nèi)核空間2)用戶級(jí)用戶空間1181.內(nèi)核級(jí)線程(1)

純內(nèi)核級(jí)線程設(shè)施中,線程管理的所有工作由操作系統(tǒng)內(nèi)核做。內(nèi)核專門提供KLTAPI,應(yīng)用程序區(qū)不需要有線程管理代碼。WindowsNT和OS/2都是采用這種方法的例子。1.內(nèi)核級(jí)線程(1)

純內(nèi)核級(jí)線程設(shè)施中,線程管理的所有工119內(nèi)核級(jí)線程(2)線程執(zhí)行中可通過(guò)內(nèi)核創(chuàng)建線程原語(yǔ)來(lái)創(chuàng)建其他線程,這個(gè)應(yīng)用的所有線程均在一個(gè)進(jìn)程中獲得支持。內(nèi)核要為整個(gè)進(jìn)程及進(jìn)程中的單個(gè)線程維護(hù)現(xiàn)場(chǎng)信息,應(yīng)在內(nèi)核中建立和維護(hù)PCB及TCB,內(nèi)核的調(diào)度是在線程的基礎(chǔ)上進(jìn)行的。內(nèi)核級(jí)線程(2)線程執(zhí)行中可通過(guò)內(nèi)核創(chuàng)建線程原語(yǔ)來(lái)創(chuàng)建其他線120內(nèi)核級(jí)線程主要優(yōu)點(diǎn)多處理器上,內(nèi)核能同時(shí)調(diào)度同一進(jìn)程中多個(gè)線程并行執(zhí)行。進(jìn)程中的一個(gè)線程被阻塞了,內(nèi)核能調(diào)度同一進(jìn)程的其它線程占有處理器運(yùn)行。內(nèi)核線程數(shù)據(jù)結(jié)構(gòu)和堆棧很小,KLT切換快,內(nèi)核自身也可用多線程技術(shù)實(shí)現(xiàn),能提高系統(tǒng)的執(zhí)行速度和效率。內(nèi)核級(jí)線程主要優(yōu)點(diǎn)多處理器上,內(nèi)核能同時(shí)調(diào)度同一進(jìn)程中多個(gè)線121

內(nèi)核級(jí)線程的主要缺點(diǎn)

應(yīng)用程序線程在用戶態(tài)運(yùn)行,而線程調(diào)度和管理在內(nèi)核實(shí)現(xiàn),在同一進(jìn)程中,控制權(quán)從一個(gè)線程傳送到另一個(gè)線程時(shí)需要用戶態(tài)-內(nèi)核態(tài)-用戶態(tài)的模式切換,系統(tǒng)開銷較大。內(nèi)核級(jí)線程的主要缺點(diǎn)應(yīng)用程序線程在用戶態(tài)運(yùn)行,而線程調(diào)度1222

用戶級(jí)線程純ULT設(shè)施中,線程管理工作由應(yīng)用程序做,內(nèi)核不知道線程的存在。任何應(yīng)用程序均需通過(guò)線程庫(kù)進(jìn)行程序設(shè)計(jì),再與線程庫(kù)連接后運(yùn)行來(lái)實(shí)現(xiàn)多線程。線程庫(kù)是一個(gè)ULT管理的例行程序包,實(shí)質(zhì)上線程庫(kù)是線程的運(yùn)行支撐環(huán)境。2

用戶級(jí)線程純ULT設(shè)施中,線程管理工作由應(yīng)用程序做,內(nèi)123

ULT線程“孵化”過(guò)程進(jìn)程開始只有一個(gè)線程,它可以孵化新線程,通過(guò)過(guò)程調(diào)用把控制權(quán)傳送給“孵化”過(guò)程,由線程庫(kù)為新線程創(chuàng)建一個(gè)TCB,并置為就緒態(tài),按一定的調(diào)度算法把控制權(quán)傳遞給進(jìn)程中處于就緒態(tài)的一個(gè)線程。當(dāng)控制權(quán)傳送到線程庫(kù)時(shí),當(dāng)前線程的現(xiàn)場(chǎng)信息應(yīng)被保存,而當(dāng)線程庫(kù)調(diào)度一個(gè)線程執(zhí)行時(shí),要恢復(fù)它的現(xiàn)場(chǎng)信息。ULT線程“孵化”過(guò)程進(jìn)程開始只有一個(gè)124ULT優(yōu)點(diǎn)

?線程切換不需要內(nèi)核特權(quán)方式,?按應(yīng)用特定需要來(lái)調(diào)度,?ULT能運(yùn)行在任何OS上,ULT優(yōu)點(diǎn)

?線程切換不需要內(nèi)核特權(quán)方式,125

ULT的缺點(diǎn)

?線程執(zhí)行系統(tǒng)調(diào)用時(shí),不僅該線程被阻塞,且進(jìn)程內(nèi)的所有線程會(huì)被阻塞。

?純ULT中,多線程應(yīng)用不能利用多重處理的優(yōu)點(diǎn)。內(nèi)核在一段時(shí)間里,分配一個(gè)進(jìn)程僅占用一個(gè)CPU,進(jìn)程中僅有一個(gè)線程能執(zhí)行。ULT的缺點(diǎn)

?線程執(zhí)行系統(tǒng)調(diào)用時(shí),不僅該線程1263

混合式線程

混合系統(tǒng)中,內(nèi)核支持KLT多線程的建立、調(diào)度和管理,也提供線程庫(kù),允許應(yīng)用程序建立、調(diào)度和管理ULT。應(yīng)用程序的多個(gè)ULT映射成一些KLT,程序員可按應(yīng)用需要和機(jī)器配置調(diào)整KLT數(shù)目,以達(dá)到較好效果。一個(gè)應(yīng)用中的多個(gè)線程能同時(shí)在多處理器上并行運(yùn)行,且阻塞一個(gè)線程時(shí)并不需要封鎖整個(gè)進(jìn)程。3

混合式線程

混合系統(tǒng)中,內(nèi)核支持KLT多線程的建立、調(diào)1272.4.4實(shí)例研究:Solaris的進(jìn)程與線程

Solaris中的進(jìn)程與線程概念?進(jìn)程(Process):?用戶級(jí)線程(User-LevelThreads):?輕量進(jìn)程(LightWeightProcess):?內(nèi)核級(jí)線程(Kernel-LevelThreads):2.4.4實(shí)例研究:Solaris的進(jìn)程與線程

So128Solaris線程的使用(1)

線程庫(kù)LPULTKLTLWPProcessorLLLLLLLLLPPPPP用戶內(nèi)核進(jìn)程1進(jìn)程2進(jìn)程3進(jìn)程4進(jìn)程5Solaris線程的使用(1)

線程庫(kù)LPULTKLTLW129

Solaris線程的使用(2)

Solaris已經(jīng)有進(jìn)程、KLT和ULT,為什么還要引入LWP?原因是各種應(yīng)用需求,有些應(yīng)用邏輯并行性程度高,有些應(yīng)用物理并行性要求高。例1:窗口系統(tǒng)是典型的邏輯并行性程度高的應(yīng)用。例2:大規(guī)模并行計(jì)算是物理并行性要求高的應(yīng)用。

Solaris線程的使用(2)

Solaris已經(jīng)有進(jìn)130Solaris中進(jìn)程結(jié)構(gòu)

內(nèi)存分配表進(jìn)程標(biāo)識(shí)符用戶標(biāo)識(shí)符信號(hào)分配表文件描述符輕進(jìn)程標(biāo)識(shí)符優(yōu)先數(shù)信號(hào)掩碼寄存器堆?!p進(jìn)程標(biāo)識(shí)符優(yōu)先數(shù)信號(hào)掩碼寄存器堆?!p量進(jìn)程1輕量進(jìn)程2Solaris中進(jìn)程結(jié)構(gòu)內(nèi)存分配表進(jìn)程標(biāo)識(shí)符用戶標(biāo)識(shí)符信131LWP的數(shù)據(jù)結(jié)構(gòu)

?輕量進(jìn)程標(biāo)識(shí)符標(biāo)識(shí)了輕量進(jìn)程?優(yōu)先數(shù)定義了輕量進(jìn)程執(zhí)行的優(yōu)先數(shù)?信號(hào)掩碼定義了內(nèi)核能夠接受的信號(hào)?寄存器域用于存放輕量進(jìn)程讓出處理器時(shí)的現(xiàn)場(chǎng)信息?輕量進(jìn)程的內(nèi)核棧包括每個(gè)調(diào)用層次的系統(tǒng)調(diào)用的參數(shù)、返回值和出錯(cuò)碼?交替的信號(hào)堆棧?用戶或用戶和系統(tǒng)共同的虛時(shí)間警示?用戶時(shí)間和系統(tǒng)處理器使用?資源使用和預(yù)定義數(shù)據(jù)?指向?qū)?yīng)內(nèi)核線程的指針?指向進(jìn)程結(jié)構(gòu)的指針LWP的數(shù)據(jù)結(jié)構(gòu)

?輕量進(jìn)程標(biāo)識(shí)符標(biāo)識(shí)了輕量進(jìn)程132ULT的數(shù)據(jù)結(jié)構(gòu)

?

線程標(biāo)識(shí)符標(biāo)識(shí)了線程?

優(yōu)先數(shù)定義了線程執(zhí)行的優(yōu)先數(shù)?

信號(hào)掩碼定義了能夠接受的信號(hào)?寄存器域用于存放線程讓出處理器時(shí)的現(xiàn)場(chǎng)信息?

堆棧用于存放線程運(yùn)行數(shù)據(jù)?線程局部存儲(chǔ)器用于存放線程局部數(shù)據(jù)ULT的數(shù)據(jù)結(jié)構(gòu)

?

線程標(biāo)識(shí)符標(biāo)識(shí)了線程133KLT的數(shù)據(jù)結(jié)構(gòu)?

內(nèi)核寄存器數(shù)據(jù)保存區(qū)?

優(yōu)先級(jí)和調(diào)度信息?

KLT的隊(duì)列指針和堆棧指針?

相關(guān)LWP的指針及信息?

進(jìn)程數(shù)據(jù)結(jié)構(gòu),包括:?

與進(jìn)程相關(guān)的KLT?

進(jìn)程地址空間指針?

用戶權(quán)限表?

信號(hào)處理程序清單?

與用戶執(zhí)行有關(guān)信息KLT的數(shù)據(jù)結(jié)構(gòu)?

內(nèi)核寄存器數(shù)據(jù)保存區(qū)134

Solaris的線程狀態(tài)

繼續(xù)剝奪停止睡眠Sleeping睡眠態(tài)Runnable可運(yùn)行態(tài)Active活躍態(tài)Stopped停止態(tài)停止喚醒指派停止指派喚醒停止Stopped停止態(tài)Running運(yùn)行態(tài)Blocked阻塞態(tài)Runnable可運(yùn)行態(tài)時(shí)間片到或剝奪喚醒停止阻塞系統(tǒng)調(diào)用繼續(xù)LWPULT

Solaris的線程狀態(tài)

繼續(xù)剝奪停止睡眠Sleepin1352.4.5實(shí)例研究:Windows2000/XP的進(jìn)程與線程

三個(gè)層次執(zhí)行對(duì)象:作業(yè)是共享一組配額限制和安全性限制的進(jìn)程的集合;進(jìn)程是相應(yīng)于一個(gè)應(yīng)用的實(shí)體,它擁有自己的資源,如主存,打開的文件;線程是可被內(nèi)核調(diào)度的執(zhí)行實(shí)體,它可以被中斷,使CPU能轉(zhuǎn)向另一線程執(zhí)行。2.4.5實(shí)例研究:Windows2000/XP的進(jìn)程與136Windows2000/XP對(duì)象分類(1)

Windows2000/XP是一個(gè)基于對(duì)象(object-based)的操作系統(tǒng),在系統(tǒng)中,用對(duì)象來(lái)表示所有的系統(tǒng)資源。

(1)執(zhí)行體對(duì)象由執(zhí)行體的組件實(shí)現(xiàn)的對(duì)象,用來(lái)實(shí)現(xiàn)各種外部功能,用戶態(tài)程序(服務(wù)器對(duì)象)可訪問(wèn)執(zhí)行體對(duì)象。?執(zhí)行體對(duì)象:進(jìn)程、線程、區(qū)域、文件、事件、事件對(duì)、文件映射、互斥、信號(hào)量、計(jì)時(shí)器、對(duì)象目錄、符號(hào)連接、關(guān)鍵字、端口、存取令牌和終端等。

Windows2000/XP對(duì)象分類(1)Window137Windows2000/XP對(duì)象分類(2)

(2)內(nèi)核對(duì)象內(nèi)核實(shí)現(xiàn)的更原始的對(duì)象集合,包括:內(nèi)核過(guò)程對(duì)象、異步過(guò)程調(diào)用對(duì)象、延遲過(guò)程調(diào)用對(duì)象、中斷對(duì)象、電源通知對(duì)象、電源狀態(tài)對(duì)象、調(diào)度程序?qū)ο蟮取?/p>

內(nèi)核對(duì)象對(duì)用戶態(tài)代碼是不可見(jiàn)的,僅在執(zhí)行體內(nèi)創(chuàng)建和使用,許多執(zhí)行體對(duì)象包含一個(gè)或多個(gè)內(nèi)核對(duì)象,而內(nèi)核對(duì)象能提供僅能由內(nèi)核來(lái)完成的基本功能。Windows2000/XP對(duì)象分類(2)(2)內(nèi)核對(duì)138Windows2000/XP對(duì)象分類(3)Windows2000/XP中對(duì)象結(jié)構(gòu)對(duì)象頭對(duì)象體對(duì)象管理器Windows2000/XP對(duì)象分類(3)Windows139

進(jìn)程及控制和使用的資源

對(duì)象句柄表虛擬地址空間描述文件x信號(hào)量y區(qū)域z…VADVADVADVAD進(jìn)程訪問(wèn)令牌可用對(duì)象句柄1句柄2線程線程線程句柄3

進(jìn)程以及控制和使用的資源進(jìn)程及控制和使用的資源

對(duì)象句柄表虛擬地址空間描述文件140對(duì)象和句柄間的關(guān)系

應(yīng)用程序執(zhí)行體對(duì)象執(zhí)行體內(nèi)核用戶態(tài)核心態(tài)句柄內(nèi)核對(duì)象對(duì)象和句柄間的關(guān)系

應(yīng)用程序執(zhí)行體對(duì)象執(zhí)141執(zhí)行體進(jìn)程(EPROCESS)塊

內(nèi)核進(jìn)程塊進(jìn)程標(biāo)識(shí)符父進(jìn)程標(biāo)識(shí)符退出狀態(tài)創(chuàng)建和退出次數(shù)指向下一個(gè)進(jìn)程的指引元配額塊內(nèi)存管理信息異常端口調(diào)試程序端口主訪問(wèn)令牌指引元局柄表指引元進(jìn)程環(huán)境塊映像文件名映像基址進(jìn)程特權(quán)級(jí)WIN32進(jìn)程塊指引元執(zhí)行體進(jìn)程(EPROCESS)塊內(nèi)核進(jìn)程塊進(jìn)程標(biāo)識(shí)符父進(jìn)程142調(diào)用CreateProcess函數(shù)創(chuàng)建

WIN32進(jìn)程(1)

創(chuàng)建WIN32進(jìn)程的具體步驟:?打開將在進(jìn)程中被執(zhí)行的映像文件(.EXE)。?創(chuàng)建Windows2000/XP執(zhí)行體進(jìn)程對(duì)象。?創(chuàng)建初始線程(堆棧、描述表、執(zhí)行體線程對(duì)象)。?通知WIN32子系統(tǒng)已創(chuàng)建了一個(gè)新的進(jìn)程,以便它可設(shè)置新的進(jìn)程和線程。?啟動(dòng)初始線程的執(zhí)行(除非指定了CREATE_SUSPENDED標(biāo)志)。?在新進(jìn)程和線程的描述表中完成地址空間的初始化,加載所需的DLL,并開始程序的執(zhí)行調(diào)用CreateProcess函數(shù)創(chuàng)建

WIN32進(jìn)程(1)143線程對(duì)象ETHRED塊的結(jié)構(gòu)

內(nèi)核線程塊創(chuàng)建和退出時(shí)間進(jìn)程標(biāo)識(shí)符指向EPROCESS的指引元線程啟動(dòng)地址主訪問(wèn)令牌指引元模擬信息LPC消息信息定時(shí)器信息掛起的I/O請(qǐng)求調(diào)度程序頭信息用戶態(tài)時(shí)間總計(jì)核心態(tài)時(shí)間總計(jì)內(nèi)核堆棧信息指引元系統(tǒng)服務(wù)表指引元線程調(diào)度信息陷阱幀線程本地存儲(chǔ)數(shù)組同步信息擱置的APC列表定時(shí)器塊和等待塊線程正在等待的對(duì)象列表線程環(huán)境塊指引元線程對(duì)象ETHRED塊的結(jié)構(gòu)

內(nèi)核線程塊創(chuàng)建和退出時(shí)間進(jìn)程144Windows2000/XP線程狀態(tài)

資源可用事件完成但資源不可用事件完成資源可用阻塞掛起終止可運(yùn)行Running運(yùn)行態(tài)不可運(yùn)行Standby準(zhǔn)備態(tài)Waiting等待態(tài)Ready就緒態(tài)Terminated中止態(tài)Transition過(guò)渡態(tài)選中切換搶占或時(shí)間片到Windows2000/XP線程狀態(tài)

資源可用事件完成但事145作業(yè)對(duì)象(1)

作業(yè)對(duì)象是可命名、保護(hù)、共享的對(duì)象,能夠控制與作業(yè)有關(guān)的進(jìn)程屬性。作業(yè)對(duì)象的基本功能是允許系統(tǒng)將進(jìn)程組看作是一個(gè)單元,對(duì)其進(jìn)行管理和操作。作業(yè)對(duì)象也為所有與作業(yè)有關(guān)的進(jìn)程和所有與作業(yè)有關(guān)但已被終止的進(jìn)程記錄基本的賬號(hào)信息。作業(yè)對(duì)象包含一些對(duì)每一個(gè)與該作業(yè)有關(guān)的進(jìn)程的強(qiáng)制限制作業(yè)對(duì)象(1)

作業(yè)對(duì)象是可命名、保護(hù)、共享的對(duì)象,能夠控制146作業(yè)對(duì)象(2)

用戶也能夠在作業(yè)中的進(jìn)程上設(shè)置安全性限制用戶也能夠在作業(yè)中的進(jìn)程上設(shè)置用戶接口限制進(jìn)程只能屬于一個(gè)作業(yè),一旦進(jìn)程建立,它與作業(yè)的聯(lián)系便不能中斷;所有由進(jìn)程創(chuàng)建的進(jìn)程和它們的后代也和同樣的作業(yè)相聯(lián)系。在作業(yè)對(duì)象上的操作會(huì)影響與作業(yè)對(duì)象相聯(lián)系的所有進(jìn)程。作業(yè)對(duì)象(2)

用戶也能夠在作業(yè)中的進(jìn)程上設(shè)置安全性限制1472.5處理機(jī)調(diào)度

2.5.1處理機(jī)調(diào)度的層次2.5.3高級(jí)調(diào)度2.5.3中級(jí)調(diào)度2.5.4低級(jí)調(diào)度2.5.5選擇調(diào)度算法的原則

2.5處理機(jī)調(diào)度

2.5.1處理機(jī)調(diào)度的層次1482.5.1處理機(jī)調(diào)度的層次

高級(jí)調(diào)度?作業(yè)調(diào)度、長(zhǎng)程調(diào)度?分時(shí)系統(tǒng)中的高級(jí)調(diào)度?批處理操作系統(tǒng)中的高級(jí)調(diào)度2.5.1處理機(jī)調(diào)度的層次

高級(jí)調(diào)度?作業(yè)調(diào)度、長(zhǎng)程調(diào)度149中級(jí)調(diào)度平衡負(fù)載調(diào)度,中程調(diào)度決定主存儲(chǔ)器中所能容納的進(jìn)程數(shù),這些進(jìn)程將允許參與競(jìng)爭(zhēng)處理器資源中級(jí)調(diào)度根據(jù)存儲(chǔ)資源量和進(jìn)程的當(dāng)前狀態(tài)來(lái)決定輔存和主存中進(jìn)程的對(duì)換中級(jí)調(diào)度平衡負(fù)載調(diào)度,中程調(diào)度150低級(jí)調(diào)度進(jìn)程調(diào)度、短程調(diào)度。主要功能是按照某種原則決定就緒隊(duì)列中的哪個(gè)進(jìn)程或內(nèi)核級(jí)線程能獲得處理器,并將處理機(jī)出讓給它進(jìn)行工作。短程調(diào)度程序是操作系統(tǒng)最為核心的部分,短程調(diào)度策略的優(yōu)劣直接影響到整個(gè)系統(tǒng)的性能。有兩類低級(jí)調(diào)度方式:第一類稱剝奪方式:高優(yōu)先級(jí)剝奪原則、時(shí)間片剝奪原則第二類稱非剝奪方式:低級(jí)調(diào)度進(jìn)程調(diào)度、短程調(diào)度。151處理器調(diào)度的層次

中級(jí)調(diào)度新建態(tài)掛起就緒態(tài)掛起等待態(tài)高級(jí)調(diào)度低級(jí)調(diào)度運(yùn)行態(tài)就緒態(tài)等待態(tài)終止態(tài)處理器調(diào)度的層次中級(jí)調(diào)度新建態(tài)掛起就掛起等高級(jí)調(diào)度低級(jí)152處理器調(diào)度與進(jìn)程狀態(tài)轉(zhuǎn)換

高級(jí)調(diào)度中級(jí)調(diào)度低級(jí)調(diào)度運(yùn)行態(tài)就緒態(tài)終止態(tài)新建態(tài)掛起就緒態(tài)中級(jí)調(diào)度掛起等待態(tài)等待態(tài)高級(jí)調(diào)度高級(jí)調(diào)度中級(jí)調(diào)度處理器調(diào)度與進(jìn)程狀態(tài)轉(zhuǎn)換

高級(jí)調(diào)度中級(jí)調(diào)度低級(jí)調(diào)度運(yùn)行態(tài)就153處理器的調(diào)度模型

中級(jí)調(diào)度處理器低級(jí)調(diào)度高級(jí)調(diào)度完成超時(shí)掛起就緒隊(duì)列掛起等待隊(duì)列等待隊(duì)列就緒隊(duì)列等待事件交互式用戶事件出現(xiàn)后備作業(yè)隊(duì)列中級(jí)調(diào)度處理器的調(diào)度模型

中級(jí)調(diào)度處理器低級(jí)調(diào)度高級(jí)調(diào)度完成超時(shí)1542.5.5選擇調(diào)度算法的原則(1)

l

資源利用率CPU利用率=CPU有效工作時(shí)間/CPU總的運(yùn)行時(shí)間,CPU總的運(yùn)行時(shí)間=CPU有效工作時(shí)間+CPU空閑等待時(shí)間。2.5.5選擇調(diào)度算法的原則(1)l

資源利用率155選擇調(diào)度算法的原則(2)

2

響應(yīng)時(shí)間?交互式進(jìn)程從提交一個(gè)請(qǐng)求(命令)到接收到響應(yīng)之間的時(shí)間間隔稱響應(yīng)時(shí)間。?使交互式用戶的響應(yīng)時(shí)間盡可能短,或盡快處理實(shí)時(shí)任務(wù)。?這是分時(shí)系統(tǒng)和實(shí)時(shí)系統(tǒng)衡量調(diào)度性能的一個(gè)重要指標(biāo)。選擇調(diào)度算法的原則(2)2

響應(yīng)時(shí)間156選擇調(diào)度算法的原則(3)

3周轉(zhuǎn)時(shí)間?批處理用戶從作業(yè)提交給系統(tǒng)開始,到作業(yè)完成為止的時(shí)間間隔稱作業(yè)周轉(zhuǎn)時(shí)間,應(yīng)使作業(yè)周轉(zhuǎn)時(shí)間或平均作業(yè)周轉(zhuǎn)時(shí)間盡可能短。?這是批處理系統(tǒng)衡量調(diào)度性能的一個(gè)重要指標(biāo)。

選擇調(diào)度算法的原則(3)

3周轉(zhuǎn)時(shí)間157選擇調(diào)度算法的原則(4)

4吞吐率單位時(shí)間內(nèi)處理的作業(yè)數(shù)。

5公平性確保每個(gè)用戶每個(gè)進(jìn)程獲得合理的CPU份額或其他資源份額,不會(huì)出現(xiàn)餓死情況。選擇調(diào)度算法的原則(4)

4吞吐率158

作業(yè)周轉(zhuǎn)與平均周轉(zhuǎn)時(shí)間如果作業(yè)i提交給系統(tǒng)的時(shí)刻是ts,完成時(shí)刻是tf,該作業(yè)的周轉(zhuǎn)時(shí)間ti為:ti=tf-ts實(shí)際上,它是作業(yè)在系統(tǒng)里的等待時(shí)間與運(yùn)行時(shí)間之和。為了提高系統(tǒng)的性能,要讓若干個(gè)用戶的平均作業(yè)周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間最小。平均作業(yè)周轉(zhuǎn)時(shí)間T=(Σti)/n作業(yè)周轉(zhuǎn)與平均周轉(zhuǎn)時(shí)間如果作業(yè)i提交給系統(tǒng)的時(shí)刻是ts,完159作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間和平均

作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間如果作業(yè)i的周轉(zhuǎn)時(shí)間為ti,所需運(yùn)行時(shí)間為tk,則稱wi=ti/tk為該作業(yè)的帶權(quán)周轉(zhuǎn)時(shí)間。ti是等待時(shí)間與運(yùn)行時(shí)間之和,故帶權(quán)周轉(zhuǎn)時(shí)間總大于1。平均作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間W=(Σwi)/n作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間和平均

作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間如果作業(yè)i的周轉(zhuǎn)時(shí)間1602.6批處理作業(yè)的管理與調(diào)度

2.6.1作業(yè)和進(jìn)程的關(guān)系2.6.2批處理作業(yè)的管理2.6.3批處理作業(yè)的調(diào)度2.6.4作業(yè)調(diào)度算法2.6批處理作業(yè)的管理與調(diào)度

2.6.1作業(yè)和進(jìn)程的關(guān)系1612.6.1作業(yè)和進(jìn)程的關(guān)系

?作業(yè)(JOB),?作業(yè)步(JobStep),?作業(yè)組織,?作業(yè)的提交、收容、執(zhí)行和完成。作業(yè)是任務(wù)實(shí)體,進(jìn)程是完成任務(wù)的執(zhí)行實(shí)體;沒(méi)有作業(yè)任務(wù),進(jìn)程無(wú)事可干,沒(méi)有進(jìn)程,作業(yè)任務(wù)沒(méi)法完成。作業(yè)概念更多地用在批處理操作系統(tǒng),而進(jìn)程則可以用在各種多道程序設(shè)計(jì)系統(tǒng)。2.6.1作業(yè)和進(jìn)程的關(guān)系

?作業(yè)(JOB),1622.6.2批處理作業(yè)的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論