版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)指導(dǎo)書班級:0904202姓名:國東野學(xué)號:0904202序言計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)專業(yè)及其相關(guān)專業(yè)的核心專業(yè)課程,是計(jì)算機(jī)科學(xué)及其相關(guān)技術(shù)的重要部分,學(xué)好操作系統(tǒng)的原理并會應(yīng)用其中學(xué)習(xí)的原理與方法可以是學(xué)習(xí)者大大提高各類軟件設(shè)計(jì)的質(zhì)量與水平,也可以懂得如何提高系統(tǒng)效率一起資源的利用率。為了培養(yǎng)學(xué)生的時(shí)間動(dòng)手能力,幫助學(xué)習(xí)很體會與驗(yàn)證學(xué)習(xí)的知識,特設(shè)計(jì)此實(shí)驗(yàn)體系。實(shí)驗(yàn)共計(jì)需要30與學(xué)時(shí),課程規(guī)模限制,集中安排16學(xué)時(shí),其余需求學(xué)生可以課下完成,或者在教師的指導(dǎo)下有選擇地完成實(shí)驗(yàn)。實(shí)驗(yàn)報(bào)告要求:提供各個(gè)實(shí)驗(yàn)程序的流程圖,并填入實(shí)驗(yàn)報(bào)告中;實(shí)驗(yàn)報(bào)告附上運(yùn)行結(jié)果圖的截圖;對實(shí)驗(yàn)的結(jié)果進(jìn)行分析,寫出自己的分析結(jié)果;實(shí)驗(yàn)的源代碼需要打包交到班級刻盤保存;個(gè)人文件的命名以個(gè)人的姓名+學(xué)號命名;班級的以班級編號命名。需要程序可視性要好,要有試驗(yàn)程序證明作品的正確性。所有的實(shí)驗(yàn)報(bào)告采用A4打印,字體字號采用模版規(guī)定。源程序要加注釋,要有測試數(shù)據(jù)及結(jié)果。每個(gè)實(shí)驗(yàn)的報(bào)告要另起一頁。實(shí)驗(yàn)一進(jìn)程同步和互斥一、 實(shí)驗(yàn)?zāi)康恼莆张R界資源、臨界區(qū)概念及并發(fā)進(jìn)程互斥、同步訪問原理。學(xué)會使用高級語言進(jìn)行多線程編程的方法。掌握利用VC++或Java語言線程庫實(shí)現(xiàn)線程的互斥、條件競爭,并編碼實(shí)現(xiàn)P、V操作,利用P、V操作實(shí)現(xiàn)兩個(gè)并發(fā)線程對有界臨界區(qū)的同步訪問。通過該實(shí)驗(yàn),學(xué)生可在源代碼級完成進(jìn)程同步互斥方案的分析、功能設(shè)計(jì)、編程實(shí)現(xiàn),控制進(jìn)程間的同步、互斥關(guān)系。二、 實(shí)驗(yàn)要求知識基礎(chǔ):學(xué)生應(yīng)在完成進(jìn)程和線程及調(diào)度等章節(jié)的學(xué)習(xí)后進(jìn)行。開發(fā)環(huán)境與工具:硬件平臺一一個(gè)人計(jì)算機(jī)。軟件平臺-Windows操作系統(tǒng),vc++語言或Java語言開發(fā)環(huán)境。運(yùn)用高級語言VC++或Java語言線程庫及多線程編程技術(shù)進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)臨界資源、臨界區(qū)、進(jìn)程或線程的定義與創(chuàng)建。利用兩個(gè)并發(fā)運(yùn)行的進(jìn)程,實(shí)現(xiàn)互斥算法和有界緩沖區(qū)同步算法。四、 實(shí)驗(yàn)方案指導(dǎo)該實(shí)驗(yàn)方案由以下幾個(gè)關(guān)鍵設(shè)計(jì)項(xiàng)目組成:并發(fā)訪問出錯(cuò)即設(shè)計(jì)一個(gè)共享資源,創(chuàng)建兩個(gè)并發(fā)線程,二者并發(fā)訪問該共享資源。當(dāng)沒有采用同步算法設(shè)計(jì)時(shí),線程所要完成的某些操作會丟失?;コ怄i并發(fā)線程使用線程庫提供的互斥鎖,對共享資源進(jìn)行訪問。3.軟件方法設(shè)計(jì)并編程實(shí)現(xiàn)計(jì)數(shù)信號量、P操作函數(shù)、V操作函數(shù),并發(fā)線程通過調(diào)用P,V操作函數(shù)實(shí)現(xiàn)線程的互斥。同步訪問多緩沖區(qū)利用上面的軟件方法完成P,V操作可實(shí)現(xiàn)兩個(gè)線程對多緩沖區(qū)的同步訪問。五、 實(shí)驗(yàn)方案實(shí)現(xiàn)范例以下是對該項(xiàng)目中包含的部分設(shè)計(jì)功能的實(shí)現(xiàn)方法、實(shí)現(xiàn)過程、技術(shù)手段的描述,供參考。模擬線程并發(fā)運(yùn)行。假設(shè)我們使用POSIX線程庫,而POSIX并沒有真正提供線程間的并發(fā)運(yùn)行需求。我們設(shè)計(jì)的系統(tǒng)應(yīng)支持符合RR調(diào)度策略的并發(fā)線程,每個(gè)線程運(yùn)行一段時(shí)間后自動(dòng)掛起,另一個(gè)線程開始運(yùn)行。這樣一個(gè)進(jìn)程內(nèi)所有線程以不確定的速度并發(fā)執(zhí)行。模擬一個(gè)競爭條件——全局變量。創(chuàng)建兩個(gè)線程tl和t2,父線程主函數(shù)main()定義兩個(gè)全局變量accntl和accnt2,每個(gè)變量表示一個(gè)銀行賬戶,初始化為0。每個(gè)線程模擬一個(gè)銀行事務(wù):將一定數(shù)額的資金從一個(gè)賬戶轉(zhuǎn)到另一個(gè)賬戶。每個(gè)線程讀入一個(gè)隨機(jī)值,代表資金數(shù)額,在一個(gè)賬戶上做減法,在另一個(gè)賬戶上做加法,用兩個(gè)變量記錄兩個(gè)賬戶的收支情況。良性情況下收支應(yīng)平衡,即兩個(gè)全局變量之和應(yīng)為0。下面是每個(gè)線程的代碼:counter=0;do{tmp1=accnt1;tmp2=accnt2;r=random();accnt1=tmp1+r;accnt2=tmp2-r;counter++;}while(accnt1+accnt2==0);printf(”%d”,counter);===============================兩個(gè)線程運(yùn)行的代碼相同,只要各自代碼不被交叉執(zhí)行,兩個(gè)收支余額之和就應(yīng)一直為0,如果線程被交叉執(zhí)行,某個(gè)線程可能會讀入一個(gè)舊的accntl值和一個(gè)新的accnt2值,或者相反,這樣會導(dǎo)致某個(gè)值的丟失。當(dāng)這種情況出現(xiàn)時(shí),線程停止運(yùn)行,并把出現(xiàn)情況的位置Counter的值)打印出來。模擬一個(gè)競爭條件——共享文件。主線程創(chuàng)建兩個(gè)共享文件fl和f2,每個(gè)文件包含一個(gè)當(dāng)前銀行賬戶。線程使用隨機(jī)數(shù)對文件進(jìn)行讀/寫,方式同上。注意:文件在讀/寫過程中不要加互斥訪問鎖,避免出現(xiàn)不會出現(xiàn)交叉訪問的情況。測試出現(xiàn)一個(gè)競爭條件的時(shí)間。我們的編程環(huán)境中,一般無法支持線程的RR調(diào)度,必須編程實(shí)現(xiàn)兩個(gè)線程間在兩個(gè)賦值語句之間插入以下代碼:在指定區(qū)間(比如0到1)生成一個(gè)隨機(jī)數(shù),小于一個(gè)極限值(如0.1),調(diào)用線程自動(dòng)掛起函數(shù)jield(),自動(dòng)放棄CPU,另一運(yùn)行,于是導(dǎo)致一個(gè)數(shù)據(jù)更新的丟失。互斥鎖。POSIX線程庫提供一個(gè)二值信號量,稱為MUTEX,它可以加鎖或解鎖。如果已被另一個(gè)線程加上鎖的MUTEX加鎖,就會引發(fā)該線程被阻塞,MUTEX解鎖時(shí)喚醒它。使用這些原語,很容易實(shí)現(xiàn)互斥進(jìn)入CS(臨界區(qū))。進(jìn)入CS區(qū)時(shí)加鎖,離開CS區(qū)時(shí)解鎖。系統(tǒng)負(fù)責(zé)阻塞或喚醒線程。用軟件方法實(shí)現(xiàn)互斥訪問臨界區(qū)。用標(biāo)準(zhǔn)編程語言設(shè)置變量的值,用線程“忙等待”實(shí)現(xiàn)互斥訪問CS。設(shè)計(jì)兩線程部分代碼如下:intcl=0,c2=0,will_wait;p1: while(l){cl=l;will_wait=l;while(c2&&(will_wait==1)); /*忙等待*/csl;cl=0;programl;}p2: while(l){c2=1;will_wait=2;while(cl&&(will_wait==2);/*忙等待*/cs2;c2=0;program2;}===============================該軟件方法使用三個(gè)變量cl,c2,will_wait,解決兩個(gè)線程的同步問題。兩個(gè)線程分別將c1和c2設(shè)置為1,表示自己試圖進(jìn)入臨界區(qū),并將will_wait分別設(shè)置為1和2,以消除任何競爭條件。通過“忙等待”循環(huán)實(shí)現(xiàn)線程的阻塞。當(dāng)線程退出CS區(qū)時(shí),分別將變量c1和c2設(shè)置為0。我們可以比較互斥鎖和軟件方法這兩種解決方法的效率。可以通過重復(fù)相同的循環(huán)次數(shù),測量各自的執(zhí)行時(shí)間,盡量減少可能的外部干擾,重復(fù)測試幾次,并計(jì)算平均值。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)二進(jìn)程及其資源管理一、 實(shí)驗(yàn)?zāi)康睦斫赓Y源共享與互斥特性以及操作系統(tǒng)管理資源的基本方法。學(xué)會使用高級語言進(jìn)行多線程編程的方法。掌握利用VC++或Java線程庫實(shí)現(xiàn)一個(gè)管理器,用來實(shí)現(xiàn)操作系統(tǒng)對進(jìn)程及其資源的管理功能。通過該實(shí)驗(yàn),學(xué)生可在源代碼級完成進(jìn)程及其資源管理方案的分析、功能設(shè)計(jì)、編程實(shí)現(xiàn),控制進(jìn)程間的同步、互斥關(guān)系。二、 實(shí)驗(yàn)要求知識基礎(chǔ):學(xué)生應(yīng)在完成對進(jìn)程和線程、調(diào)度、死鎖等章節(jié)的學(xué)習(xí)后進(jìn)行。開發(fā)環(huán)境與工具:硬件平臺——個(gè)人計(jì)算機(jī)。軟件平臺——Windows操作系統(tǒng),根據(jù)需要,任選安裝VC++語言、java語言或C語言開發(fā)環(huán)境。三、 實(shí)驗(yàn)內(nèi)容開發(fā)一個(gè)函數(shù),建立進(jìn)程控制塊和資源控制塊結(jié)構(gòu),并實(shí)現(xiàn)相關(guān)數(shù)據(jù)結(jié)構(gòu)的初始化。開發(fā)一系列操作,由進(jìn)程調(diào)用這些操作,達(dá)到控制進(jìn)程申請或釋放各種資源的目的。四、 實(shí)驗(yàn)方案指導(dǎo)該實(shí)驗(yàn)方案由以下幾個(gè)關(guān)鍵設(shè)計(jì)項(xiàng)目組成:進(jìn)程數(shù)據(jù)結(jié)構(gòu)表示。資源數(shù)據(jù)結(jié)構(gòu)表示。進(jìn)程對資源的操作。調(diào)度程序。用戶功能shell界面。五、 實(shí)驗(yàn)方案實(shí)現(xiàn)范例以下是對該項(xiàng)目中包含的設(shè)計(jì)功能的實(shí)現(xiàn)方法、實(shí)現(xiàn)過程、技術(shù)手段的描述,供參考。進(jìn)程數(shù)據(jù)結(jié)構(gòu)表示。使用結(jié)構(gòu)類型設(shè)計(jì)實(shí)現(xiàn)進(jìn)程PCB表,它包含以下成員:進(jìn)程ID——進(jìn)程的唯一標(biāo)識,供其他進(jìn)程引用該進(jìn)程;
內(nèi)存——是一個(gè)指針鏈表,它在創(chuàng)建進(jìn)程時(shí)已申請完畢,可用鏈表實(shí)現(xiàn);其他資源——指除去內(nèi)存之外的所有資源;進(jìn)程狀態(tài)——包括兩個(gè)數(shù)據(jù)類型,一個(gè)是狀態(tài)碼,另一個(gè)是狀態(tài)隊(duì)列鏈表指針;生成樹——包括兩個(gè)數(shù)據(jù)類型,本進(jìn)程的父進(jìn)程和本進(jìn)程的子進(jìn)程;優(yōu)先級——供進(jìn)程調(diào)度程序使用,用來確定下一個(gè)運(yùn)行進(jìn)程,可以設(shè)定為靜態(tài)整數(shù)。資源數(shù)據(jù)結(jié)構(gòu)。每個(gè)資源都用一個(gè)稱為資源控制塊的數(shù)據(jù)結(jié)構(gòu)表示。使用結(jié)構(gòu)類型設(shè)計(jì)實(shí)現(xiàn)資源控制塊RCB。資源控制塊包括以下字段成員:RID-資源的唯一標(biāo)識,由進(jìn)程引用;資源狀態(tài)一一空閑/已分配;等待隊(duì)列——是被本資源阻塞的進(jìn)程鏈表,本資源正被其他所有資源都設(shè)定為靜態(tài)數(shù)據(jù),系統(tǒng)啟動(dòng)時(shí)初始化。進(jìn)程管理及進(jìn)程對資源的操作。進(jìn)程操作及進(jìn)程狀態(tài)轉(zhuǎn)換歸納如下:進(jìn)程創(chuàng)建——(無)一就緒;申請資源一一運(yùn)行…阻塞;資源釋放一一阻塞…就緒;刪除進(jìn)程一一(任何狀態(tài))一(無);調(diào)度程序 就緒^運(yùn)行或運(yùn)行f就緒。具體實(shí)現(xiàn)步驟如下:根據(jù)上述數(shù)據(jù)結(jié)構(gòu),用高級語言設(shè)計(jì)相應(yīng)函數(shù),分別實(shí)現(xiàn)創(chuàng)建進(jìn)程、刪除進(jìn)程、掛起進(jìn)程、喚醒進(jìn)程等功能。設(shè)計(jì)一個(gè)函數(shù),實(shí)現(xiàn)調(diào)度程序,在每個(gè)進(jìn)程操作執(zhí)行完畢后,自動(dòng)調(diào)用執(zhí)行。實(shí)現(xiàn)兩個(gè)資源操作:申請資源和釋放資源。相關(guān)參考算法如下:request(RID) /*申請資源算法*/{r=get_RCB(RID); /*獲取資源控制塊首地址*/if(r->status==,free,)( /*資源可用*/r->status='allocated'; /*分配給調(diào)用進(jìn)程,*/insert(self->other_resources,r);}/*插入一個(gè)RCB指針指向進(jìn)程資源鏈表;*/else{表;*/else{self->status.type='blocked';self->status.list=r;. remove(RL,self);insert(r->waiting_list,self);}scheduler();程*/release(RID)/*資源不可用*//*記錄阻塞*//*指向所請求資源的RCB*//*將進(jìn)程從就緒隊(duì)列中刪除*//*插入資源等待隊(duì)列*//*調(diào)度程序運(yùn)行選擇下一個(gè)運(yùn)行進(jìn)/*釋放資源算法*/{r=get_RCB(RID); /*獲取資源控制塊首地址*/remove(self->other_resource,r); /*從進(jìn)程資源鏈表中刪除該資源*/if(waiting_list==NULL)r->status=,free,;/*等待隊(duì)列為空,置資源狀態(tài)為空閑*/else{remove(r->waiting_list,q);q->status.type='ready';q->status.list=RL;else{remove(r->waiting_list,q);q->status.type='ready';q->status.list=RL;insert(RL,q);}scheduler();/*從等待隊(duì)列中移出一個(gè)進(jìn)程q*//*將進(jìn)程q的狀態(tài)設(shè)為就緒*//*進(jìn)程q的狀態(tài)指針指向就緒隊(duì)列*//*進(jìn)程q插入就緒隊(duì)列*//*調(diào)度程序運(yùn)行選擇下一個(gè)運(yùn)行進(jìn)程*/調(diào)度程序。調(diào)度策略采用固定優(yōu)先級和可剝奪優(yōu)先級調(diào)度算法。即調(diào)度程序必須維護(hù)n個(gè)不同優(yōu)先級的就緒隊(duì)列,各就緒隊(duì)列可為空,也可包含多個(gè)進(jìn)程。0級進(jìn)程優(yōu)先級最低,n-l級進(jìn)程優(yōu)先級最高。創(chuàng)建進(jìn)程時(shí)就賦予了固定的優(yōu)先級,并在進(jìn)程的生存期內(nèi)保持不變。當(dāng)新進(jìn)程創(chuàng)建或阻塞進(jìn)程被喚醒時(shí),它就被插入同級的就緒隊(duì)列中。調(diào)度程序按“先來先服務(wù)”和優(yōu)先級“從高到低”的方式處理就緒隊(duì)列。即從最高優(yōu)先級的非空就緒隊(duì)列的隊(duì)首選擇一個(gè)進(jìn)程進(jìn)入運(yùn)行態(tài)。這樣的調(diào)度策略很容易導(dǎo)致"饑餓",進(jìn)程出現(xiàn)。因?yàn)閷M(jìn)程q來說,只有當(dāng)優(yōu)先級高于自己的所有進(jìn)程都運(yùn)行完畢,或都進(jìn)入阻塞狀態(tài)時(shí),它才能得到運(yùn)行權(quán)。為了簡化調(diào)度程序,我們假定系統(tǒng)中至少有一個(gè)進(jìn)程處于就緒態(tài)。為確保這一點(diǎn),設(shè)計(jì)一個(gè)特殊進(jìn)程init,該進(jìn)程在系統(tǒng)初始化時(shí)自動(dòng)創(chuàng)建,并賦予最低優(yōu)先級0級。init進(jìn)程有兩個(gè)作用:充當(dāng)閑逛進(jìn)程,該進(jìn)程運(yùn)行時(shí)不申請任何資源,以免被阻塞;作為第一個(gè)被創(chuàng)建的進(jìn)程,它沒有父進(jìn)程,可創(chuàng)建比自己優(yōu)先級高的其他進(jìn)程。所以init進(jìn)程是進(jìn)程生成樹的根進(jìn)程。采用優(yōu)先級策略的調(diào)度程序的常見結(jié)構(gòu)知下所示:scheduler(){找出最高優(yōu)先級進(jìn)程p;If(self->priority<p->priority)||self->status.type!='running'||self=nil)preempt(p,self);/*調(diào)度進(jìn)程p,替換當(dāng)前進(jìn)程self*/每當(dāng)任一進(jìn)程的操作執(zhí)行完畢,必須執(zhí)行進(jìn)程調(diào)度程序,它是當(dāng)前運(yùn)行進(jìn)程的一部分。進(jìn)程調(diào)用該函數(shù),后者決定該進(jìn)程是繼續(xù)執(zhí)行還是被其他進(jìn)程剝奪運(yùn)行權(quán)。作出判斷的依據(jù)是:是否存在高優(yōu)先級進(jìn)程p,如果存在,p將剝奪self的運(yùn)行權(quán)。當(dāng)前進(jìn)程的運(yùn)行權(quán)被剝奪的情況有以下兩種:當(dāng)前進(jìn)程剛剛完成release(操作,由此被喚醒進(jìn)程的優(yōu)先級可能高于當(dāng)前進(jìn)程。當(dāng)前進(jìn)程剛剛完成create()操作,新創(chuàng)建進(jìn)程的優(yōu)先級可能高于當(dāng)前進(jìn)程。在以下兩種情況下,新挑選的進(jìn)程必須剝奪當(dāng)前進(jìn)程的運(yùn)行權(quán):①當(dāng)前進(jìn)程剛剛完成reques()操作,并且申請的資源timeout則當(dāng)前進(jìn)程的狀態(tài)就改為“阻塞”;或者由于分時(shí)運(yùn)行進(jìn)程的需要,調(diào)度程序被一個(gè)timeout操作調(diào)用運(yùn)行。在timeout操作中當(dāng)前進(jìn)程的狀態(tài)改為“就緒”。在上述情況中,當(dāng)前進(jìn)程的狀態(tài)都不是“運(yùn)行”。所以當(dāng)前進(jìn)程必須停止運(yùn)行,此時(shí)就緒隊(duì)列中最高優(yōu)先級的進(jìn)程p得到執(zhí)行。②當(dāng)進(jìn)程剛剛完成destroy操作,進(jìn)程自己刪除自身,它的PCB表不再存在。此時(shí)調(diào)度程序被執(zhí)行,從就緒隊(duì)列中選出最高優(yōu)先級的進(jìn)程p,并令其執(zhí)行。剝奪操作包括以下工作:將選中的最高優(yōu)先級進(jìn)程p的狀態(tài)改為“運(yùn)行"。如果當(dāng)前進(jìn)程依然存在且沒有阻塞,則將其狀態(tài)改為“就緒”,以便隨后能得到執(zhí)行。最后,進(jìn)行上下文切換,保留當(dāng)前CPU的各個(gè)寄存器值,放入PCB表。裝入中選進(jìn)程p的寄存器值。本實(shí)現(xiàn)方案沒有對實(shí)際的CPU進(jìn)行訪問來保存或恢復(fù)寄存器的值,因此上下文切換的任務(wù)只是將正在運(yùn)行進(jìn)程的名字顯示在終端屏幕上。從這一點(diǎn)可以認(rèn)為,用戶終端屏幕開始扮演當(dāng)前運(yùn)行進(jìn)程功能的角色。5.用戶shell界面。為RCB試和演示管理器的CPU能,本方案設(shè)計(jì)開發(fā)一個(gè)shell界面,它可以重復(fù)接受終端輸入的命令,喚醒管理器執(zhí)行相應(yīng)的功能,并在屏幕上顯示結(jié)果。使用上述系統(tǒng),終端就能展示當(dāng)前進(jìn)程。只要輸入一個(gè)命令,就中斷當(dāng)前進(jìn)程序的執(zhí)行,shell界面調(diào)用進(jìn)程資源管理器中的函數(shù)F,并傳遞終端輸入的參數(shù)。該函數(shù)執(zhí)行后將改變PCB、RCB及其他數(shù)據(jù)結(jié)構(gòu)中的信息。當(dāng)調(diào)度程序執(zhí)行時(shí),決定下一個(gè)要運(yùn)行的進(jìn)程,并改變其狀態(tài)值。保存當(dāng)前進(jìn)程的CPU各寄存器值(虛擬CPU),然后恢復(fù)中選進(jìn)程的值。調(diào)度程序?qū)⑾到y(tǒng)狀態(tài)信息顯示在屏幕上,提示下一步操作。特別地,它始終提示正在運(yùn)行的進(jìn)程是什么,即終端和鍵盤正在為哪個(gè)進(jìn)程服務(wù)。另外,函數(shù)F也可能返回一個(gè)錯(cuò)誤碼,shell也將它顯示在屏幕上。shell命令的語法格式規(guī)定如下:命令名參數(shù)例如,執(zhí)行命令行“crA1”時(shí)將調(diào)用對應(yīng)的管理器函數(shù)create(A,1),即創(chuàng)建一個(gè)名為A、優(yōu)先級為1的進(jìn)程。同理,命令“rqR”將調(diào)用函數(shù)request(R)執(zhí)行。以下顯示說明shell界面的交互內(nèi)容(假定進(jìn)程A的優(yōu)先級為1,并且正在運(yùn)行)。由“"開始的行視為shell的輸崮結(jié)果。提示符“>”后面是提示用戶輸入的命令。processAisrunningcrB2processBisrunningcrC1processBisrunningreqR1processBisblocked;processAisrunning進(jìn)程及資源管理器的升級版??蓪ι鲜龌拘瓦M(jìn)程功能資源管理器進(jìn)行功能擴(kuò)展,使管理器能夠處理時(shí)鐘到時(shí)中斷和I/O處理完成中斷。(1)相對時(shí)鐘到時(shí)中斷。假設(shè)系統(tǒng)提供一個(gè)硬件時(shí)鐘。周期性產(chǎn)生一個(gè)時(shí)鐘到時(shí)中斷。引發(fā)調(diào)用函數(shù)timeout()的執(zhí)行。110處理完成中斷。使用名為IO的資源表示所有的I/O設(shè)備。該資源的RCB由以下兩部分組成:IOWaiting_list擴(kuò)展shell。顯示當(dāng)前運(yùn)行進(jìn)程,并添加一個(gè)系統(tǒng)調(diào)用request_100。終端也能表示硬件,用戶能夠模擬兩種類型的中斷:時(shí)鐘到時(shí)、I/O完成處理。為了實(shí)現(xiàn)以上功能,必須添加新的shell命令,調(diào)用以下三個(gè)系統(tǒng)調(diào)用:request_IO(),IO_competion,timeout。。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)三存儲管理一、 實(shí)驗(yàn)?zāi)康恼莆諆?nèi)存管理的基本功能和分區(qū)法內(nèi)存分配的基本原理。學(xué)會Linux(或者windows)操作系統(tǒng)下使用c語言函數(shù)和系統(tǒng)調(diào)用進(jìn)行編程的方法。利用c語言設(shè)計(jì)實(shí)現(xiàn)分區(qū)法內(nèi)存分配算法。驗(yàn)證無虛存的存儲管理機(jī)制。二、 實(shí)驗(yàn)要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程、調(diào)度、存儲管理。安裝Linux操作系統(tǒng)(無條件時(shí)可以用其他操作系統(tǒng)平臺),使用c語言編程,調(diào)用相關(guān)系統(tǒng)調(diào)用進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容創(chuàng)建空閑存儲管理表和模擬內(nèi)存。設(shè)計(jì)并實(shí)現(xiàn)一個(gè)內(nèi)存分配程序,分配策略可以分別采用最先適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法等,并評價(jià)不同分配算法的優(yōu)劣。提供一個(gè)用戶界面,利用它用戶可輸入不同的分配策略。進(jìn)程向內(nèi)存管理程序發(fā)出申請、釋放指定數(shù)量的內(nèi)存請求,內(nèi)存管理程序調(diào)用對應(yīng)函數(shù),響應(yīng)請求。四、 實(shí)驗(yàn)方案指導(dǎo)該實(shí)驗(yàn)方案由以下幾個(gè)關(guān)鍵設(shè)計(jì)項(xiàng)目組成。設(shè)計(jì)實(shí)現(xiàn)一個(gè)空閑分區(qū)表。設(shè)計(jì)實(shí)現(xiàn)模擬內(nèi)存。 考慮實(shí)現(xiàn)的便利,本方案不訪問真正的內(nèi)存。定義一個(gè)字符數(shù)組charmm[mem_size]或使用Linux系統(tǒng)調(diào)用mm=malloc(mem_size),用來模擬內(nèi)存。利用指針對模擬內(nèi)存進(jìn)行訪問。設(shè)計(jì)一組管理物理內(nèi)存空間的函數(shù)。用戶接口由以下三個(gè)函數(shù)組成:void*mm_request(intn)申請n個(gè)字節(jié)的內(nèi)存空間。如申請成功,則返回所分配空間的首地址;如不能滿足申請,則返回空值。voidmm_release(void*p)釋放先前申請的內(nèi)存。如果釋放的內(nèi)存與空閑區(qū)相鄰,則合并為一個(gè)大空閑區(qū);如果與空閑區(qū)不相鄰,則成為一個(gè)單獨(dú)的空閑區(qū)。void*mm_init(intmem_size)內(nèi)存初始化。返回mm指針指向的空閑區(qū)。設(shè)計(jì)實(shí)現(xiàn)不同策略的內(nèi)存分配程序。對于采用不同分配策略的內(nèi)存管理程序,從以下兩個(gè)方面進(jìn)行調(diào)度程序性能的比對:內(nèi)存利用率以及找到一個(gè)合適的分配空間所需查找的步驟。設(shè)置一個(gè)模擬實(shí)驗(yàn)。分別構(gòu)建一個(gè)隨機(jī)生成的請求與釋放隊(duì)列。釋放隊(duì)列中的操作總是得到滿足,隊(duì)列總為空;請求隊(duì)列的操作能否被滿足,取決于空閑區(qū)
能否滿足申請的空間大小。若不能滿足,則該操作在隊(duì)列中等待相應(yīng)釋放操作喚醒。請求隊(duì)列采用FIFO管理,以避免饑餓現(xiàn)象的發(fā)生。內(nèi)存管理程序應(yīng)對內(nèi)存初始化,隨機(jī)設(shè)定內(nèi)存空間的占有、空閑情況,隨機(jī)設(shè)定申請和釋放的操作隊(duì)列。調(diào)用釋放操作開始運(yùn)行,調(diào)用申請操作,如能滿足,則分配空間,否則等待釋放操作喚醒。下面給出一個(gè)模擬內(nèi)存管理的程序框架(偽碼形式)。可對性能數(shù)據(jù)指標(biāo)進(jìn)行 統(tǒng) 計(jì)。for(i=0;i<sim_step;i++){do{*/for(i=0;i<sim_step;i++){do{*/getsizenofnextrequest;mm_request(n);}while(requestsuccessful);recordmemoryutilization;selectblockptoberelease;release(p);}/*設(shè)定模擬程序執(zhí)行次數(shù)*//*循環(huán)調(diào)用請求操作,直到請求不成功/*設(shè)定請求空間大小*//*調(diào)用請求操作*//*請求成功,循環(huán)繼續(xù)*//*統(tǒng)計(jì)內(nèi)存使用率*//*釋放某空間p*//*調(diào)用釋放操作*/以上程序由主循環(huán)控制固定次數(shù)的模擬步驟。每次循環(huán),程序完成如下處理步驟:內(nèi)循環(huán)盡可能多地滿足內(nèi)存請求,請求內(nèi)存大小值隨機(jī)生成。一旦請求失敗,掛起內(nèi)存管理程序,直至釋放操作被執(zhí)行。此時(shí)進(jìn)行系統(tǒng)內(nèi)存利用率的統(tǒng)計(jì)、計(jì)算,隨機(jī)挑選一個(gè)內(nèi)存分配空間完成釋放操作。本次主循環(huán)執(zhí)行完畢,開始下一次循環(huán)。需要在程序中完成以下設(shè)計(jì):確定請求分配空間大小,統(tǒng)計(jì)性能數(shù)據(jù),選擇一個(gè)內(nèi)存區(qū)釋放。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)四頁面置換算法一、 實(shí)驗(yàn)?zāi)康恼莆諆?nèi)存管理基本功能和請求分頁式管理的基本原理以及頁面置換算法。學(xué)會在Linux操作系統(tǒng)下使用C函數(shù)和系統(tǒng)調(diào)用的編程方法。掌握利用C語言設(shè)計(jì)實(shí)現(xiàn)不同置換策略的頁面置換算法。驗(yàn)證虛存存儲管理機(jī)制及其性能。對于生成的引用串,計(jì)算、比對不同頁面置換算法的缺頁率。二、 實(shí)驗(yàn)要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程、調(diào)度、存儲管理。安裝Linux操作系統(tǒng),使用C語言編程,利用相關(guān)系統(tǒng)調(diào)用實(shí)現(xiàn)設(shè)計(jì)。三、 實(shí)驗(yàn)內(nèi)容創(chuàng)建空閑存儲管理表、模擬內(nèi)存、頁表等。提供一個(gè)用戶界面,用戶利用它可輸入不同的頁面置換策略和其他附加參數(shù)。運(yùn)行置換程序,輸出缺頁率結(jié)果。四、 實(shí)驗(yàn)方案指導(dǎo)熟悉頁面置換算法及其實(shí)現(xiàn),了解計(jì)算機(jī)系統(tǒng)性能評價(jià)方法,編制頁面置換算法的模擬程序。方案設(shè)計(jì)重點(diǎn)提示如下。假定系統(tǒng)有固定數(shù)目的內(nèi)存塊F,物理塊號依次為0?F-l。進(jìn)程的大小為P頁,其邏輯頁號依次為0?P-l。隨機(jī)生成一個(gè)引用串RS,即從0?P-l組成的整數(shù)序列。定義一個(gè)整型數(shù)組intM[F]表示所有物理塊,如果M[i]=n,表示邏輯頁n存放在物理塊i中。生成引用串。用隨機(jī)數(shù)方法產(chǎn)生頁面走向,頁面走向長度為L。根據(jù)頁面走向,分別采用FIFO和LRU算法進(jìn)行頁面置換,設(shè)計(jì)一個(gè)函數(shù)自動(dòng)統(tǒng)計(jì)缺頁率。假定可用內(nèi)存塊和頁表長度(進(jìn)程的頁面數(shù))分別為m和k。初始時(shí),進(jìn)程的頁面都不在內(nèi)存。參考其他設(shè)計(jì)項(xiàng)目,將不同置換算法設(shè)計(jì)實(shí)現(xiàn)為函數(shù),能在界面上方便調(diào)用執(zhí)行。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)五進(jìn)程調(diào)度一、 實(shí)驗(yàn)?zāi)康恼莆者M(jìn)程調(diào)度程序的功能和調(diào)度程序采用的調(diào)度算法。學(xué)會在Linux操作系統(tǒng)下使用C函數(shù)和系統(tǒng)調(diào)用的編程方法。掌握利用C語言設(shè)計(jì)實(shí)現(xiàn)不同調(diào)度策略的進(jìn)程調(diào)度算法。驗(yàn)證不同進(jìn)程調(diào)度算法對性能的影響。二、 實(shí)驗(yàn)要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程、調(diào)度。安裝Linux操作系統(tǒng),使用C語言編程,利用相關(guān)系統(tǒng)調(diào)用完成設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容定義、初始化進(jìn)程數(shù)據(jù)結(jié)構(gòu)及其就緒隊(duì)列。提供一個(gè)用戶界面,用戶利用它可輸入不同的分配策略及相關(guān)參數(shù)。設(shè)計(jì)實(shí)現(xiàn)調(diào)度程序,調(diào)用下面的功能函數(shù)。設(shè)計(jì)函數(shù),實(shí)現(xiàn)計(jì)算平均周轉(zhuǎn)時(shí)間,實(shí)現(xiàn)不同調(diào)度算法。四、 實(shí)驗(yàn)方案指導(dǎo)關(guān)鍵設(shè)計(jì)內(nèi)容如下,供參考。用C語言的結(jié)構(gòu)類型及其鏈表,完成PCB表數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),并動(dòng)態(tài)生成一組進(jìn)程組成的就緒隊(duì)列鏈表。每個(gè)進(jìn)程都由PCB記錄運(yùn)行時(shí)間,優(yōu)先級、到達(dá)系統(tǒng)時(shí)間等數(shù)據(jù)。也可根據(jù)需要,自行添加不同調(diào)度算法需要的數(shù)據(jù)。設(shè)計(jì)實(shí)現(xiàn)不同調(diào)度算法的函數(shù),如先來先服務(wù)法、短作業(yè)優(yōu)先法、優(yōu)先級法等。設(shè)計(jì)一個(gè)函數(shù),計(jì)算出這組進(jìn)程的平均周轉(zhuǎn)時(shí)間。設(shè)計(jì)總控函數(shù),實(shí)現(xiàn)進(jìn)程調(diào)度程序。根據(jù)用戶界面的輸入,調(diào)用相應(yīng)的調(diào)度算法,實(shí)現(xiàn)進(jìn)程調(diào)度,計(jì)算調(diào)度性能指標(biāo)。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)六銀行家算法一、 實(shí)驗(yàn)?zāi)康睦斫馑梨i概念、銀行家算法及安全性檢測算法。學(xué)會在Linux操作系統(tǒng)下'使用C語言函數(shù)和指針進(jìn)行編程的方法。掌握利用C語言設(shè)計(jì)實(shí)現(xiàn)銀行家算法的基本過程。驗(yàn)證銀行家算法對于避免死鎖的作用。二、 實(shí)驗(yàn)要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程的調(diào)度。死鎖。安裝Linux操作系統(tǒng),使用C語言編程完成設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容定義并初始化進(jìn)程及其資源數(shù)據(jù)結(jié)構(gòu)。提供一個(gè)用戶界面,用戶利用它可動(dòng)態(tài)輸入進(jìn)程和資源種類等相關(guān)參數(shù)設(shè)計(jì)實(shí)現(xiàn)安全狀態(tài)檢測和銀行家死鎖避免算法的功能函數(shù)。四、 實(shí)驗(yàn)方案指導(dǎo)以如下幾組初始數(shù)據(jù)為例,設(shè)計(jì)相應(yīng)程序,判斷下列狀態(tài)是否安全。1.3個(gè)進(jìn)程共享12個(gè)同類資源狀態(tài)a下:allocation=(1,4,5),max=(4,4,8)。判斷系統(tǒng)是否安全。狀態(tài)b下:allocation=(1,4,6),max=(4,6,8)。判斷系統(tǒng)是否安全。5個(gè)進(jìn)程共享多類資源狀態(tài)c下:判斷系統(tǒng)是否安全?若安全,給出安全序列。若進(jìn)程2請求(0,4,2,0),可否立即分配?分配矩陣 最大需求矩陣可用資源矩陣00120012152010001750135423560632065200140656實(shí)現(xiàn)方案的主要作是如何輸入,如何初始數(shù)據(jù),如何調(diào)用對應(yīng)功能函數(shù),如何輸出結(jié)果。下面給出一個(gè)實(shí)現(xiàn)方案,供參考。開發(fā)一個(gè)交互程序,首先從文件中讀入系統(tǒng)描述信息,包括進(jìn)程的數(shù)目、資源的種類和數(shù)量、每個(gè)進(jìn)程的最大資源請求。程序自動(dòng)根據(jù)文件內(nèi)容創(chuàng)建一個(gè)當(dāng)前系統(tǒng)描述例如,每類資源的數(shù)目用…維數(shù)組R[m]描述,m為資源的種類。每個(gè)R[j]記錄資源Rj的數(shù)量。進(jìn)程的最大需求矩陣用P[n][m]表示,P[il[j]記錄進(jìn)程Pi對資源Rj的最人需求。分配矩陣和請求矩陣可使用二維數(shù)組表示。用戶輸入一個(gè)請求,格式類似:resquest(i,j,k),或release(i,j,k),在這里,i表示進(jìn)程Pi,j表示資源Rj,k是申請/釋放的數(shù)量。對每一個(gè)請求,系統(tǒng)回應(yīng)是滿足要求還是拒絕分配。設(shè)定一個(gè)申請和釋放序列,無任何檢測和避免死鎖的算法,分配會導(dǎo)致死
鎖。設(shè)定一個(gè)申請和釋放序列,按照安全性算法進(jìn)行設(shè)計(jì),回應(yīng)系統(tǒng)是否安全。然后實(shí)現(xiàn)銀行家算法,確保沒有死鎖的分配。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果成"C:\DOCUIENTSANDSETTINGS\B\桌面\11l\bank\Debug\ban二二二二二二二二二二二二二二二二二二二可統(tǒng)dpO希--3:2:4輸嘉_|_p■日J(rèn)V-;日J(rèn)V-;日MV...-1.&2.&3.&首源源源源源源二二二二二二二二二二二二二二二二現(xiàn)討3T隋撤入作業(yè)的數(shù)量=S請輸入各進(jìn)程的最大需求量《A3矩陣>CMax]:41000000000000000000系統(tǒng)目前可用的資源CAualiable]:dpo324進(jìn)程名01Maxdpo41Allocation
dpo
0
0
0
000
00進(jìn)程名01Maxdpo41Allocation
dpo
0
0
0
000
0000
00Needdpo41系統(tǒng)不安全二二二二二二二二二二二二二示嘟除改配加開123450結(jié)果分析實(shí)驗(yàn)七磁盤調(diào)度算法一、 實(shí)驗(yàn)?zāi)康睦斫馕募x/寫基本原理和磁盤調(diào)度算法的作用。學(xué)會在Linux操作系統(tǒng)下使用C語言函數(shù)和指針進(jìn)行編程的方法。利用C語言設(shè)計(jì)實(shí)現(xiàn)不同磁盤調(diào)度算法,如FIFO,SSTF,SCAN等算法。驗(yàn)證不同磁盤調(diào)度算法對性能的影響。二、 實(shí)驗(yàn)要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程、調(diào)度、存儲管理、I/O管理。安裝Linux操作系統(tǒng),使用C語言編程完成設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)函數(shù),其功能是動(dòng)態(tài)創(chuàng)建I/O請求隊(duì)列及其相關(guān)參數(shù),如磁道號等。提供一個(gè)用戶界面,用戶可輸入不同的分配策略以相關(guān)參數(shù)。設(shè)計(jì)相應(yīng)程序計(jì)算平均移臂距離。四、 實(shí)驗(yàn)方案指導(dǎo)實(shí)現(xiàn)本實(shí)驗(yàn)的關(guān)鍵內(nèi)容如下,供參考。實(shí)現(xiàn)電梯算法。實(shí)現(xiàn)FIFO,SSTF算法。寫一個(gè)驅(qū)動(dòng)程序,測試不同的算法。設(shè)置多次循環(huán),每次循環(huán)中,驅(qū)動(dòng)程序隨機(jī)調(diào)用函數(shù)request(n)和release()。如果執(zhí)行request(n),系統(tǒng)會將n轉(zhuǎn)換成1?T之間的一個(gè)隨機(jī)值,T是磁盤的磁道數(shù)。對每種算法,計(jì)算平均移臂距離。以下部分由學(xué)生填寫:程序流程圖實(shí)驗(yàn)結(jié)果結(jié)果分析實(shí)驗(yàn)八設(shè)備處理程序設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康睦斫庠O(shè)備處理程序的一般設(shè)計(jì)過程,加深對緩沖和中斷概念的理解。學(xué)會在Linux操作系統(tǒng)下使用C語言編程與有關(guān)進(jìn)程的系統(tǒng)調(diào)用方法。掌握利用C語言設(shè)計(jì)實(shí)現(xiàn)鍵盤緩沖區(qū)的讀/寫操作的方法。驗(yàn)證鍵盤緩沖區(qū)和中斷處理程序是否同步。二、 實(shí)驗(yàn)要求
學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進(jìn)程和線程、調(diào)度、存儲管理、I/O管理。安裝Linux操作系統(tǒng),使用C語言和相關(guān)系統(tǒng)調(diào)用,編程完成設(shè)計(jì)實(shí)現(xiàn)。三、 實(shí)驗(yàn)內(nèi)容主程序?qū)崿F(xiàn)鍵盤讀/寫、鍵盤中斷處理程序??尚薷木彌_區(qū)數(shù)目,運(yùn)行此程序。四、 實(shí)驗(yàn)方案指導(dǎo)將主程序看成消費(fèi)者進(jìn)程,將中斷程序看成生產(chǎn)者進(jìn)程,兩者通過什么方法取得同步?其數(shù)據(jù)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗煤廠員工安全協(xié)議書
- 2024年大數(shù)據(jù)分析與云計(jì)算服務(wù)合同
- 機(jī)器學(xué)習(xí)概論課程設(shè)計(jì)
- 軌道交通信號與控制基礎(chǔ)知識單選題100道及答案解析
- 深圳二手房交易合同蓋章流程
- 智能化工廠生產(chǎn)線施工合同
- 展覽館入口雨棚安裝合同
- 大型酒店建設(shè)圍擋合同
- 智能社區(qū)監(jiān)控安裝施工合同范本
- 洗衣店前臺接待合同模板
- 機(jī)加工節(jié)拍計(jì)算表
- 年產(chǎn)15萬噸發(fā)酵豆粕項(xiàng)目可行性研究報(bào)告
- 幼兒園公開課:大班語言《相反國》課件(優(yōu)化版)
- VSD護(hù)理完整版本
- 中小學(xué)勞動(dòng)教育在跨學(xué)科融合中的作用探究
- 北師大版數(shù)學(xué)六年級上冊單元真題拔高卷 第6單元《比的認(rèn)識》(A4 原卷)
- 如何提高中小學(xué)生的數(shù)學(xué)學(xué)習(xí)成績
- 2023年教師招聘考試考前必背簡答題條
- 管理英語4Unit-7-學(xué)前熱身-會話演練-邊學(xué)邊練-寫作訓(xùn)練等參考答案
- 大班美術(shù)活動(dòng)《有趣的線條》課件
- 2025年蛇年春聯(lián)帶橫批-蛇年對聯(lián)大全新春對聯(lián)集錦
評論
0/150
提交評論