第三次作業(yè)答案_第1頁
第三次作業(yè)答案_第2頁
第三次作業(yè)答案_第3頁
第三次作業(yè)答案_第4頁
第三次作業(yè)答案_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2.1比較程序次序執(zhí)行和并發(fā)執(zhí)行。答:程序次序執(zhí)行程序并發(fā)執(zhí)行次序性:處理機(jī)操作嚴(yán)格按照程序所要求次序執(zhí)行間斷性:共享系統(tǒng)資源,程序之間形成了相互制約關(guān)系封閉性:程序一旦開始執(zhí)行,執(zhí)行結(jié)果不受外界原因影響失去封閉性:多個程序共享系統(tǒng)中各種資源,這些資源狀態(tài)將由多個程序來改變,致使程序失去封閉性??稍佻F(xiàn)性:只要程序執(zhí)行時環(huán)境和初始條件相同,都將取得相同結(jié)果。不可再現(xiàn)性:程序失去封閉性,計算結(jié)果與并發(fā)程序執(zhí)行速度關(guān)于。程序經(jīng)過數(shù)次執(zhí)行后,即使他們執(zhí)行時環(huán)境和初始條件相同,不過結(jié)果卻不相同。2.2比較程序和進(jìn)程。答:1)進(jìn)程是一個動態(tài)概念,而程序則是一個靜態(tài)概念。程序是指令有序集合,沒有任何執(zhí)行含義,而進(jìn)程則強(qiáng)調(diào)執(zhí)行過程,它動態(tài)地被創(chuàng)建,并被調(diào)度執(zhí)行后消亡。2)進(jìn)程具備并行特征,而程序沒有。進(jìn)程具備并行特征兩個方面,即獨(dú)立性和異步性。也就是說,在不考慮資源共享情況下,各進(jìn)程執(zhí)行是獨(dú)立,它們之間不存在邏輯上制約關(guān)系,各進(jìn)程是異步。因?yàn)槌绦虿环磻?yīng)執(zhí)行過程,所以不具備并行特征。3)進(jìn)程是系統(tǒng)中獨(dú)立存在實(shí)體,是競爭資源基本單位。進(jìn)程對應(yīng)特殊描述結(jié)構(gòu)并有申請、使用、釋放資源資格。因?yàn)橄到y(tǒng)中存在多個進(jìn)程,系統(tǒng)資源有限性必定造成多個進(jìn)程對資源共享和競爭,從而使進(jìn)程并行性受到系統(tǒng)制約。4)進(jìn)程存在必定需要程序存在,但進(jìn)程和程序不是一一對應(yīng)。因?yàn)檫M(jìn)程是程序執(zhí)行過程,所以程序是進(jìn)程一個組成部分。處于靜止?fàn)顟B(tài)程序并不對應(yīng)于任何進(jìn)程。當(dāng)程序被處理機(jī)執(zhí)行時,它一定屬于某一個或者多個進(jìn)程。屬于進(jìn)程程序能夠是一個,也能夠是多個。不一樣進(jìn)程能夠包含同一個程序,只要該程序所對應(yīng)數(shù)據(jù)集不一樣。2.3試對進(jìn)程狀態(tài)及狀態(tài)轉(zhuǎn)換進(jìn)行總結(jié),注意狀態(tài)轉(zhuǎn)換物理含義及轉(zhuǎn)化條件。答:處于就緒狀態(tài)進(jìn)程,在調(diào)度程序?yàn)橹峙淞颂幚頇C(jī)之后,該進(jìn)程便可執(zhí)行,對應(yīng)地,它就由就緒狀態(tài)轉(zhuǎn)變?yōu)檫\(yùn)行狀態(tài)。正在執(zhí)行進(jìn)程也稱為當(dāng)前進(jìn)程,假如分配給它時間片已完而被暫停執(zhí)行時,該進(jìn)程便由執(zhí)行狀態(tài)又回復(fù)到就緒狀態(tài);假如因發(fā)生某事件而使進(jìn)程執(zhí)行受阻,使之無法繼續(xù)執(zhí)行,該進(jìn)程將由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)。引入掛起狀態(tài)后,又增加了從掛起狀態(tài)到非掛起狀態(tài)之間轉(zhuǎn)換,當(dāng)進(jìn)程處于未被掛起就緒狀態(tài)時,用掛起原語Suspend將該進(jìn)程掛起后,該進(jìn)程便轉(zhuǎn)變成為靜止就緒狀態(tài),此時進(jìn)程不再被調(diào)度執(zhí)行。當(dāng)進(jìn)程處于未被掛起阻塞狀態(tài)時,用Suspend原語將它掛起后,進(jìn)程便轉(zhuǎn)變?yōu)殪o止阻塞狀態(tài),處于該狀態(tài)進(jìn)程在其所期待事件出現(xiàn)后,將從靜止阻塞狀態(tài)變成靜止就緒。處于活動就緒狀態(tài)進(jìn)程,若用激活原語Active激活后,該進(jìn)程將轉(zhuǎn)變?yōu)閽炱鹁途w狀態(tài)。處于活動阻塞狀態(tài)進(jìn)程,若用激活原語Active激活后,將轉(zhuǎn)變?yōu)樽枞麙炱馉顟B(tài)。2.4試舉例說明引發(fā)進(jìn)程創(chuàng)建、撤消、阻塞或被喚醒主要事件分別有哪些?答:引發(fā)進(jìn)程創(chuàng)建,如用戶登錄;作業(yè)調(diào)度;提供服務(wù);應(yīng)用請求。進(jìn)程撤消,當(dāng)一個進(jìn)程抵達(dá)了自然結(jié)束點(diǎn),或時出現(xiàn)了無法克服錯誤,或是被操作系統(tǒng)所中介,或是被其余有終止權(quán)進(jìn)程所終止,都會引發(fā)進(jìn)程撤消。進(jìn)程阻塞,請求系統(tǒng)服務(wù),不能立刻滿足;開啟某種操作,且必須在該操作完成之后才能繼續(xù)執(zhí)行;新數(shù)據(jù)還未抵達(dá),相互合作進(jìn)程一方需首先取得另一進(jìn)程數(shù)據(jù)才能繼續(xù);無新工作可做,特定功效系統(tǒng)進(jìn)程當(dāng)完成任務(wù)且暫無任務(wù)。進(jìn)程被喚醒,系統(tǒng)服務(wù)滿足;操作完成;數(shù)據(jù)抵達(dá);新任務(wù)出現(xiàn)。2.5試依照你自己了解,采取類C語言設(shè)計和描述操作系統(tǒng)關(guān)于進(jìn)程控制塊數(shù)據(jù)結(jié)構(gòu)、組織方式及管理機(jī)制。在此基礎(chǔ)上,給出進(jìn)程創(chuàng)建、終止、阻塞、喚醒、掛起與激活等函數(shù)原型及函數(shù)代碼。注意,對于過于復(fù)雜功效或你無法處理細(xì)節(jié)可采取指定功效函數(shù)模塊如處理機(jī)調(diào)度scheduler()來代替。答:進(jìn)程控制塊數(shù)據(jù)結(jié)構(gòu):

Structtask_struct{longstate;/*任務(wù)運(yùn)行狀態(tài)(-1不可運(yùn)行,0可運(yùn)行(就緒),>0已停頓)*/longcounter;/*運(yùn)行時間片計數(shù)器(遞減)*/longpriority;/*優(yōu)先級*/longsignal;/*信號*/struct

sigactionsigaction[32];/*信號執(zhí)行屬性結(jié)構(gòu),對應(yīng)信號將要執(zhí)行操作和標(biāo)志信息*/longblocked;/*bitmapofmaskedsignals*//*variousfields*/int

exit_code;/*任務(wù)執(zhí)行停頓退出碼*/unsignedlongstart_code,end_code,end_data,brk,start_stack;/*代碼段地址代碼長度(字節(jié)數(shù))代碼長度+數(shù)據(jù)長度(字節(jié)數(shù))總長度堆棧段地址*/

longpid,father,pgrp,session,leader;/*進(jìn)程標(biāo)識號(進(jìn)程號)父進(jìn)程號父進(jìn)程組號會話號會話首領(lǐng)*/unsignedshortuid,euid,suid;/*用戶標(biāo)識號(用戶id)有效用戶id保留用戶id*/unsignedshortgid,egid,sgid;/*組標(biāo)識號(組id)有效組id保留組id*/longalarm;/*報警定時值*/longutime,stime,cutime,cstime,start_time;/*用戶態(tài)運(yùn)行時間內(nèi)核態(tài)運(yùn)行時間子進(jìn)程用戶態(tài)運(yùn)行時間子進(jìn)程內(nèi)核態(tài)運(yùn)行時間進(jìn)程開始運(yùn)行時刻*/unsignedshortused_math;/*標(biāo)志:是否使用協(xié)處理器*//*filesysteminfo*/inttty;/*-1ifnotty,soitmustbesigned*/unsignedshort

umask;/*文件創(chuàng)建屬性屏蔽位*/struct

m_inode*pwd;/*當(dāng)前工作目錄i節(jié)點(diǎn)結(jié)構(gòu)*/struct

m_inode*root;/*根目錄i節(jié)點(diǎn)結(jié)構(gòu)*/struct

m_inode*executable;/*執(zhí)行文件i節(jié)點(diǎn)結(jié)構(gòu)*/unsignedlongclose_on_exec;/*執(zhí)行時關(guān)閉文件句柄位圖標(biāo)志*/struct

file*filp[NR_OPEN];/*進(jìn)程使用文件表結(jié)構(gòu)*//*ldtforthistask0-zero1-cs2-ds&ss*/struct

desc_structldt[3];/*本任務(wù)局部描述符表。0-空,1-代碼段cs,2-數(shù)據(jù)和堆棧段ds&ss*//*tssforthistask*/Struct

tss_structtss;/*本進(jìn)程任務(wù)狀態(tài)段信息結(jié)構(gòu)*/};

組織方式:Typedefstruct

LNode{ElemType

data;//存放pcb塊數(shù)據(jù)信息structLnode

*next;

//指針域

}LNode,*LinkList;

(結(jié)構(gòu)指針)

鏈表查找方式:StatusGetElem_L(LinkListL,inti,ElemType&e){

//

L是帶頭結(jié)點(diǎn)鏈表頭指針,以e返回第i個元素p=L->next;

j=1;

//p指向第一個結(jié)點(diǎn),j為計數(shù)器while(p&&j<i)

{p=p->next;

++j;

}

//

順指針向后查找,直到p指向第i個元素或p為空if(!p||j>i)

return

ERROR;

//

第i個元素不存在e=p->data;

//

取得第i個元素returnOK;}//GetElem_L

算法復(fù)雜度為:O(ListLength(L))

系統(tǒng)建立幾張索引表。每個索引表表目中,統(tǒng)計具備對應(yīng)狀態(tài)某個PCB在PCB表中地址。當(dāng)指針查找索引表,找出PCB地址,再經(jīng)過指針找對應(yīng)該地址PCB塊。平均查找長度:=(n/s+s)/2+1

n為表長度s為表中統(tǒng)計個數(shù)

進(jìn)程管理機(jī)制:用戶使用應(yīng)用程序,應(yīng)用程序要訪問系統(tǒng)調(diào)用接口,產(chǎn)生中止,而系統(tǒng)調(diào)用接口需要查詢中止向量表,cpu依照中止向量號跳轉(zhuǎn)到所需服務(wù)中,即系統(tǒng)調(diào)用服務(wù)程序。系統(tǒng)服務(wù)程序會調(diào)用內(nèi)核函數(shù)(create,terminate,block,wakeup,suspend,active)進(jìn)程創(chuàng)建與終止:創(chuàng)建:Boolfret=BoolCreateProcess(LPCTSTRlpApplivationName,

//全部或部分地指明包含可執(zhí)行代碼EXE文件文件名LPCTSTRlpApplivationName,

//向可執(zhí)行文件發(fā)送參數(shù)LPCTSTRlpApplivationName,

//返回進(jìn)程句柄安全屬性.主要指明這一句柄是否應(yīng)該由其余子進(jìn)程所繼承LPSECURIITY_ATTRIBUTESlpThreadAttributes,

//返回進(jìn)程根本程句柄安全屬性BOOLbInheritHandle,

//一個標(biāo)志,告訴系統(tǒng)允許新進(jìn)程繼承創(chuàng)建者進(jìn)程句柄DWORDdwCreationFlage,//特殊創(chuàng)建標(biāo)志(如CREATE_SUSPENDED)位標(biāo)識LPVOIDlpEnvironment,

//向新進(jìn)程發(fā)送一套環(huán)境變量;如為null值則發(fā)送調(diào)用者環(huán)境LPCTSTRlpCurrentDirectory,//新進(jìn)程開啟目錄STARTUPINFOlpStartupInfo,//STARTUPINFO結(jié)構(gòu),包含新進(jìn)程輸入和輸出配置詳情LPPROCESS_INFORMATIONlpProcessInformation//調(diào)用結(jié)果塊;發(fā)送新應(yīng)用程序進(jìn)程和根本程句柄和ID);

終止:

If(m_hPro){

//假如句柄正當(dāng)

if(!TerminateProcess(m_hPro,0)){

//依照句柄,終止剛才創(chuàng)建進(jìn)程

AfxMessageBox(“關(guān)閉進(jìn)程出現(xiàn)錯誤!”);

Exit(0)}

else

{AfxMessageBox("TerminateProcess成功");

}}原語:被創(chuàng)建進(jìn)程外部標(biāo)識符n、初始CPU狀態(tài)S0,進(jìn)程優(yōu)先數(shù)K0、初始內(nèi)存M0以及所需資源清單R0等、某進(jìn)程運(yùn)行中間結(jié)果acc。創(chuàng)建:從PCB集合種索取一個空白PCB,并取得該P(yáng)CB內(nèi)部標(biāo)識符i;然后,把調(diào)用者提供參數(shù),以及從執(zhí)行過程EP中取得調(diào)用者內(nèi)部標(biāo)識j,填入該P(yáng)CB,設(shè)置記帳數(shù)據(jù),置新進(jìn)程為“靜止就緒”狀態(tài);最終,把此PCB分別插入就緒隊(duì)列RQ和進(jìn)程家族中。

ProcedureCreate(n,S0,k0,M0,R0,acc)begini:=getInternalName(n);//取得內(nèi)部名i.id:=n;

//填外部名i.Priority:=k0;

//填優(yōu)先表i.cpustate:=S0;

//填cpu初始狀態(tài)i.mainstore:=M0;

//填寫主存區(qū)域i.resource:=R0;

//填寫資源清單i.status:='Readys';

//填寫進(jìn)程狀態(tài)j:=EP;

//獲取調(diào)用者內(nèi)部標(biāo)識i.Parent:=j;

//填入i進(jìn)程父進(jìn)程j

geny:=null;

//i家庭指針為空geny:=i;

//把i填入其父進(jìn)程pcb中家庭指針處i.state:=RQ;

//i所在狀態(tài)隊(duì)列首指針I(yè)nsert(RQ,i);

//把i進(jìn)程插入RQ隊(duì)尾continue;end

終止:Procedure

destroy(n)BeginSched:=false;i:=getinternalname(n);//獲取n進(jìn)程內(nèi)部名kill(i);ifschedthenschedulerelsecontinue;//假如Schde為真,則轉(zhuǎn)調(diào)度程序,不然繼續(xù)endprocedurekill(i)beginifi.stata(i)=”executing”thenbeginstop(i);sched:=true

end;remove(i.stata,i);

//將被撤消進(jìn)程從i.state所指示隊(duì)列中除去forallS∈genydokill(s);forallr∈(i.mainstore∪i.resources)doifowned(r)theninsert(r.semaphore,r.date);//屬于父進(jìn)程資源償還且插入父進(jìn)程資源清單forall∈createdresources(i)doremovedescriptor(R);//撤消自己資源清單償還系統(tǒng)removeprocesscontrolblock(i);end阻塞:

Procedure

block

//阻塞執(zhí)行進(jìn)程中某個進(jìn)程EP進(jìn)程號iBegini:=EP;

//從執(zhí)行進(jìn)程EP取得調(diào)用者內(nèi)部標(biāo)識符Stop(i);i.status:=”blockda”;i.stata=WQ(r);//填寫阻塞隊(duì)列指針insert(WQ(r),i);//把i插入WQ隊(duì)尾scheduler

//轉(zhuǎn)調(diào)度程序}

喚醒:Procedurewakeup(n)Begini:=getinternalname(n);remove(WQ(r),i);

//把i進(jìn)程從等候r而受阻塞隊(duì)列中摘除i.status:=”ready”;//置i進(jìn)程為“就緒”狀態(tài)i.sdata:=RQ;

//把i進(jìn)程插入到就緒隊(duì)列insert(RQ,i);continueend掛起:Proceduresuspend(n,a)Begini:=getinternalname(n);s:=i.status;ifs=”executing”thenstop(i);a:=copyPCB(i);i.status:=ifs=”blockeda”then“blockeds”elsereadys;ifs=”executing”thenschedulerelsecontinue;end

激活:Procedure

active(n)Begini:=getinternalname(n)i.status:=ifi.status=”readys”then“readya”elseblockeda;ifi.status=”readys”thenscheduler;//當(dāng)激活后進(jìn)程處于“readys”狀態(tài)針,將引發(fā)重新調(diào)度elsecontinueend

2.1什么是臨界區(qū)?引入臨界區(qū)目標(biāo)是什么?答:臨界區(qū):每個進(jìn)程中訪問臨界資源那段代碼稱為臨界區(qū)。目標(biāo):假如共享該臨界資源每個進(jìn)程能互斥進(jìn)入自己臨界區(qū),就能確保對臨界資源互斥訪問。2.2統(tǒng)計型信號量物理意義。答:統(tǒng)計型信號量初值表示系統(tǒng)中某類資源數(shù)目,因而又被稱為資源信號量。當(dāng)值為正(n)時,表示當(dāng)前n個臨界資源可用,或者最多還可允許n進(jìn)程進(jìn)入該資源對應(yīng)臨界區(qū);當(dāng)值為0時表示臨界資源已經(jīng)全部被占用;當(dāng)值為負(fù)(-n)時其絕對值表示等候使用該資源進(jìn)程數(shù)。2.3信號量(整型和統(tǒng)計型)不用原語能否實(shí)現(xiàn)進(jìn)程互斥?各舉一反例說明。答:整型:不能。S=1process1:begin單獨(dú)執(zhí)行每個程序都是正確,因?yàn)槊總€程序都能實(shí)現(xiàn)一個進(jìn)程進(jìn)入臨界區(qū)。不過,當(dāng)程序并發(fā)執(zhí)行時候P1:whiles<=0dono_ops=1單獨(dú)執(zhí)行每個程序都是正確,因?yàn)槊總€程序都能實(shí)現(xiàn)一個進(jìn)程進(jìn)入臨界區(qū)。不過,當(dāng)程序并發(fā)執(zhí)行時候P1:whiles<=0dono_ops=1沒進(jìn)入循環(huán)P2:whiles<=0dono_ops=1沒進(jìn)入循環(huán)P1:s=s-1s=0進(jìn)入臨界區(qū)P2:s=s-1s=-1進(jìn)入臨界區(qū)兩個進(jìn)程可能同時進(jìn)入臨界區(qū)whiles<=0dono_op s=s-1N=N-1;//訪問臨界資源s=s+1untilfalse;endprocess2:beginrepeatwhiles<=0dono_op s=s-1N=N+1;s=s+1untilfalse;endP1:s=1-1=0P2P1:s=1-1=0P2:s=0-1=-1P1:blockP2:block死鎖,兩個進(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

提交評論