《操作系統(tǒng)》課件-第三章 進(jìn)程管理_第1頁
《操作系統(tǒng)》課件-第三章 進(jìn)程管理_第2頁
《操作系統(tǒng)》課件-第三章 進(jìn)程管理_第3頁
《操作系統(tǒng)》課件-第三章 進(jìn)程管理_第4頁
《操作系統(tǒng)》課件-第三章 進(jìn)程管理_第5頁
已閱讀5頁,還剩413頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第三章進(jìn)程管理為了描述程序在并發(fā)執(zhí)行時對系統(tǒng)資源的共享,我們需要一個描述程序執(zhí)行時動態(tài)特征的概念,這就是進(jìn)程。本章將討論進(jìn)程概念、進(jìn)程控制和進(jìn)程間關(guān)系。本章內(nèi)容本章內(nèi)容

概述進(jìn)程的描述進(jìn)程控制進(jìn)程互斥和同步(重點(diǎn))進(jìn)程間通信死鎖問題(難點(diǎn))進(jìn)程其他方面的舉例線程及編程3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

程序的兩種執(zhí)行方式:順序執(zhí)行和并發(fā)執(zhí)行。順序執(zhí)行是單道批處理系統(tǒng)的執(zhí)行方式,也用于簡單的單片機(jī)系統(tǒng)現(xiàn)在的操作系統(tǒng)多為并發(fā)執(zhí)行,具有許多新的特征。引入并發(fā)執(zhí)行的目的是為了提高資源利用率3.1概述程序的順序執(zhí)行

(1)程序完成所要求的功能時,所應(yīng)采取的順序步驟,是執(zhí)行指令的有序集合。(2)順序執(zhí)行特點(diǎn)

具有獨(dú)立功能的程序獨(dú)占CPU直至得到最終結(jié)果的過程3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

1程序的順序執(zhí)行(1)順序執(zhí)行的特征順序性:按照程序結(jié)構(gòu)所指定的次序(可能有分支或循環(huán))封閉性:獨(dú)占全部資源,計算機(jī)的狀態(tài)只由于該程序的控制邏輯所決定可再現(xiàn)性:初始條件相同則結(jié)果相同。3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(2)目的提高計算機(jī)的處理能力提高資源利用率3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(1)形式多道程序環(huán)境下的多道程序的并發(fā)執(zhí)行在某道程序的幾個程序段中,包含可同時執(zhí)行或可顛倒順序執(zhí)行的代碼。

3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2程序的并發(fā)執(zhí)行(1)定義

程序的并發(fā)執(zhí)行是指一組在邏輯上互相獨(dú)立的程序或程序段在執(zhí)行時間上客觀上互相重疊,即一個程序或程序段的執(zhí)行尚未結(jié)束,另一個程序(段)的執(zhí)行已經(jīng)開始的執(zhí)行方式。3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(2)并發(fā)與并行區(qū)別并發(fā):在一段時間內(nèi)的同時并行

并行:在同一物理時刻的同時3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(3)并發(fā)執(zhí)行的特征間斷(異步)性:“走走停?!保粋€程序可能走到中途停下來,失去原有的時序關(guān)系;失去封閉性:共享資源,受其他程序的控制邏輯的影響。失去可再現(xiàn)性:失去封閉性->失去可再現(xiàn)性3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(4)不加控制的并發(fā)執(zhí)行所帶來的影響例:利用堆棧管理一塊內(nèi)存區(qū)中各數(shù)據(jù)塊的使用情況。用getaddr(top)從棧頂取出相應(yīng)的內(nèi)存塊的地址。用reladdr(blk)將數(shù)據(jù)塊的地址(以bkl為地址)放入堆棧中3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行

(案例分析)intgetaddr(top){intr;1.1rs[top];1.2toptop+1;1.3return(r);}voidreladdr(blk){2.1toptop-1;2.2s[top]blk;}分析getaddr(top)與reladdr(blk)的并發(fā)執(zhí)行012345t……abtop2.1toptop-11.1rs[top]1.2toptop+11.3return(r)2.2s[top]blktopblktop什么原因?說明什么問題?低地址高地址棧底3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(案例分析)例子說明程序的執(zhí)行不再具有封閉性和結(jié)果的可再現(xiàn)性。getaddr()和reladdr()的并發(fā)執(zhí)行,產(chǎn)生了錯誤的結(jié)果,不同執(zhí)行順序得到不同的結(jié)果。原因:對公共變量(堆?;蚨褩V羔槪┑墓蚕硪鸬摹榱双@得結(jié)果的可再現(xiàn)性,程序的并發(fā)執(zhí)行是需要條件的。3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行2.程序的并發(fā)執(zhí)行(5)并發(fā)執(zhí)行的條件

達(dá)到封閉性和可再現(xiàn)性。并發(fā)執(zhí)行失去封閉性的原因是共享資源的影響,去掉這種影響就行了。3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行有兩個并發(fā)進(jìn)程P1和P2,共享初值為1的變量x。P1對x加1,P2對x減1。加1和減1操作的指令序列分別如下所示。//P1加1操作//P2減1操作loadR1,x//取x到寄存器R1中l(wèi)oadR2,x//取x到寄存器R2中incR1decR2storex,R1//將R1的內(nèi)容存入xstorex,R2//將R1的內(nèi)容存入x兩個操作完成后,x的值是()??赡転?1或3A只能為1B可能為0、1或2C可能為-1、0、1或2D提交單選題1分2、并發(fā)執(zhí)行(5)并發(fā)執(zhí)行條件任意兩個程序P(i)和P(j)可并發(fā)的條件:R(i)

W(j)=

W(i)

R(j)=

W(i)

W(j)=

現(xiàn)在的問題是這個條件不好檢查。怎么辦?3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

1、定義

一個具有一定獨(dú)立功能的程序在一個數(shù)據(jù)集合上的一次動態(tài)執(zhí)行過程。簡言之,進(jìn)程是程序的一次執(zhí)行活動。3.1.2進(jìn)程的定義2、引入進(jìn)程意義進(jìn)程描述了程序的動態(tài)執(zhí)行過程;它對應(yīng)虛擬處理機(jī)、虛擬存儲器和虛擬外設(shè)等資源的分配和回收;3.1概述2、引入進(jìn)程意義反映系統(tǒng)中程序執(zhí)行的并發(fā)性、隨機(jī)性和資源共享引入多進(jìn)程,提高了對硬件資源的利用率,但又帶來額外的空間和時間開銷,增加了OS的復(fù)雜性3.1概述3.進(jìn)程的特征(1)動態(tài)性進(jìn)程對應(yīng)程序的執(zhí)行進(jìn)程是動態(tài)產(chǎn)生:創(chuàng)建--〉運(yùn)行--〉消亡進(jìn)程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換3.1概述3.進(jìn)程的特征(2)獨(dú)立性

各進(jìn)程的地址空間相互獨(dú)立,除非采用進(jìn)程間通信手段(3)并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起向前推進(jìn)3.1概述3.進(jìn)程的特征(4)異步性:每個進(jìn)程都以其相對獨(dú)立的不可預(yù)知的速度向前推進(jìn)(5)結(jié)構(gòu)化:進(jìn)程=代碼段+數(shù)據(jù)段+PCB3.1概述一個進(jìn)程是()。由協(xié)處理機(jī)執(zhí)行的一個程序A一個獨(dú)立的程序+數(shù)據(jù)集BPCB結(jié)構(gòu)與程序和數(shù)據(jù)的組合C一個獨(dú)立的程序D提交單選題1分進(jìn)程所具有的基本特征包括()。動態(tài)性A順序性B并發(fā)性C封閉性D異步性E提交多選題1分4進(jìn)程與程序的區(qū)別(1)進(jìn)程是動態(tài)的,程序是靜態(tài)的:

炒菜

菜譜(2)進(jìn)程是暫時的,程序的永久的:進(jìn)程是一個狀態(tài)變化的過程,程序可長久保存。3.1概述進(jìn)程和程序的本質(zhì)區(qū)別是()。存儲在內(nèi)存和外存A順序和非順序執(zhí)行機(jī)器指令B分時使用和獨(dú)占使用計算機(jī)資源C動態(tài)和靜態(tài)特征D提交單選題1分4進(jìn)程與程序的區(qū)別(3)進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊(即進(jìn)程狀態(tài)信息)。(4)進(jìn)程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行,一個程序可對應(yīng)多個進(jìn)程;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個程序。3.1概述5.進(jìn)程與程序的區(qū)別(5)進(jìn)程具有并發(fā)/并行特征,程序沒有。進(jìn)程具有獨(dú)立性和異步性(6)進(jìn)程是競爭計算機(jī)資源的基本單位。3.1概述一個進(jìn)程執(zhí)行過程中不可能對應(yīng)()。一個PCBA一個JCBB多個PCBC一個程序D提交單選題1分6進(jìn)程舉例正在運(yùn)行的Web瀏覽器是一個進(jìn)程,正在運(yùn)行的Windows資源管理器是一個進(jìn)程,正在運(yùn)行的VisualC++編程環(huán)境也是一個進(jìn)程在計算機(jī)中處于運(yùn)行狀態(tài)的任何一個程序都是一個進(jìn)程,一個進(jìn)程擁有內(nèi)存、CPU時間等一系列資源3.1概述7進(jìn)程與作業(yè)關(guān)系用戶線程進(jìn)程作業(yè)步作業(yè)作業(yè)步進(jìn)程線程由用戶創(chuàng)建由系統(tǒng)創(chuàng)建由用戶指定…..…..…..3.1概述7.進(jìn)程與作業(yè)關(guān)系(1)作業(yè)是用戶向計算機(jī)提交任務(wù)的實(shí)體;進(jìn)程則是完成用戶任務(wù)的執(zhí)行實(shí)體,是向系統(tǒng)申請分配資源的基本單位3.1概述7.進(jìn)程與作業(yè)關(guān)系(2)一個作業(yè)可由多個進(jìn)程組成,且必須至少由一個進(jìn)程組成,但反過來不成立。(3)作業(yè)的概念主要用在批處理系統(tǒng)中;而進(jìn)程的概念用在幾乎所有的多道系統(tǒng)中。3.1概述3.2.1進(jìn)程的組成進(jìn)程=程序+數(shù)據(jù)+進(jìn)程控制塊PCB程序是進(jìn)程的不可缺少的組成部分;數(shù)據(jù)是進(jìn)程處理的對象;進(jìn)程控制塊是進(jìn)程的控制結(jié)構(gòu)

3.2進(jìn)程的描述3.2.1進(jìn)程的組成(1)進(jìn)程控制塊

包含了進(jìn)程的描述信息、控制信息和資源信息以及現(xiàn)場保護(hù)區(qū),是進(jìn)程的唯一標(biāo)識,系統(tǒng)通過PCB管理和控制進(jìn)程。3.2進(jìn)程的描述1、功能(1)PCB是由OS維護(hù)的用來記錄進(jìn)程相關(guān)信息和管理進(jìn)程而設(shè)置的一個專門的數(shù)據(jù)結(jié)構(gòu)(2)PCB是進(jìn)程動態(tài)特性的集中反映系統(tǒng)通過PCB感知進(jìn)程的存在,通過PCB中所包含的各項(xiàng)變量的變化,掌握進(jìn)程的狀態(tài)以達(dá)到控制進(jìn)程活動的目的3.2.2進(jìn)程控制塊PCB2、特征PCB結(jié)構(gòu)的全部或部分常駐內(nèi)存;PCB隨進(jìn)程的創(chuàng)建而填寫,隨進(jìn)程的撤消而釋放;系統(tǒng)利用PCB來控制和管理進(jìn)程,所以PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志進(jìn)程與PCB是一一對應(yīng)的3.2.2進(jìn)程控制塊PCB3、進(jìn)程控制塊的內(nèi)容(1)進(jìn)程描述信息:進(jìn)程標(biāo)識符(processID),唯一,通常是一個整數(shù)進(jìn)程名,通常基于可執(zhí)行文件名用戶標(biāo)識符(userID)進(jìn)程組關(guān)系(processgroup)3.2.2進(jìn)程控制塊PCB3、進(jìn)程控制塊的內(nèi)容(2)進(jìn)程控制信息當(dāng)前狀態(tài)優(yōu)先級(priority)

代碼執(zhí)行入口地址程序的外存地址3.2.2進(jìn)程控制塊PCB3、進(jìn)程控制塊的內(nèi)容(2)進(jìn)程控制信息運(yùn)行統(tǒng)計信息(執(zhí)行時間、頁面調(diào)度)進(jìn)程間同步和通信

3.2.2進(jìn)程控制塊PCB3、進(jìn)程控制塊的內(nèi)容(2)進(jìn)程控制信息資源占用信息:虛擬地址空間的現(xiàn)狀、打開文件列表CPU現(xiàn)場保護(hù)結(jié)構(gòu):寄存器值(通用、程序計數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.2.2進(jìn)程控制塊PCB進(jìn)程的控制信息和描述信息存放在()。JCBAPCBBTCBCSTACKD提交單選題1分1、定義:對進(jìn)程執(zhí)行活動全過程的靜態(tài)描述。2、組成內(nèi)容進(jìn)程的用戶地址空間內(nèi)容硬件寄存器內(nèi)容核心數(shù)據(jù)結(jié)構(gòu)(正文段、數(shù)據(jù)集、堆棧)3.2.3進(jìn)程上下文3、類型用戶級上下文:進(jìn)程的用戶地址空間,包括用戶正文段、用戶數(shù)據(jù)段和用戶棧;寄存器級上下文:程序寄存器、處理機(jī)狀態(tài)寄存器、棧指針、通用寄存器的值;3.2.3進(jìn)程上下文3、類型(3)系統(tǒng)級上下文靜態(tài)部分(PCB和資源表格)動態(tài)部分:核心棧(核心過程的棧結(jié)構(gòu),不同進(jìn)程在調(diào)用相同核心過程時有不同核心棧)

3.2.3進(jìn)程上下文4、進(jìn)程上下文結(jié)構(gòu)PCB各種控制表指針棧區(qū)數(shù)據(jù)集正文集各種寄存器3.2.3進(jìn)程上下文1、PCB表(1)系統(tǒng)把所有PCB組織在一起,并把它們放在內(nèi)存的固定區(qū)域,就構(gòu)成了PCB表;(2)PCB表的大小決定了系統(tǒng)中最多可同時存在的進(jìn)程個數(shù),稱為系統(tǒng)的并發(fā)度。3.2.4PCB的組織方式2、組織方式(1)鏈表同一狀態(tài)的進(jìn)程其PCB成一鏈表,多個狀態(tài)對應(yīng)多個不同的鏈表各狀態(tài)的進(jìn)程形成不同的鏈表:就緒鏈表、阻塞鏈表3.2.4PCB的組織方式2、組織方式(鏈表)

PCB1PCB2PCB3PCB4PCB5PCB6PCB7PCBn......空PCB運(yùn)行態(tài)就緒態(tài)等待1等待267510153.2.4PCB的組織方式2、組織方式(2)索引表同一狀態(tài)的進(jìn)程歸入一個index表(由index指向PCB),多個狀態(tài)對應(yīng)多個不同的index表各狀態(tài)的進(jìn)行形成不同的索引表:就緒索引表、阻塞索引表PCBTableReadyBlockedPCBTableIndexTableReadyBlocked3.2.4PCB的組織方式1.根據(jù)進(jìn)程運(yùn)行時權(quán)限不同劃分為:核心態(tài)和用戶態(tài)(1)用戶執(zhí)行狀態(tài),又稱用戶態(tài),進(jìn)程的用戶程序段執(zhí)行時,該程序處于用戶態(tài)。用戶態(tài)時不可直接訪問受保護(hù)的OS代碼;(2)系統(tǒng)執(zhí)行狀態(tài),又稱系統(tǒng)態(tài),核心態(tài),進(jìn)程的系統(tǒng)程序執(zhí)行時,該進(jìn)程處于系統(tǒng)態(tài)。核心態(tài)時可以執(zhí)行OS代碼,可以訪問全部進(jìn)程空間。3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換下列選項(xiàng)中,會導(dǎo)致用戶進(jìn)程從用戶態(tài)切換到核心態(tài)的操作是()。僅I、IIA僅I、IIIB僅II、IIICI、II和IIIDI.整數(shù)除以零II.sin()函數(shù)調(diào)用III.read系統(tǒng)調(diào)用提交單選題1分劃分用戶態(tài)和系統(tǒng)態(tài)的原因(1)把用戶程序和系統(tǒng)程序分開,以利程序的保護(hù)和共享;(2)但增加了系統(tǒng)復(fù)雜度和系統(tǒng)開銷。3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換2.根據(jù)進(jìn)程是否占有CPU以及運(yùn)行條件是否具備,劃分為:三種基本狀態(tài)進(jìn)程的三種基本狀態(tài)分別為:(1)就緒態(tài)(Ready):一個進(jìn)程已經(jīng)具備運(yùn)行條件,但由于無CPU暫時不能運(yùn)行的狀態(tài)(當(dāng)調(diào)度給其CPU時,立即可以運(yùn)行。“萬事俱備,只欠東風(fēng)”。位于“就緒隊列”中);

3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換(2)執(zhí)行態(tài)(Running):進(jìn)程占有了包括CPU在內(nèi)的全部資源,并在CPU上運(yùn)行(3)等待態(tài)(Blocked):阻塞態(tài)指進(jìn)程因等待某種事件的發(fā)生而暫時不能運(yùn)行的狀態(tài)(即使CPU空閑,該進(jìn)程也不可運(yùn)行)。處于等待態(tài)的進(jìn)程位于等待隊列中。

3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換一個進(jìn)程獲得了除CPU以外的所需資源,則該進(jìn)程可能處于()狀態(tài)。運(yùn)行A就緒B等待CD提交(B)和(C)單選題1分運(yùn)行Running就緒Ready等待Blocked

調(diào)度時間片到事件等待事件發(fā)生3.進(jìn)程的三種基本狀態(tài)及轉(zhuǎn)換基本狀態(tài)間的轉(zhuǎn)換圖3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換一進(jìn)程在某一時刻具有()。一種狀態(tài)A兩種狀態(tài)B三種狀態(tài)C四種狀態(tài)D提交單選題1分運(yùn)行狀態(tài)的進(jìn)程由于某種原因可能變?yōu)?)。就緒狀態(tài)A等待狀態(tài)B后備狀態(tài)C完成狀態(tài)D活躍狀態(tài)E提交多選題1分4進(jìn)程的三種基本狀態(tài)及轉(zhuǎn)換

在進(jìn)程運(yùn)行過程中,這三種基本狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換(1)就緒

運(yùn)行(進(jìn)程調(diào)度)調(diào)度程序選擇一個新的進(jìn)程運(yùn)行(2)運(yùn)行

就緒

運(yùn)行進(jìn)程用完了時間片運(yùn)行進(jìn)程被中斷,因?yàn)橐桓邇?yōu)先級進(jìn)程處于就緒狀態(tài)3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換多道程序系統(tǒng)中,()的作用是從就緒狀態(tài)中挑選一個進(jìn)程投入運(yùn)行。作業(yè)調(diào)度A交換調(diào)度B進(jìn)程調(diào)度CSPOOLING調(diào)度D提交單選題1分4.進(jìn)程的三種基本狀態(tài)及轉(zhuǎn)換(3)運(yùn)行

等待:當(dāng)一進(jìn)程等待某一事件的發(fā)生時請求系統(tǒng)服務(wù)無新工作可做(4)等待

就緒:當(dāng)所等待的事件發(fā)生時初始化I/O且必須等待結(jié)果等待某一進(jìn)程提供輸入3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換在進(jìn)程狀態(tài)轉(zhuǎn)換時,下列()轉(zhuǎn)換是不可能發(fā)生的。就緒態(tài)→運(yùn)行態(tài)A運(yùn)行態(tài)→就緒態(tài)B運(yùn)行態(tài)→阻塞態(tài)C阻塞態(tài)→運(yùn)行態(tài)D提交單選題1分進(jìn)程從運(yùn)行狀態(tài)變?yōu)榈却脑蚩赡苁?)。輸入/輸出事件發(fā)生A時間片到B輸入/輸出事件完成C某個進(jìn)程被喚醒D提交單選題1分一個進(jìn)程被喚醒,意味著()。該進(jìn)程重新占有了CPUA進(jìn)程狀態(tài)變?yōu)榫途wB它的優(yōu)先權(quán)變?yōu)樽畲驝其PCB移至就緒隊列的隊首D提交單選題1分一次I/O操作的結(jié)束,有可能導(dǎo)致()。一個進(jìn)程由睡眠變就緒A幾個進(jìn)程由睡眠變就緒B一個進(jìn)程由睡眠變運(yùn)行C幾個進(jìn)程由睡眠變運(yùn)行D提交單選題1分一個進(jìn)程釋放一種資源將有可能導(dǎo)致一個或幾個進(jìn)程()。由就緒變運(yùn)行A由運(yùn)行變就緒B由阻塞變運(yùn)行C由阻塞變就緒D提交單選題1分進(jìn)程從阻塞狀態(tài)轉(zhuǎn)換到就緒狀態(tài)的可能原因是().時間片完A其它進(jìn)程執(zhí)行了喚醒原語B執(zhí)行了V操作C執(zhí)行了P操作D提交多選題1分進(jìn)程從執(zhí)行狀態(tài)轉(zhuǎn)換到阻塞狀態(tài)的可能原因是().時間片完A需要等待其它進(jìn)程的執(zhí)行結(jié)果B執(zhí)行了V操作C執(zhí)行了P操作D提交多選題1分5其它狀態(tài)(1)創(chuàng)建狀態(tài):創(chuàng)建(新new)狀態(tài)

OS已完成為創(chuàng)建一進(jìn)程所必要的工作已構(gòu)造了進(jìn)程標(biāo)識符已創(chuàng)建了管理進(jìn)程所需的表格3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換5.其它狀態(tài)(1)創(chuàng)建狀態(tài)但還沒有允許執(zhí)行該進(jìn)程(尚未同意)

因?yàn)橘Y源有限,OS所需的關(guān)于該進(jìn)程的信息保存在主存中的進(jìn)程表中,但進(jìn)程自身還未進(jìn)入主存,也沒有為與這個程序相關(guān)的數(shù)據(jù)分配空間,程序保留在輔存中。3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換進(jìn)程創(chuàng)建原語的任務(wù)是()。為進(jìn)程編制程序A為進(jìn)程建立PCB表B為進(jìn)程分配CPUC為進(jìn)程分配所需的各種資源D提交單選題1分5.其它狀態(tài)(1)創(chuàng)建狀態(tài)導(dǎo)致進(jìn)程創(chuàng)建的原因批處理環(huán)境中,選擇一新作業(yè)即將進(jìn)入內(nèi)存執(zhí)行交互環(huán)境中,新用戶登錄到系統(tǒng)由現(xiàn)有進(jìn)程生成,父進(jìn)程----子進(jìn)程3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換進(jìn)程被創(chuàng)建后即進(jìn)入()排隊。阻塞隊列A就緒隊列B緩沖隊列C運(yùn)行隊列D提交單選題1分下列選項(xiàng)中,導(dǎo)致創(chuàng)進(jìn)新進(jìn)程的操作是()。僅I和IIA僅II和IIIB僅I和IIICI,II,IIID提交I.用戶成功登陸II.設(shè)備分配III.啟動程序執(zhí)行單選題1分3.其它狀態(tài)(2)終止?fàn)顟B(tài)(Exit):終止后進(jìn)程移入該狀態(tài)它不再有執(zhí)行資格表格和其它信息暫時保留實(shí)用程序?yàn)榱朔治鲂阅芎屠寐?,可能要提取程序的歷史信息3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換5其它狀態(tài)(3)終止?fàn)顟B(tài):進(jìn)程完成任務(wù)或者其它原因退出,進(jìn)程無法恢復(fù)3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換5其它狀態(tài)導(dǎo)致進(jìn)程終止的原因分時系統(tǒng)中,用戶的行為可指示終止PC機(jī)環(huán)境中,用戶結(jié)束一應(yīng)用程序父進(jìn)程終止,OS自動終止所有后代進(jìn)程3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換6.五狀態(tài)進(jìn)程模型AdmitRunningNewExitReadyBlockedDispatchTimeoutEventWaitEventOccursReleaseCreate3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換6.五狀態(tài)進(jìn)程模型(1)五狀態(tài)進(jìn)程模型(單隊列結(jié)構(gòu))AdmitReady

Queue

就緒隊列

DispatchTime-out

超時Event

WaitReleaseCPUBlocked

Queue

等待隊列EventOccurs提交調(diào)度Processor釋放等待事件事件發(fā)生3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換6.五狀態(tài)進(jìn)程模型(1)五狀態(tài)進(jìn)程模型(多隊列結(jié)構(gòu))AdmitReadyQueueDispatchTime-outReleaseProcessorEvent1WaitEvent1QueueEvent1OccursEvent2WaitEvent2QueueEvent2Occurs3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(1)進(jìn)程掛起的目的提高處理機(jī)效率為運(yùn)行進(jìn)程提供足夠內(nèi)存3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(1)單掛起進(jìn)程模型AdmitRunningNewExitReadyBlockedDispatchTimeoutEventWaitEventOccursReleaseBlockedSuspendSuspendActivate3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(2)雙掛起進(jìn)程模型AdmitRunningReadySuspendExitReadyBlockedDispatchTimeoutEventWaitEventOccursReleaseBlockedSuspendSuspendNewEventOccursActivateSuspendActivateAdmitSuspend3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換從執(zhí)行狀態(tài)掛起的進(jìn)程解除掛起時進(jìn)入()狀態(tài)。就緒A執(zhí)行B阻塞C掛起D提交單選題1分7.掛起進(jìn)程模型(3)掛起類型根據(jù)是否就緒、是否在內(nèi)存分類1)就緒狀態(tài)(Ready):進(jìn)程在內(nèi)存且可立即進(jìn)入運(yùn)行狀態(tài);2)阻塞狀態(tài)(Blocked):進(jìn)程在內(nèi)存,并等待某事件的出現(xiàn);3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(3)掛起類型根據(jù)是否就緒、是否在內(nèi)存分類3)就緒掛起狀態(tài)(Ready,suspend):進(jìn)程在外存,但只要進(jìn)入內(nèi)存,即可運(yùn)行;4)阻塞掛起狀態(tài)(Blocked,suspend):進(jìn)程在外存并等待某事件的出現(xiàn);3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(4)狀態(tài)間的轉(zhuǎn)換掛起(Suspend):把一個進(jìn)程從內(nèi)存轉(zhuǎn)到外存掛起類型阻塞到阻塞掛起就緒到就緒掛起運(yùn)行到就緒掛起3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換7.掛起進(jìn)程模型(4)狀態(tài)間的轉(zhuǎn)換激活(Activate):把一個進(jìn)程從外存轉(zhuǎn)到內(nèi)存就緒掛起到就緒阻塞掛起到阻塞3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換1、如果系統(tǒng)中有N個進(jìn)程,運(yùn)行的進(jìn)程最多幾個,最少幾個;就緒進(jìn)程最多幾個最少幾個;等待進(jìn)程最多幾個,最少幾個?2、有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么? 等待—運(yùn)行;就緒—等待3、一個狀態(tài)轉(zhuǎn)換的發(fā)生,是否一定導(dǎo)致另一個轉(zhuǎn)換發(fā)生,列出所有的可能4、舉3個日常生活中類似進(jìn)程的例子課堂練習(xí)題進(jìn)程定義、特征、組成、PCB:作用、內(nèi)容、組織進(jìn)程與程序、作業(yè)的區(qū)別進(jìn)程描述、進(jìn)程上下文進(jìn)程狀態(tài):3、5、6、7狀態(tài)間的轉(zhuǎn)換內(nèi)容總結(jié)3.3.1進(jìn)程控制的功能完成創(chuàng)建和撤消進(jìn)程,掛起和激活進(jìn)程等完成進(jìn)程狀態(tài)的轉(zhuǎn)換。使各進(jìn)程有序地、正確地運(yùn)行,共享系統(tǒng)資源3.3進(jìn)程控制1、原語(primitive)(1)定義

由若干條指令構(gòu)成的“原子操作”過程,作為一個整體而不可分割--要么全都完成,要么全都不做。許多系統(tǒng)調(diào)用就是原語。3.3.1進(jìn)程控制的功能1、原語(primitive)(2)類型機(jī)器指令級:不允許中斷功能級原語:允許中斷,不允許并發(fā)3.3.1進(jìn)程控制的功能1、原語(primitive)注意:系統(tǒng)調(diào)用并不都是原語,但原語肯定是系統(tǒng)調(diào)用。

進(jìn)程A調(diào)用read(),因無數(shù)據(jù)而阻塞,在read()里未返回。然后進(jìn)程B調(diào)用read(),此時read()被重入。

系統(tǒng)調(diào)用不一定一次執(zhí)行完并返回該進(jìn)程,有可能在特定的點(diǎn)暫停,而轉(zhuǎn)入到其他進(jìn)程;但原語一次必須執(zhí)行完畢;3.3.1進(jìn)程控制的功能進(jìn)程創(chuàng)建與撤消原語進(jìn)程阻塞與喚醒原語進(jìn)程掛起與激活原語3.3.2進(jìn)程控制的主要原語1.進(jìn)程創(chuàng)建原語(1)主要任務(wù):

為進(jìn)程創(chuàng)建一個PCB

賦予一個統(tǒng)一進(jìn)程標(biāo)識符為進(jìn)程映象分配空間初始化進(jìn)程控制塊設(shè)置相應(yīng)的鏈接把新進(jìn)程加到就緒隊列的鏈表中插入家族隊列3.3.2進(jìn)程控制的主要原語

1.進(jìn)程創(chuàng)建原語(2)引起創(chuàng)建進(jìn)程的事件用戶登錄:分時系統(tǒng)作業(yè)調(diào)度:批處理系統(tǒng)提供服務(wù):為用戶打印服務(wù)而創(chuàng)建的打印進(jìn)程應(yīng)用請求:由用戶程序創(chuàng)建3.3.2進(jìn)程控制的主要原語1.進(jìn)程創(chuàng)建原語(3)子進(jìn)程創(chuàng)建的3種形式

產(chǎn)生新進(jìn)程不產(chǎn)生新進(jìn)程

復(fù)制現(xiàn)有進(jìn)程的上下文

fork(新進(jìn)程的系統(tǒng)上下文會有不同)

加載程序

spawn(創(chuàng)建新進(jìn)程并加載新程序)

exec(加載新程序并覆蓋自身)

3.3.2進(jìn)程控制的主要原語1.進(jìn)程創(chuàng)建原語(4)子進(jìn)程與父進(jìn)程繼承(inherit)的信息:子進(jìn)程可以從父進(jìn)程中繼承用戶標(biāo)識符、環(huán)境變量、打開文件、文件系統(tǒng)的當(dāng)前目錄、控制終端、已經(jīng)連接的共享存儲區(qū)、信號處理例程入口表等不被繼承信息:進(jìn)程標(biāo)識符(是指父進(jìn)程標(biāo)識符)-3.3.2進(jìn)程控制的主要原語2.進(jìn)程撤銷原語Destroy(1)導(dǎo)致進(jìn)程被撤消的原因一個進(jìn)程在完成任務(wù)而正常終止由于錯誤導(dǎo)致非正常終止外界干預(yù)(操作員/OS干預(yù);父進(jìn)程請求;父進(jìn)程終止)3.3.2進(jìn)程控制的主要原語2.進(jìn)程撤銷原語Destroy(2)功能釋放內(nèi)外存空間關(guān)閉所有打開文件釋放共享內(nèi)存段和各種鎖定lock

撤消其子孫進(jìn)程(以免其成為不可控的)

釋放其PCB3.3.2進(jìn)程控制的主要原語3.進(jìn)程阻塞原語Block(1)阻塞原因

當(dāng)進(jìn)程期待的某事件尚未出現(xiàn)時,該進(jìn)程調(diào)用阻塞原語把自己阻塞起來。注意:進(jìn)程能夠自己阻塞自己,但該進(jìn)程的喚醒則是在該進(jìn)程所期待的事件發(fā)生后,由“發(fā)現(xiàn)者”進(jìn)程調(diào)用喚醒原語實(shí)現(xiàn),即進(jìn)程自己不能喚醒自己。3.3.2進(jìn)程控制的主要原語3.進(jìn)程阻塞原語Block(3)處理過程保護(hù)中斷現(xiàn)場置進(jìn)程的狀態(tài)為“等待態(tài)”將其插入該事件的等待隊列WQ(r)

轉(zhuǎn)進(jìn)程調(diào)度3.3.2進(jìn)程控制的主要原語4.進(jìn)程喚醒原語Wakeup(1)喚醒原因進(jìn)程等待的事件發(fā)生3.3.2進(jìn)程控制的主要原語4.進(jìn)程喚醒原語Wakeup(2)喚醒進(jìn)程的兩種方法由系統(tǒng)進(jìn)程喚醒。系統(tǒng)進(jìn)程統(tǒng)一控制事件的發(fā)生,并將“事件發(fā)生”這一消息通知等待進(jìn)程。等待的是公共資源。由事件發(fā)生進(jìn)程喚醒。事件發(fā)生進(jìn)程與被喚醒的進(jìn)程是合作關(guān)系,等待私有資源。3.3.2進(jìn)程控制的主要原語只作用于一個進(jìn)程一次的原語是()。創(chuàng)立A解掛B阻塞C掛起D提交單選題1分進(jìn)程依靠()從阻塞狀態(tài)過渡到就緒狀態(tài)。程序員的命令A(yù)系統(tǒng)服務(wù)B等待下一個時間片到來C“合作”進(jìn)程的喚醒D提交單選題1分5掛起原語SuspendPrimitive(1)原因

當(dāng)需要把某進(jìn)程置于就緒掛起狀態(tài)(Ready)或阻塞掛起狀態(tài)(Blocked)時,調(diào)用掛起原語,即將進(jìn)程從活動就緒狀態(tài)或阻塞狀態(tài)(在內(nèi)存)變?yōu)橄鄬o止的就緒掛起狀態(tài)或阻塞掛起狀態(tài)(在外存)。3.3.2進(jìn)程控制的主要原語5掛起原語SuspendPrimitive(2)進(jìn)程的掛起方式發(fā)命令的進(jìn)程自身掛起;掛起具有指定標(biāo)識符的進(jìn)程;3.3.2進(jìn)程控制的主要原語為使進(jìn)程由活動就緒變?yōu)殪o止就緒,應(yīng)利用()原語?SuspendAActiveBBlockCWakeupD提交單選題1分6激活原語ActivePrimitive(3)功能

使處于靜止?fàn)顟B(tài)的進(jìn)程變?yōu)榛顒訝顟B(tài),即把“靜止就緒”變?yōu)椤盎顒泳途w”,把“靜止阻塞”變?yōu)椤盎顒幼枞薄?.3.2進(jìn)程控制的主要原語6.激活原語ActivePrimitive(4)激活方式激活一個指定標(biāo)識符的進(jìn)程激活某進(jìn)程及其所有“子孫”進(jìn)程等當(dāng)激活的進(jìn)程處于“活動就緒”狀態(tài)時,將引起進(jìn)程的重新調(diào)度

3.3.2進(jìn)程控制的主要原語從執(zhí)行狀態(tài)掛起的進(jìn)程解除掛起時進(jìn)入()狀態(tài)。就緒A執(zhí)行B阻塞C掛起D提交單選題1分1、進(jìn)程建立過程

系統(tǒng)上電—引導(dǎo)程序自舉—操作系統(tǒng)進(jìn)入內(nèi)存—建立0#進(jìn)程、1#進(jìn)程—為各終端創(chuàng)建用戶交互進(jìn)程(Shell)和終端管理進(jìn)程—出現(xiàn)提示符—創(chuàng)建新用戶進(jìn)程—進(jìn)程樹,1#進(jìn)程是祖先。3.3.3Unix的進(jìn)程管理2.UNIX的進(jìn)程上下文(1)進(jìn)程動態(tài)特性定義為在進(jìn)程上下文中的執(zhí)行(2)進(jìn)程的靜態(tài)描述程序正文段+數(shù)據(jù)段+PCB(進(jìn)程的上下文)

3.3.3Unix的進(jìn)程管理3.UNIX的進(jìn)程上下文類型(1)用戶級上下文

進(jìn)程正文:程序中可執(zhí)行的機(jī)器指令

進(jìn)程數(shù)據(jù):由這個進(jìn)程訪問的數(shù)據(jù)

用戶棧:過程調(diào)用時的參數(shù)、局部變量、返回地址

共享存儲區(qū):與其他進(jìn)程共享的存儲區(qū),用于進(jìn)程間的通信3.3.3Unix的進(jìn)程管理3.UNIX的進(jìn)程上下文類型(2)寄存器級上下文程序計數(shù)器狀態(tài)寄存器棧指針(指向用戶?;蚝诵臈5臈m?,取決于當(dāng)前的運(yùn)行模式)通用寄存器3.3.3Unix的進(jìn)程管理3UNIX的進(jìn)程上下文類型(3)系統(tǒng)級上下文進(jìn)程表項(xiàng)(proc結(jié)構(gòu)):進(jìn)程的基本常用信息,常駐內(nèi)存

U用戶區(qū)(user結(jié)構(gòu)):可以調(diào)出到外存,進(jìn)程處于執(zhí)行狀態(tài)時才用得著,各種資源表格本進(jìn)程區(qū)表:定義了從虛地址到實(shí)地址的映射核心棧:核心態(tài)執(zhí)行時的過程調(diào)用的棧結(jié)構(gòu)3.3.3Unix的進(jìn)程管理4.UNIX的進(jìn)程狀態(tài)及其轉(zhuǎn)換NotEnoughMemoryKernalRunningReadytoRun,SwappedZombieReadytoRun,inMemoryAsleepinMemoryRescheduleProcessSleepWakeupExitSleep,SwappedSwapOutCreatedWakeupSwapInEnoughMemoryForkSwapOutUserRunningPreemptedReturnSystemCall,InterruptInterrupt,InterruptReturnPreemptReturntoUser3.3.3Unix的進(jìn)程管理進(jìn)程調(diào)度方式根據(jù)進(jìn)程調(diào)度時是否允許搶占,分為:搶占式:現(xiàn)行進(jìn)程在運(yùn)行過程中,如果有重要或緊迫的進(jìn)程到達(dá)(其優(yōu)先級高并且狀態(tài)必須為就緒),則現(xiàn)運(yùn)行進(jìn)程將被迫放棄處理器,系統(tǒng)將處理器立刻分配給新到達(dá)的進(jìn)程。非搶占方式:現(xiàn)行進(jìn)程在運(yùn)行過程中,只有現(xiàn)行進(jìn)行時間片到或因等待事件發(fā)生,現(xiàn)行主動放棄CPU,不允許優(yōu)先級高進(jìn)程搶占CPU資源。3.3.3Unix的進(jìn)程管理3.UNIX的進(jìn)程控制(1)UNIX的進(jìn)程控制的系統(tǒng)調(diào)用

fork():創(chuàng)建一個新進(jìn)程

exec():執(zhí)行一個可執(zhí)行程序

exit():退出

sleep():暫停一段時間3.3.3Unix的進(jìn)程管理5.UNIX的進(jìn)程控制(1)UNIX的進(jìn)程控制的系統(tǒng)調(diào)用pause():暫停并等待信號wait():等待子進(jìn)程暫停或終止

kill():發(fā)送信號到某個或一組進(jìn)程

ptrace():設(shè)置執(zhí)行斷點(diǎn)(breakpoint),允許父進(jìn)程控制子進(jìn)程的運(yùn)行3.3.3Unix的進(jìn)程管理5.UNIX的進(jìn)程控制(2)

fork()—創(chuàng)建一個新進(jìn)程

fork()調(diào)用格式:pid=fork()

父子進(jìn)程的fork()返回值不同:在子進(jìn)程中返回時,pid為0;在父進(jìn)程中返回時,pid為所創(chuàng)建的子進(jìn)程的標(biāo)識fork函數(shù)創(chuàng)建的子進(jìn)程的數(shù)據(jù)段與父進(jìn)程是不共享的。父進(jìn)程消失不會導(dǎo)致子進(jìn)程消失。3.3.3Unix的進(jìn)程管理5.UNIX的進(jìn)程控制(3)

frk()—創(chuàng)建一個新進(jìn)程

frk()調(diào)用格式:pid=frk()

父子進(jìn)程的frk()返回值不同:在子進(jìn)程中返回時,pid為0;在父進(jìn)程中返回時,pid為所創(chuàng)建的子進(jìn)程的標(biāo)識frk函數(shù)創(chuàng)建的子進(jìn)程的數(shù)據(jù)段與父進(jìn)程都是共享的。父進(jìn)程消失導(dǎo)致子進(jìn)程消失。3.3.3Unix的進(jìn)程管理fork創(chuàng)建子進(jìn)程5.UNIX的進(jìn)程控制frk函數(shù):創(chuàng)建的新進(jìn)程又稱為輕權(quán)進(jìn)程fork和frk函數(shù)異同:區(qū)別frk共享數(shù)據(jù)段,fork不共享數(shù)據(jù)段相同點(diǎn):frk和fork創(chuàng)建的子進(jìn)程都不與父進(jìn)程共享代碼段3.3.3Unix的進(jìn)程管理(3)

exec()—執(zhí)行一個文件的調(diào)用子進(jìn)程如何執(zhí)行一個新的程序文本?通過exec族調(diào)用,加載新的程序文本

exec用一個新進(jìn)程覆蓋調(diào)用進(jìn)程。3.3.3Unix的進(jìn)程管理5.UNIX的進(jìn)程控制

總結(jié)2

原語進(jìn)程控制原語:創(chuàng)建、撤銷、阻塞與喚醒、掛起與激活

UNIX的進(jìn)程、狀態(tài)、控制原語(fork)3.3進(jìn)程控制介紹windows系統(tǒng)中的進(jìn)程控制代碼介紹linux系統(tǒng)中的進(jìn)程控制代碼3.3進(jìn)程控制3.4線程(THREAD)

引入線程的目的是簡化線程間的通信,以小的開銷來提高進(jìn)程內(nèi)的并發(fā)程度:(1)

提高系統(tǒng)的執(zhí)行效率;(2)減少處理機(jī)的空轉(zhuǎn)時間和調(diào)度切換的時間,便于系統(tǒng)管理。本節(jié)內(nèi)容包括線程的引入進(jìn)程和線程的比較線程舉例1、進(jìn)程地位

資源分配單位(存儲器、文件)和CPU調(diào)度(分派)單位。又稱為"任務(wù)(task)”多線程是指OS支持在一個進(jìn)程中執(zhí)行多個線程的能力3.4.1進(jìn)程與線程的關(guān)系2、線程Thread

在引入線程的OS中,線程作為CPU調(diào)度單位,而進(jìn)程只作為其他資源(內(nèi)存)分配單位。(1)只擁有必不可少的資源,如:線程狀態(tài)、寄存器上下文和棧(2)同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài)3.4.1進(jìn)程與線程的關(guān)系在下面的敘述中正確的是()。線程是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。A引入線程可提高程序并發(fā)執(zhí)行的程度,可進(jìn)一步提高系統(tǒng)效率。B線程的引入增加了程序執(zhí)行時的時空開銷。C一個進(jìn)程一定包含多個線程。D提交單選題1分下面關(guān)于線程的敘述中,正確的是()。不論是系統(tǒng)支持線程還是用戶級線程,其切換都需要內(nèi)核的支持。A線程是資源的分配單位,進(jìn)程是調(diào)度和分配的單位。B不管系統(tǒng)中是否有線程,進(jìn)程都是擁有資源的獨(dú)立單位。C在引入線程的系統(tǒng)中,進(jìn)程仍是資源分配和調(diào)度分派的基本單位。D提交單選題1分3進(jìn)程與線程關(guān)系類型3.4.1進(jìn)程與線程的關(guān)系4進(jìn)程與線程的關(guān)系線程組成:TCB、堆棧、寄存器3.4.1進(jìn)程與線程的關(guān)系在支持多線程的系統(tǒng)中,進(jìn)程P創(chuàng)建的若干個線程不能共享的是()。進(jìn)程P的代碼段A進(jìn)程P中打開的文件B進(jìn)程P的全局變量C進(jìn)程P中某線程的棧指針D提交單選題1分1、進(jìn)程模型適應(yīng)場合

在處理“基于同數(shù)據(jù)區(qū)的同時多請求”時的效率局限性。

例:售票系統(tǒng):數(shù)據(jù)庫服務(wù)器軟件需同時處理來自多個用戶進(jìn)程的讀盤請求,可以有如下幾種方式:3.4.2線程的引入2、線程特點(diǎn)(1)通過線程可方便有效地實(shí)現(xiàn)并行性(2)創(chuàng)建線程快,開銷少所有線程可共享進(jìn)程的主存;程序之間切換的開銷要比線程之間切換的開銷小(3)多線程機(jī)制,對多個客戶同時提出服務(wù)請求時的回答十分有利3.4.2線程的引入下面關(guān)于線程的敘述中,正確的是()。不論是系統(tǒng)線程還是用戶級線程,其切換都需要內(nèi)核的支持。A線程是資源的分配單位,進(jìn)程是調(diào)度和分配的單位。B不管系統(tǒng)中是否有線程,進(jìn)程都是擁有資源的獨(dú)立單位。C在引入線程的系統(tǒng)中,進(jìn)程仍是資源分配和調(diào)度分派的基本單位。D提交單選題1分1、減小并發(fā)執(zhí)行的時間和空間開銷(線程的創(chuàng)建、退出和調(diào)度)2、線程的創(chuàng)建時間比進(jìn)程短;3、線程的終止時間比進(jìn)程短;3.4.3線程的優(yōu)點(diǎn)4、同一個進(jìn)程內(nèi)的線程切換時間比進(jìn)程短5、由于同進(jìn)程內(nèi)線程間共享進(jìn)程的代碼、數(shù)據(jù)、內(nèi)存等資源,可直接進(jìn)行不通過內(nèi)核的通信;而進(jìn)程間的通信需要通過內(nèi)核進(jìn)行,以提供保護(hù)和通信所需機(jī)制。3.4.3線程的優(yōu)點(diǎn)在下面的敘述中,不正確的是()。一個進(jìn)程可創(chuàng)建一個或多個線程A一個線程可創(chuàng)建一個或多個線程B一個線程可創(chuàng)建一個或多個進(jìn)程C一個進(jìn)程可創(chuàng)建一個或多個進(jìn)程D提交單選題1分在下面的敘述中,正確的是()。引入線程后,處理機(jī)只在線程間切換。A引入線程后,處理機(jī)仍在進(jìn)程間切換。B線程的切換,不會引起進(jìn)程的切換。C線程的切換,可能引起進(jìn)程的切換。D提交單選題1分1、不適宜:很少做進(jìn)程調(diào)度和切換的實(shí)時系統(tǒng)、個人數(shù)字助理系統(tǒng)。任務(wù)單一2、最適宜:多處理機(jī)系統(tǒng)3.4.4線程的適用范圍3、典型應(yīng)用環(huán)境(1)服務(wù)器中的文件管理、客戶/服務(wù)器方式的服務(wù)器程序。(2)前后臺處理。如表處理程序,用戶輸入命令和命令執(zhí)行(3)異步處理:一個程序中可以并發(fā)的程序段,使用不同的線程3.4.4線程的適用范圍1、基本狀態(tài)

三種基本狀態(tài):執(zhí)行、就緒、阻塞只有三種轉(zhuǎn)化,與進(jìn)程轉(zhuǎn)化有區(qū)別。就緒執(zhí)行阻塞結(jié)束派生Spawn調(diào)度Dispatch激活阻塞結(jié)束3.4.5線程的狀態(tài)1.內(nèi)核線程(kernel-levelthread)依賴于OS核心,由內(nèi)核的內(nèi)部需求進(jìn)行創(chuàng)建和撤銷,用來執(zhí)行一個指定的函數(shù)。WindowsNT和OS/2支持內(nèi)核線程;3.4.6線程類型2.用戶線程(user-levelthread)(1)不依賴于OS核心;(2)應(yīng)用進(jìn)程利用線程庫提供的創(chuàng)建、同步、調(diào)度和管理線程的系統(tǒng)函數(shù)來控制用戶線程。3.4.6線程類型(1)地址空間和其他資源:進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享(2)通信:進(jìn)程間通過IPC通信,線程間可以直接共享全局變量進(jìn)行通信(3)調(diào)度:線程上下文切換比進(jìn)程上下文切換要快3.4.7進(jìn)程和線程的比較在下面的敘述中正確的是()。線程是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。A引入線程可提高程序并發(fā)執(zhí)行的程度,可進(jìn)一步提高系統(tǒng)效率。B線程的引入增加了程序執(zhí)行時的時空開銷。C一個進(jìn)程一定包含多個線程。D提交單選題1分

每個線程的內(nèi)容每個進(jìn)程的內(nèi)容 程序計數(shù)器 地址空間 堆棧 全局變量 寄存器組 打開文件子線程 子進(jìn)程狀態(tài) 定時器 信號 信號量 記帳信息3.4.7進(jìn)程和線程的比較若系統(tǒng)中只有用戶級線程,則處理機(jī)調(diào)度單位是()。線程A進(jìn)程B程序C作業(yè)D提交單選題1分3.4.8線程編程#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000); }}voidmain(void){cout<<"CreateThread"<<endl;

//Createathread DWORDIDThread; HANDLEhThread; hThread=CreateThread(NULL,//nosecurityattributes

0,//usedefaultstacksize

(LPTHREAD_START_ROUTINE)SubThread,

//threadfunction

NULL,//nothreadfunctionargument

0,//usedefaultcreationflags

&IDThread);//returnsthreadidentifier

//Checkthereturnvalueforsuccess

if(hThread==NULL) cout<<"CreateThreaderror"<<endl;3.4.8線程編程inti; for(i=0;i<5;i++) {cout<<"MainThread"<<i<<endl; if(i==1) { if(SuspendThread(hThread)==0xFFFFFFFF) { cout<<"Suspendthreaderror."<<endl; } else { cout<<"Suspendthreadisok."<<endl; } }3.4.8線程編程

if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) { cout<<"Resumethreaderror."<<endl; } else { cout<<"Resumethreadisok."<<endl; } } Sleep(4000); }//endfor}3.4.8線程編程CreateThreadMainThread0SubThread0SubThread1MainThread1Suspendthreadisok.MainThread2MainThread3Resumethreadisok.SubThread2SubThread3MainThread4SubThread4運(yùn)行結(jié)果3.4.8線程編程

3.5進(jìn)程的互斥

——你要,我也要

1、多道程序設(shè)計帶來的問題

并發(fā)執(zhí)行的多個進(jìn)程可能產(chǎn)生互斥或同步的相互制約關(guān)系,不采取措施,可能導(dǎo)致結(jié)果的不可再現(xiàn)性。影響系統(tǒng)效率,而且還可以導(dǎo)致系統(tǒng)崩潰。3.5.1互斥的定義

1、進(jìn)程互斥

指的是對某個系統(tǒng)資源,一個進(jìn)程正在使用它,另外一個想用它的進(jìn)程就必須等待,而不能同時使用。3.5.1互斥的定義

2、進(jìn)程互斥是一種間接制約關(guān)系多道程序系統(tǒng)中進(jìn)程間存在的一種源于資源共享的制約關(guān)系,主要是由被共享資源的獨(dú)占使用性質(zhì)所決定的。并發(fā)進(jìn)程之間()彼此無關(guān)A必須同步B必須互斥C提交可能需要同步或互斥D單選題1分3、臨界資源限定進(jìn)程只能互斥地訪問的資源(指一次僅允許一個進(jìn)程使用的資源,不允許并發(fā)訪問)。4、臨界資源不能搶占,不可剝奪

在搶占式操作系統(tǒng)中,優(yōu)先級別高的進(jìn)程不能中途從低優(yōu)先級進(jìn)程手中把臨界資源搶來使用。一、互斥的定義在下面的敘述中,正確的是()。臨界資源是非共享資源A臨界資源是任意共享資源B臨界資源是互斥共享資源C臨界資源是同時共享資源D提交單選題1分下列資源中,()是臨界資源。打印機(jī)A非共享的資源B共享變量C共享緩沖區(qū)D提交多選題1分5、臨界資源與非臨界資源舉例(1)臨界資源

打印機(jī)、共享變量(2)可剝奪性使用的資源CPU、內(nèi)存和磁盤等。一、互斥的定義下面列出的選項(xiàng)中,不屬于可剝奪性資源的有()。CPUA內(nèi)存B磁盤C磁帶機(jī)D提交單選題1分一、互斥的定義6、臨界區(qū)

進(jìn)程中訪問臨界資源的那段程序代碼稱為臨界區(qū)或臨界段。7、同類臨界區(qū)(相關(guān)臨界區(qū))使用同一臨界資源的不同進(jìn)程中的臨界區(qū)。一、互斥的定義8、臨界區(qū)互斥訪問臨界資源使用同一臨界資源的進(jìn)程應(yīng)互斥地進(jìn)入各自的臨界區(qū)。9、臨界區(qū)的使用原則

空則讓進(jìn),忙則等待,等則有限,等則讓權(quán)一、互斥的定義3.5.2互斥機(jī)制1、操作系統(tǒng)實(shí)現(xiàn)進(jìn)程的互斥、同步的機(jī)制形式(1)上鎖與開鎖原語(2)信號燈機(jī)制(重點(diǎn))(3)管程機(jī)制2、上鎖與開鎖機(jī)制(1)特點(diǎn)

最簡單的進(jìn)程互斥機(jī)制(2)互斥實(shí)現(xiàn)機(jī)制使用鎖變量W來表示某種臨界資源的狀態(tài)。

W=0表示資源空閑可用

W=1表示資源正被使用

3.5.2互斥機(jī)制(3)上鎖原語:LOCK(W)

算法思想L1:如果W=1那么轉(zhuǎn)向L1;否則W=1返回1.考察鎖位的值;2.如果原來的值為0,將鎖位置1;3.如果為1,則返回第一步再次考察2、上鎖與開鎖機(jī)制3.5.2互斥機(jī)制算法偽代碼voidlock(鎖變量w){test:if(w為1)gototestelsew=1;/*上鎖*/}/*lock(w)*/(3)上鎖原語:LOCK(W)

2、上鎖與開鎖機(jī)制3.5.2互斥機(jī)制W=0;返回voidunlock(鎖變量w){w=0;/*開鎖*/}/*unlock(w)*/當(dāng)進(jìn)程使用完資源后,它必須將鎖位置成“0”,稱為開鎖操作。(3)開鎖原語:UNLOCK(W)

2、上鎖與開鎖機(jī)制3.5.2互斥機(jī)制3、上鎖與開鎖原語實(shí)現(xiàn)進(jìn)程互斥機(jī)制方法(1)欲進(jìn)入臨界區(qū)的進(jìn)程,必須先執(zhí)行上鎖原語;(2)若上鎖原語順利通過,則進(jìn)程可進(jìn)入臨界區(qū);(3)當(dāng)完成對臨界區(qū)資源的訪問后再執(zhí)行開鎖原語,以釋放該臨界資源。3.5.2互斥機(jī)制例如,甲、乙兩進(jìn)程要訪問同一類臨界資源甲進(jìn)程:其他代碼;

LOCK(W);甲進(jìn)程的臨界區(qū);

UNLOCK(W);其他代碼;乙進(jìn)程:其他代碼;

LOCK(W);乙進(jìn)程的臨界區(qū);

UNLOCK(W);其他代碼;3.5.2互斥機(jī)制4、上鎖原語和開鎖原語實(shí)現(xiàn)互斥優(yōu)缺點(diǎn)優(yōu)點(diǎn):簡單缺點(diǎn):處理機(jī)效率不高

因?yàn)樯湘i原語中的條件測試操作可能引起CPU“忙等”。3.5.2互斥機(jī)制3.6信號量機(jī)制

荷蘭著名科學(xué)家,后來的計算機(jī)圖靈獎獲得者,E.W.Dijkstra于1965年提出了用作進(jìn)程同步工具的信號量(semaphore)機(jī)制,這是一種卓有成效的進(jìn)程互斥同步工具,已被廣泛應(yīng)用于現(xiàn)代計算機(jī)系統(tǒng)中。信號量機(jī)制的基本原理兩個或多個進(jìn)程可以利用彼此間收發(fā)的簡單的信號來實(shí)現(xiàn)“正確的”并發(fā)執(zhí)行,一個進(jìn)程在收到一個指定信號前,會被迫在一個確定的或者需要的地方停下來,從而保持同步或互斥。3.6信號量機(jī)制

3.6.1信號量的概念1、信號量,也叫信號燈,一般是由兩個成員組成的結(jié)構(gòu)體,是一個確定的二元組(S,Q)

(1)S是個具有非負(fù)初值的整型變量,表示該信號量的值,且S的值只能由定義在信號量上的P操作原語和V操作原語來改變;(2)Q是個初始狀態(tài)為空的隊列。2、信號量類型是個復(fù)合類型,其一個分量是個整型分量S,另一個分量是個等待隊列指針Q(一個是指向PCB的指針,當(dāng)多個進(jìn)程都等待同一信號量時,它們就排成一個隊列,由信號量的指針項(xiàng)指出該隊列的頭。)3.6.1信號量的概念

3、信號量通常可以簡單反映出相應(yīng)資源的使用情況,它與P,V操作原語一起使用可實(shí)現(xiàn)進(jìn)程的同步和互斥。3.6.1信號量的概念4、信號量的整型分量S的值的物理含義

(1)當(dāng)S≥0時,表示某類可用資源的數(shù)目,或者說表示可以執(zhí)行P操作而不會被阻塞的進(jìn)程的數(shù)目;3.6.1信號量的概念(2)當(dāng)S<0時,其絕對值表示因等待信號量S被阻塞在阻塞隊列中的進(jìn)程數(shù),即系統(tǒng)中因請求該類資源而被阻塞的進(jìn)程的數(shù)目(3)S的值只能由P、V操作來改變。

注意:S值負(fù)數(shù)值和非負(fù)數(shù)值代表含義不同。4、信號量的整型分量S的值的物理含義

3.6.1信號量的概念3.6.2

P、V操作原語1、P、V原語意思(1)P代表荷蘭語的proberen,意為“測試”;(2)V代表荷蘭語的verhogen,意為“增加”。現(xiàn)在很多國外的文獻(xiàn)都使用wait和signal操作(或者down和up操作)代替P、V操作。C++中的P、V操作就用wait和signal操作。2、P(S)原語操作的算法描述(1)S減1;(2)若S≥0,則調(diào)用P(S)的進(jìn)程返回,繼續(xù)執(zhí)行;(3)若S<0,調(diào)用者進(jìn)程調(diào)用阻塞原語Block(Q),把自己插入到信號量S的阻塞隊列Q中(把相應(yīng)的PCB連入等待該信號量隊列的末尾,并放棄處理機(jī),進(jìn)入等待)。

3.6.2

P、V操作原語設(shè)兩個進(jìn)程共用一個臨界資源的互斥信號量mutex,當(dāng)mutex=-1時表示()。一個進(jìn)程進(jìn)入了臨界區(qū),另一個進(jìn)程等待A沒有一個進(jìn)程進(jìn)入臨界區(qū)B兩個進(jìn)程都進(jìn)入了臨界區(qū)C兩個進(jìn)程都在等待D提交單選題1分()操作不是P操作可完成的。為進(jìn)程分配處理機(jī)A使信號量的值變小B可用于進(jìn)程的同步C使進(jìn)程進(jìn)入阻塞狀態(tài)D提交單選題1分P(s)入口S-1=>SS≥0Block(Q)

返回YN2P(S)操作的算法流程圖描述3.6.2

P、V操作原語當(dāng)一進(jìn)程因在記錄型信號量S上執(zhí)行P原語操作而被阻塞后,S的值為()。>0A<0B≥0C≤0D提交單選題1分3.V(S)原語操作的算法描述(1)S加1;(2)若S>0,則調(diào)用V(S)的進(jìn)程繼續(xù)執(zhí)行,返回;(說明沒有等待該信號量的進(jìn)程)(3)若S<=0,調(diào)用者進(jìn)程調(diào)用喚醒原語Wakeup(Q),把等待信號量S的阻塞隊列Q中的隊首進(jìn)程移出并喚醒進(jìn)入就緒隊列,返回。

3.6.2

P、V操作原語V(s)入口S+1=>SS>0Wakeup(Q)

返回YN3.V(S)原語操作的算法描述3.6.2

P、V操作原語4P(S)操作和V(S)操作的物理含義

(1)P(S)操作表示“等信號”,即測試一個要等的信號是否到達(dá);(2)V(S)操作表示“發(fā)信號”。這個信號在實(shí)現(xiàn)同步時就是“合作者的伙伴進(jìn)程已完成前趨任務(wù)”,在實(shí)現(xiàn)互斥時就是“臨界資源可用”。3.6.2

P、V操作原語當(dāng)一進(jìn)程因在記錄型信號量S上執(zhí)行V()操作而導(dǎo)致喚醒另一進(jìn)程后,S的值為()。>0A<0B≥0C≤0D提交單選題1分5、P(S)操作和V(S)操作的物理含義

在互斥問題中,每執(zhí)行一次P(S)操作的含義,也可理解為進(jìn)程請求一個單位的S類資源;每執(zhí)行一次V(S)操作的含義,也可理解為進(jìn)程釋放一個單位的S類資源。3.6.2

P、V操作原語如果信號量的當(dāng)前值為-4,則表示系統(tǒng)中在該信號量上有()個進(jìn)程等待。4A3B5C0D提交單選題1分3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥1、在相關(guān)進(jìn)程的臨界區(qū)的前后分別施以P操作和V操作即可。這里所用信號量的初值一般為1,表示臨界資源未被占用,且其可用數(shù)目為1。如果有三個進(jìn)程共享同一互斥段,而且每次最多允許兩個進(jìn)程進(jìn)入該互斥段,則信號量的初值應(yīng)設(shè)置為()。3A1B2C0D提交單選題1分2、優(yōu)勢

用P、V操作原語實(shí)現(xiàn)進(jìn)程互斥的效率更高,因?yàn)镻操作中引入了阻塞機(jī)制,互斥進(jìn)程之間有互相通信機(jī)制,所以消除了上鎖原語中的CPU忙等現(xiàn)象。3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥P(S)V(S)P(S)V(S)P(S)V(S)P1P2P3互斥區(qū)3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥課堂練習(xí)1、多個進(jìn)程對信號量S進(jìn)行了5次P操作,2次V操作后,現(xiàn)在信號量的值是

-3,與信號量S相關(guān)的處于阻塞狀態(tài)的進(jìn)程有幾個?信號量的初值是多少?2、有m個進(jìn)程共享同一臨界資源,若使用信號量機(jī)制實(shí)現(xiàn)對一臨界資源的互斥訪問,則信號量的變化范圍是(

)。

例題

一個簡化的異地售票程序,假設(shè)幾乎同時兩地有兩個乘客要購買同一班次的車票各一張。

以上案例如果不加控制,會導(dǎo)致什么問題?

3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥例3.1試用P、V操作實(shí)現(xiàn)火車聯(lián)網(wǎng)訂票系統(tǒng)中北京、天津兩地的兩個終端售票進(jìn)程發(fā)售同一班次車票的過程。

3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥用P、V原語控制進(jìn)程互斥與同步的主要步驟:(1)分析清楚題目涉及的進(jìn)程間的制約關(guān)系。(2)設(shè)置信號量(包括信號量的個數(shù)和初值,對于同步問題還要寫出信號量的物理含義)。(3)給出進(jìn)程相應(yīng)程序的算法描述或流程控制,并把P、V操作加到程序的適當(dāng)處。3.6.3用P、V操作原語實(shí)現(xiàn)進(jìn)程的互斥北京售票終端進(jìn)程:

①根據(jù)顧客訂票要求找到公共數(shù)據(jù)單元PK;②P(S);③把PK的值讀到工作寄存器R1中;④根據(jù)顧客訂票數(shù)修改R1;⑤將R1的值回寫到PK中;⑥V(S);⑦售出顧客所訂的票,返回;

天津售票終端進(jìn)程

①根據(jù)顧客訂票要求找到公共數(shù)據(jù)單元PK;②P(S);③把PK的值讀到工作寄存器R2中;④根據(jù)顧客訂票數(shù)修改R2;⑤將R1的值回寫到PK中;⑥V(S);⑦售出顧客所訂的票,返回;3.7進(jìn)程的同步(synchronism)

——你等我,我也等你

多道程序系統(tǒng)中,許多進(jìn)程之間可能存在以下兩種制約關(guān)系:源于資源共享的間接制約關(guān)系(互斥)

源于合作相互的直接制約關(guān)系(同步)

——你等我,我也等你

1、進(jìn)程互斥與同步的關(guān)系進(jìn)程同步是指多個合作進(jìn)程在獨(dú)自并發(fā)執(zhí)行過程中的某些確定的時序點(diǎn)上“你等我,我也等你”的同步約束,進(jìn)程互斥可視為進(jìn)程同步的特例。3.7進(jìn)程的同步(synchronism)3.7.1同步的定義

1、定義

指的是兩個或多個進(jìn)程為了合作完成同一個任務(wù),在執(zhí)行速度或某些個確定的時序點(diǎn)上必須相互協(xié)調(diào)。

當(dāng)一個進(jìn)程到達(dá)了某一確定點(diǎn)而沒有得到合作伙伴發(fā)來的“已完成某些操作”的消息時必須等待,直到該消息到達(dá)被喚醒后,才能繼續(xù)向前推進(jìn)。(1)單向同步關(guān)系

進(jìn)程之間同步關(guān)系有時也被形象地稱為“生產(chǎn)者與消費(fèi)者”之間的關(guān)系,“產(chǎn)品”(即生產(chǎn)者進(jìn)程的輸出,亦即消費(fèi)者進(jìn)程的輸入)是它們的紐帶,它們在執(zhí)行過程中的某個或某些確定的時序點(diǎn)上有著固定的前趨后繼的同步約束,即先“生產(chǎn)”后“消費(fèi)”,這是一種“你等我”的關(guān)系。2進(jìn)程同步關(guān)系分析3.7.1同步的定義(2)雙向同步關(guān)系(互為生產(chǎn)者與消費(fèi)者)在稍微復(fù)雜一點(diǎn)的進(jìn)程同步問題里,合作進(jìn)程間的“生產(chǎn)者與消費(fèi)者”的關(guān)系或身份是可以經(jīng)常轉(zhuǎn)換的,因此,這些合作進(jìn)程在執(zhí)行過程中就會出現(xiàn)時而你等我,時而我等你的現(xiàn)象。

不管是單向或雙向同步關(guān)系,產(chǎn)品都是信號量。

2進(jìn)程同步關(guān)系分析3.7.1同步的定義(3)相似處

進(jìn)程的互斥實(shí)際上是進(jìn)程同步的一種特殊情況;進(jìn)程的互斥和同步可以都統(tǒng)稱為進(jìn)程同步。2進(jìn)程同步關(guān)系分析3.7.1同步的定義(4)進(jìn)程同步與互斥區(qū)別進(jìn)程互斥是進(jìn)程間競爭互斥資源的使用權(quán),這種競爭沒有固定的必然聯(lián)系,哪個進(jìn)程競爭到使用權(quán)就歸那個進(jìn)程使用,直到不需要使用時再歸還;進(jìn)程同步是指多個進(jìn)程為了合作完成同一個任務(wù),在執(zhí)行速度或某些個確定的時序點(diǎn)上必須相互協(xié)調(diào),后面進(jìn)程的執(zhí)行需要前面運(yùn)行進(jìn)程的輸出。2進(jìn)程同步關(guān)系分析3.7.1同步的定義在操作系統(tǒng)中,有一組進(jìn)程,進(jìn)程之間具有直接相互制約性。這組并發(fā)進(jìn)程之間()。必定無關(guān)A必定相關(guān)B可能相關(guān)C相關(guān)程度相同D提交單選題1分1、P、V操作配對出現(xiàn)對同一個信號量的P、V操作不能同時出現(xiàn)在同一個進(jìn)程的程序里,而是分別出現(xiàn)在一個生產(chǎn)者進(jìn)程和它的合作伙伴—消費(fèi)者進(jìn)程的代碼中。

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論