操作系統(tǒng)實驗1~9_第1頁
操作系統(tǒng)實驗1~9_第2頁
操作系統(tǒng)實驗1~9_第3頁
操作系統(tǒng)實驗1~9_第4頁
操作系統(tǒng)實驗1~9_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗指導(dǎo)書班級:0904202姓名:國東野學(xué)號:0904202序言計算機操作系統(tǒng)是計算機專業(yè)及其相關(guān)專業(yè)的核心專業(yè)課程,是計算機科學(xué)及其相關(guān)技術(shù)的重要部分,學(xué)好操作系統(tǒng)的原理并會應(yīng)用其中學(xué)習(xí)的原理與方法可以是學(xué)習(xí)者大大提高各類軟件設(shè)計的質(zhì)量與水平,也可以懂得如何提高系統(tǒng)效率一起資源的利用率。為了培養(yǎng)學(xué)生的時間動手能力,幫助學(xué)習(xí)很體會與驗證學(xué)習(xí)的知識,特設(shè)計此實驗體系。實驗共計需要30與學(xué)時,課程規(guī)模限制,集中安排16學(xué)時,其余需求學(xué)生可以課下完成,或者在教師的指導(dǎo)下有選擇地完成實驗。實驗報告要求:提供各個實驗程序的流程圖,并填入實驗報告中;實驗報告附上運行結(jié)果圖的截圖;對實驗的結(jié)果進行分析,寫出自己的分析結(jié)果;實驗的源代碼需要打包交到班級刻盤保存;個人文件的命名以個人的姓名+學(xué)號命名;班級的以班級編號命名。需要程序可視性要好,要有試驗程序證明作品的正確性。所有的實驗報告采用A4打印,字體字號采用模版規(guī)定。源程序要加注釋,要有測試數(shù)據(jù)及結(jié)果。每個實驗的報告要另起一頁。實驗一進程同步和互斥一、 實驗?zāi)康恼莆张R界資源、臨界區(qū)概念及并發(fā)進程互斥、同步訪問原理。學(xué)會使用高級語言進行多線程編程的方法。掌握利用VC++或Java語言線程庫實現(xiàn)線程的互斥、條件競爭,并編碼實現(xiàn)P、V操作,利用P、V操作實現(xiàn)兩個并發(fā)線程對有界臨界區(qū)的同步訪問。通過該實驗,學(xué)生可在源代碼級完成進程同步互斥方案的分析、功能設(shè)計、編程實現(xiàn),控制進程間的同步、互斥關(guān)系。二、 實驗要求知識基礎(chǔ):學(xué)生應(yīng)在完成進程和線程及調(diào)度等章節(jié)的學(xué)習(xí)后進行。開發(fā)環(huán)境與工具:硬件平臺一一個人計算機。軟件平臺-Windows操作系統(tǒng),vc++語言或Java語言開發(fā)環(huán)境。運用高級語言VC++或Java語言線程庫及多線程編程技術(shù)進行設(shè)計實現(xiàn)。三、 實驗內(nèi)容實現(xiàn)臨界資源、臨界區(qū)、進程或線程的定義與創(chuàng)建。利用兩個并發(fā)運行的進程,實現(xiàn)互斥算法和有界緩沖區(qū)同步算法。四、 實驗方案指導(dǎo)該實驗方案由以下幾個關(guān)鍵設(shè)計項目組成:并發(fā)訪問出錯即設(shè)計一個共享資源,創(chuàng)建兩個并發(fā)線程,二者并發(fā)訪問該共享資源。當沒有采用同步算法設(shè)計時,線程所要完成的某些操作會丟失?;コ怄i并發(fā)線程使用線程庫提供的互斥鎖,對共享資源進行訪問。3.軟件方法設(shè)計并編程實現(xiàn)計數(shù)信號量、P操作函數(shù)、V操作函數(shù),并發(fā)線程通過調(diào)用P,V操作函數(shù)實現(xiàn)線程的互斥。同步訪問多緩沖區(qū)利用上面的軟件方法完成P,V操作可實現(xiàn)兩個線程對多緩沖區(qū)的同步訪問。五、 實驗方案實現(xiàn)范例以下是對該項目中包含的部分設(shè)計功能的實現(xiàn)方法、實現(xiàn)過程、技術(shù)手段的描述,供參考。模擬線程并發(fā)運行。假設(shè)我們使用POSIX線程庫,而POSIX并沒有真正提供線程間的并發(fā)運行需求。我們設(shè)計的系統(tǒng)應(yīng)支持符合RR調(diào)度策略的并發(fā)線程,每個線程運行一段時間后自動掛起,另一個線程開始運行。這樣一個進程內(nèi)所有線程以不確定的速度并發(fā)執(zhí)行。模擬一個競爭條件——全局變量。創(chuàng)建兩個線程tl和t2,父線程主函數(shù)main()定義兩個全局變量accntl和accnt2,每個變量表示一個銀行賬戶,初始化為0。每個線程模擬一個銀行事務(wù):將一定數(shù)額的資金從一個賬戶轉(zhuǎn)到另一個賬戶。每個線程讀入一個隨機值,代表資金數(shù)額,在一個賬戶上做減法,在另一個賬戶上做加法,用兩個變量記錄兩個賬戶的收支情況。良性情況下收支應(yīng)平衡,即兩個全局變量之和應(yīng)為0。下面是每個線程的代碼:counter=0;do{tmp1=accnt1;tmp2=accnt2;r=random();accnt1=tmp1+r;accnt2=tmp2-r;counter++;}while(accnt1+accnt2==0);printf(”%d”,counter);===============================兩個線程運行的代碼相同,只要各自代碼不被交叉執(zhí)行,兩個收支余額之和就應(yīng)一直為0,如果線程被交叉執(zhí)行,某個線程可能會讀入一個舊的accntl值和一個新的accnt2值,或者相反,這樣會導(dǎo)致某個值的丟失。當這種情況出現(xiàn)時,線程停止運行,并把出現(xiàn)情況的位置Counter的值)打印出來。模擬一個競爭條件——共享文件。主線程創(chuàng)建兩個共享文件fl和f2,每個文件包含一個當前銀行賬戶。線程使用隨機數(shù)對文件進行讀/寫,方式同上。注意:文件在讀/寫過程中不要加互斥訪問鎖,避免出現(xiàn)不會出現(xiàn)交叉訪問的情況。測試出現(xiàn)一個競爭條件的時間。我們的編程環(huán)境中,一般無法支持線程的RR調(diào)度,必須編程實現(xiàn)兩個線程間在兩個賦值語句之間插入以下代碼:在指定區(qū)間(比如0到1)生成一個隨機數(shù),小于一個極限值(如0.1),調(diào)用線程自動掛起函數(shù)jield(),自動放棄CPU,另一運行,于是導(dǎo)致一個數(shù)據(jù)更新的丟失?;コ怄i。POSIX線程庫提供一個二值信號量,稱為MUTEX,它可以加鎖或解鎖。如果已被另一個線程加上鎖的MUTEX加鎖,就會引發(fā)該線程被阻塞,MUTEX解鎖時喚醒它。使用這些原語,很容易實現(xiàn)互斥進入CS(臨界區(qū))。進入CS區(qū)時加鎖,離開CS區(qū)時解鎖。系統(tǒng)負責(zé)阻塞或喚醒線程。用軟件方法實現(xiàn)互斥訪問臨界區(qū)。用標準編程語言設(shè)置變量的值,用線程“忙等待”實現(xiàn)互斥訪問CS。設(shè)計兩線程部分代碼如下: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;}===============================該軟件方法使用三個變量cl,c2,will_wait,解決兩個線程的同步問題。兩個線程分別將c1和c2設(shè)置為1,表示自己試圖進入臨界區(qū),并將will_wait分別設(shè)置為1和2,以消除任何競爭條件。通過“忙等待”循環(huán)實現(xiàn)線程的阻塞。當線程退出CS區(qū)時,分別將變量c1和c2設(shè)置為0。我們可以比較互斥鎖和軟件方法這兩種解決方法的效率??梢酝ㄟ^重復(fù)相同的循環(huán)次數(shù),測量各自的執(zhí)行時間,盡量減少可能的外部干擾,重復(fù)測試幾次,并計算平均值。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗二進程及其資源管理一、 實驗?zāi)康睦斫赓Y源共享與互斥特性以及操作系統(tǒng)管理資源的基本方法。學(xué)會使用高級語言進行多線程編程的方法。掌握利用VC++或Java線程庫實現(xiàn)一個管理器,用來實現(xiàn)操作系統(tǒng)對進程及其資源的管理功能。通過該實驗,學(xué)生可在源代碼級完成進程及其資源管理方案的分析、功能設(shè)計、編程實現(xiàn),控制進程間的同步、互斥關(guān)系。二、 實驗要求知識基礎(chǔ):學(xué)生應(yīng)在完成對進程和線程、調(diào)度、死鎖等章節(jié)的學(xué)習(xí)后進行。開發(fā)環(huán)境與工具:硬件平臺——個人計算機。軟件平臺——Windows操作系統(tǒng),根據(jù)需要,任選安裝VC++語言、java語言或C語言開發(fā)環(huán)境。三、 實驗內(nèi)容開發(fā)一個函數(shù),建立進程控制塊和資源控制塊結(jié)構(gòu),并實現(xiàn)相關(guān)數(shù)據(jù)結(jié)構(gòu)的初始化。開發(fā)一系列操作,由進程調(diào)用這些操作,達到控制進程申請或釋放各種資源的目的。四、 實驗方案指導(dǎo)該實驗方案由以下幾個關(guān)鍵設(shè)計項目組成:進程數(shù)據(jù)結(jié)構(gòu)表示。資源數(shù)據(jù)結(jié)構(gòu)表示。進程對資源的操作。調(diào)度程序。用戶功能shell界面。五、 實驗方案實現(xiàn)范例以下是對該項目中包含的設(shè)計功能的實現(xiàn)方法、實現(xiàn)過程、技術(shù)手段的描述,供參考。進程數(shù)據(jù)結(jié)構(gòu)表示。使用結(jié)構(gòu)類型設(shè)計實現(xiàn)進程PCB表,它包含以下成員:進程ID——進程的唯一標識,供其他進程引用該進程;

內(nèi)存——是一個指針鏈表,它在創(chuàng)建進程時已申請完畢,可用鏈表實現(xiàn);其他資源——指除去內(nèi)存之外的所有資源;進程狀態(tài)——包括兩個數(shù)據(jù)類型,一個是狀態(tài)碼,另一個是狀態(tài)隊列鏈表指針;生成樹——包括兩個數(shù)據(jù)類型,本進程的父進程和本進程的子進程;優(yōu)先級——供進程調(diào)度程序使用,用來確定下一個運行進程,可以設(shè)定為靜態(tài)整數(shù)。資源數(shù)據(jù)結(jié)構(gòu)。每個資源都用一個稱為資源控制塊的數(shù)據(jù)結(jié)構(gòu)表示。使用結(jié)構(gòu)類型設(shè)計實現(xiàn)資源控制塊RCB。資源控制塊包括以下字段成員:RID-資源的唯一標識,由進程引用;資源狀態(tài)一一空閑/已分配;等待隊列——是被本資源阻塞的進程鏈表,本資源正被其他所有資源都設(shè)定為靜態(tài)數(shù)據(jù),系統(tǒng)啟動時初始化。進程管理及進程對資源的操作。進程操作及進程狀態(tài)轉(zhuǎn)換歸納如下:進程創(chuàng)建——(無)一就緒;申請資源一一運行…阻塞;資源釋放一一阻塞…就緒;刪除進程一一(任何狀態(tài))一(無);調(diào)度程序 就緒^運行或運行f就緒。具體實現(xiàn)步驟如下:根據(jù)上述數(shù)據(jù)結(jié)構(gòu),用高級語言設(shè)計相應(yīng)函數(shù),分別實現(xiàn)創(chuàng)建進程、刪除進程、掛起進程、喚醒進程等功能。設(shè)計一個函數(shù),實現(xiàn)調(diào)度程序,在每個進程操作執(zhí)行完畢后,自動調(diào)用執(zhí)行。實現(xiàn)兩個資源操作:申請資源和釋放資源。相關(guān)參考算法如下:request(RID) /*申請資源算法*/{r=get_RCB(RID); /*獲取資源控制塊首地址*/if(r->status==,free,)( /*資源可用*/r->status='allocated'; /*分配給調(diào)用進程,*/insert(self->other_resources,r);}/*插入一個RCB指針指向進程資源鏈表;*/else{表;*/else{self->status.type='blocked';self->status.list=r;. remove(RL,self);insert(r->waiting_list,self);}scheduler();程*/release(RID)/*資源不可用*//*記錄阻塞*//*指向所請求資源的RCB*//*將進程從就緒隊列中刪除*//*插入資源等待隊列*//*調(diào)度程序運行選擇下一個運行進/*釋放資源算法*/{r=get_RCB(RID); /*獲取資源控制塊首地址*/remove(self->other_resource,r); /*從進程資源鏈表中刪除該資源*/if(waiting_list==NULL)r->status=,free,;/*等待隊列為空,置資源狀態(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();/*從等待隊列中移出一個進程q*//*將進程q的狀態(tài)設(shè)為就緒*//*進程q的狀態(tài)指針指向就緒隊列*//*進程q插入就緒隊列*//*調(diào)度程序運行選擇下一個運行進程*/調(diào)度程序。調(diào)度策略采用固定優(yōu)先級和可剝奪優(yōu)先級調(diào)度算法。即調(diào)度程序必須維護n個不同優(yōu)先級的就緒隊列,各就緒隊列可為空,也可包含多個進程。0級進程優(yōu)先級最低,n-l級進程優(yōu)先級最高。創(chuàng)建進程時就賦予了固定的優(yōu)先級,并在進程的生存期內(nèi)保持不變。當新進程創(chuàng)建或阻塞進程被喚醒時,它就被插入同級的就緒隊列中。調(diào)度程序按“先來先服務(wù)”和優(yōu)先級“從高到低”的方式處理就緒隊列。即從最高優(yōu)先級的非空就緒隊列的隊首選擇一個進程進入運行態(tài)。這樣的調(diào)度策略很容易導(dǎo)致"饑餓",進程出現(xiàn)。因為對進程q來說,只有當優(yōu)先級高于自己的所有進程都運行完畢,或都進入阻塞狀態(tài)時,它才能得到運行權(quán)。為了簡化調(diào)度程序,我們假定系統(tǒng)中至少有一個進程處于就緒態(tài)。為確保這一點,設(shè)計一個特殊進程init,該進程在系統(tǒng)初始化時自動創(chuàng)建,并賦予最低優(yōu)先級0級。init進程有兩個作用:充當閑逛進程,該進程運行時不申請任何資源,以免被阻塞;作為第一個被創(chuàng)建的進程,它沒有父進程,可創(chuàng)建比自己優(yōu)先級高的其他進程。所以init進程是進程生成樹的根進程。采用優(yōu)先級策略的調(diào)度程序的常見結(jié)構(gòu)知下所示:scheduler(){找出最高優(yōu)先級進程p;If(self->priority<p->priority)||self->status.type!='running'||self=nil)preempt(p,self);/*調(diào)度進程p,替換當前進程self*/每當任一進程的操作執(zhí)行完畢,必須執(zhí)行進程調(diào)度程序,它是當前運行進程的一部分。進程調(diào)用該函數(shù),后者決定該進程是繼續(xù)執(zhí)行還是被其他進程剝奪運行權(quán)。作出判斷的依據(jù)是:是否存在高優(yōu)先級進程p,如果存在,p將剝奪self的運行權(quán)。當前進程的運行權(quán)被剝奪的情況有以下兩種:當前進程剛剛完成release(操作,由此被喚醒進程的優(yōu)先級可能高于當前進程。當前進程剛剛完成create()操作,新創(chuàng)建進程的優(yōu)先級可能高于當前進程。在以下兩種情況下,新挑選的進程必須剝奪當前進程的運行權(quán):①當前進程剛剛完成reques()操作,并且申請的資源timeout則當前進程的狀態(tài)就改為“阻塞”;或者由于分時運行進程的需要,調(diào)度程序被一個timeout操作調(diào)用運行。在timeout操作中當前進程的狀態(tài)改為“就緒”。在上述情況中,當前進程的狀態(tài)都不是“運行”。所以當前進程必須停止運行,此時就緒隊列中最高優(yōu)先級的進程p得到執(zhí)行。②當進程剛剛完成destroy操作,進程自己刪除自身,它的PCB表不再存在。此時調(diào)度程序被執(zhí)行,從就緒隊列中選出最高優(yōu)先級的進程p,并令其執(zhí)行。剝奪操作包括以下工作:將選中的最高優(yōu)先級進程p的狀態(tài)改為“運行"。如果當前進程依然存在且沒有阻塞,則將其狀態(tài)改為“就緒”,以便隨后能得到執(zhí)行。最后,進行上下文切換,保留當前CPU的各個寄存器值,放入PCB表。裝入中選進程p的寄存器值。本實現(xiàn)方案沒有對實際的CPU進行訪問來保存或恢復(fù)寄存器的值,因此上下文切換的任務(wù)只是將正在運行進程的名字顯示在終端屏幕上。從這一點可以認為,用戶終端屏幕開始扮演當前運行進程功能的角色。5.用戶shell界面。為RCB試和演示管理器的CPU能,本方案設(shè)計開發(fā)一個shell界面,它可以重復(fù)接受終端輸入的命令,喚醒管理器執(zhí)行相應(yīng)的功能,并在屏幕上顯示結(jié)果。使用上述系統(tǒng),終端就能展示當前進程。只要輸入一個命令,就中斷當前進程序的執(zhí)行,shell界面調(diào)用進程資源管理器中的函數(shù)F,并傳遞終端輸入的參數(shù)。該函數(shù)執(zhí)行后將改變PCB、RCB及其他數(shù)據(jù)結(jié)構(gòu)中的信息。當調(diào)度程序執(zhí)行時,決定下一個要運行的進程,并改變其狀態(tài)值。保存當前進程的CPU各寄存器值(虛擬CPU),然后恢復(fù)中選進程的值。調(diào)度程序?qū)⑾到y(tǒng)狀態(tài)信息顯示在屏幕上,提示下一步操作。特別地,它始終提示正在運行的進程是什么,即終端和鍵盤正在為哪個進程服務(wù)。另外,函數(shù)F也可能返回一個錯誤碼,shell也將它顯示在屏幕上。shell命令的語法格式規(guī)定如下:命令名參數(shù)例如,執(zhí)行命令行“crA1”時將調(diào)用對應(yīng)的管理器函數(shù)create(A,1),即創(chuàng)建一個名為A、優(yōu)先級為1的進程。同理,命令“rqR”將調(diào)用函數(shù)request(R)執(zhí)行。以下顯示說明shell界面的交互內(nèi)容(假定進程A的優(yōu)先級為1,并且正在運行)。由“"開始的行視為shell的輸崮結(jié)果。提示符“>”后面是提示用戶輸入的命令。processAisrunningcrB2processBisrunningcrC1processBisrunningreqR1processBisblocked;processAisrunning進程及資源管理器的升級版??蓪ι鲜龌拘瓦M程功能資源管理器進行功能擴展,使管理器能夠處理時鐘到時中斷和I/O處理完成中斷。(1)相對時鐘到時中斷。假設(shè)系統(tǒng)提供一個硬件時鐘。周期性產(chǎn)生一個時鐘到時中斷。引發(fā)調(diào)用函數(shù)timeout()的執(zhí)行。110處理完成中斷。使用名為IO的資源表示所有的I/O設(shè)備。該資源的RCB由以下兩部分組成:IOWaiting_list擴展shell。顯示當前運行進程,并添加一個系統(tǒng)調(diào)用request_100。終端也能表示硬件,用戶能夠模擬兩種類型的中斷:時鐘到時、I/O完成處理。為了實現(xiàn)以上功能,必須添加新的shell命令,調(diào)用以下三個系統(tǒng)調(diào)用:request_IO(),IO_competion,timeout。。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗三存儲管理一、 實驗?zāi)康恼莆諆?nèi)存管理的基本功能和分區(qū)法內(nèi)存分配的基本原理。學(xué)會Linux(或者windows)操作系統(tǒng)下使用c語言函數(shù)和系統(tǒng)調(diào)用進行編程的方法。利用c語言設(shè)計實現(xiàn)分區(qū)法內(nèi)存分配算法。驗證無虛存的存儲管理機制。二、 實驗要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程、調(diào)度、存儲管理。安裝Linux操作系統(tǒng)(無條件時可以用其他操作系統(tǒng)平臺),使用c語言編程,調(diào)用相關(guān)系統(tǒng)調(diào)用進行設(shè)計實現(xiàn)。三、 實驗內(nèi)容創(chuàng)建空閑存儲管理表和模擬內(nèi)存。設(shè)計并實現(xiàn)一個內(nèi)存分配程序,分配策略可以分別采用最先適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法等,并評價不同分配算法的優(yōu)劣。提供一個用戶界面,利用它用戶可輸入不同的分配策略。進程向內(nèi)存管理程序發(fā)出申請、釋放指定數(shù)量的內(nèi)存請求,內(nèi)存管理程序調(diào)用對應(yīng)函數(shù),響應(yīng)請求。四、 實驗方案指導(dǎo)該實驗方案由以下幾個關(guān)鍵設(shè)計項目組成。設(shè)計實現(xiàn)一個空閑分區(qū)表。設(shè)計實現(xiàn)模擬內(nèi)存。 考慮實現(xiàn)的便利,本方案不訪問真正的內(nèi)存。定義一個字符數(shù)組charmm[mem_size]或使用Linux系統(tǒng)調(diào)用mm=malloc(mem_size),用來模擬內(nèi)存。利用指針對模擬內(nèi)存進行訪問。設(shè)計一組管理物理內(nèi)存空間的函數(shù)。用戶接口由以下三個函數(shù)組成:void*mm_request(intn)申請n個字節(jié)的內(nèi)存空間。如申請成功,則返回所分配空間的首地址;如不能滿足申請,則返回空值。voidmm_release(void*p)釋放先前申請的內(nèi)存。如果釋放的內(nèi)存與空閑區(qū)相鄰,則合并為一個大空閑區(qū);如果與空閑區(qū)不相鄰,則成為一個單獨的空閑區(qū)。void*mm_init(intmem_size)內(nèi)存初始化。返回mm指針指向的空閑區(qū)。設(shè)計實現(xiàn)不同策略的內(nèi)存分配程序。對于采用不同分配策略的內(nèi)存管理程序,從以下兩個方面進行調(diào)度程序性能的比對:內(nèi)存利用率以及找到一個合適的分配空間所需查找的步驟。設(shè)置一個模擬實驗。分別構(gòu)建一個隨機生成的請求與釋放隊列。釋放隊列中的操作總是得到滿足,隊列總為空;請求隊列的操作能否被滿足,取決于空閑區(qū)

能否滿足申請的空間大小。若不能滿足,則該操作在隊列中等待相應(yīng)釋放操作喚醒。請求隊列采用FIFO管理,以避免饑餓現(xiàn)象的發(fā)生。內(nèi)存管理程序應(yīng)對內(nèi)存初始化,隨機設(shè)定內(nèi)存空間的占有、空閑情況,隨機設(shè)定申請和釋放的操作隊列。調(diào)用釋放操作開始運行,調(diào)用申請操作,如能滿足,則分配空間,否則等待釋放操作喚醒。下面給出一個模擬內(nèi)存管理的程序框架(偽碼形式)??蓪π阅軘?shù)據(jù)指標進行 統(tǒng) 計。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)計內(nèi)存使用率*//*釋放某空間p*//*調(diào)用釋放操作*/以上程序由主循環(huán)控制固定次數(shù)的模擬步驟。每次循環(huán),程序完成如下處理步驟:內(nèi)循環(huán)盡可能多地滿足內(nèi)存請求,請求內(nèi)存大小值隨機生成。一旦請求失敗,掛起內(nèi)存管理程序,直至釋放操作被執(zhí)行。此時進行系統(tǒng)內(nèi)存利用率的統(tǒng)計、計算,隨機挑選一個內(nèi)存分配空間完成釋放操作。本次主循環(huán)執(zhí)行完畢,開始下一次循環(huán)。需要在程序中完成以下設(shè)計:確定請求分配空間大小,統(tǒng)計性能數(shù)據(jù),選擇一個內(nèi)存區(qū)釋放。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗四頁面置換算法一、 實驗?zāi)康恼莆諆?nèi)存管理基本功能和請求分頁式管理的基本原理以及頁面置換算法。學(xué)會在Linux操作系統(tǒng)下使用C函數(shù)和系統(tǒng)調(diào)用的編程方法。掌握利用C語言設(shè)計實現(xiàn)不同置換策略的頁面置換算法。驗證虛存存儲管理機制及其性能。對于生成的引用串,計算、比對不同頁面置換算法的缺頁率。二、 實驗要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程、調(diào)度、存儲管理。安裝Linux操作系統(tǒng),使用C語言編程,利用相關(guān)系統(tǒng)調(diào)用實現(xiàn)設(shè)計。三、 實驗內(nèi)容創(chuàng)建空閑存儲管理表、模擬內(nèi)存、頁表等。提供一個用戶界面,用戶利用它可輸入不同的頁面置換策略和其他附加參數(shù)。運行置換程序,輸出缺頁率結(jié)果。四、 實驗方案指導(dǎo)熟悉頁面置換算法及其實現(xiàn),了解計算機系統(tǒng)性能評價方法,編制頁面置換算法的模擬程序。方案設(shè)計重點提示如下。假定系統(tǒng)有固定數(shù)目的內(nèi)存塊F,物理塊號依次為0?F-l。進程的大小為P頁,其邏輯頁號依次為0?P-l。隨機生成一個引用串RS,即從0?P-l組成的整數(shù)序列。定義一個整型數(shù)組intM[F]表示所有物理塊,如果M[i]=n,表示邏輯頁n存放在物理塊i中。生成引用串。用隨機數(shù)方法產(chǎn)生頁面走向,頁面走向長度為L。根據(jù)頁面走向,分別采用FIFO和LRU算法進行頁面置換,設(shè)計一個函數(shù)自動統(tǒng)計缺頁率。假定可用內(nèi)存塊和頁表長度(進程的頁面數(shù))分別為m和k。初始時,進程的頁面都不在內(nèi)存。參考其他設(shè)計項目,將不同置換算法設(shè)計實現(xiàn)為函數(shù),能在界面上方便調(diào)用執(zhí)行。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗五進程調(diào)度一、 實驗?zāi)康恼莆者M程調(diào)度程序的功能和調(diào)度程序采用的調(diào)度算法。學(xué)會在Linux操作系統(tǒng)下使用C函數(shù)和系統(tǒng)調(diào)用的編程方法。掌握利用C語言設(shè)計實現(xiàn)不同調(diào)度策略的進程調(diào)度算法。驗證不同進程調(diào)度算法對性能的影響。二、 實驗要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程、調(diào)度。安裝Linux操作系統(tǒng),使用C語言編程,利用相關(guān)系統(tǒng)調(diào)用完成設(shè)計實現(xiàn)。三、 實驗內(nèi)容定義、初始化進程數(shù)據(jù)結(jié)構(gòu)及其就緒隊列。提供一個用戶界面,用戶利用它可輸入不同的分配策略及相關(guān)參數(shù)。設(shè)計實現(xiàn)調(diào)度程序,調(diào)用下面的功能函數(shù)。設(shè)計函數(shù),實現(xiàn)計算平均周轉(zhuǎn)時間,實現(xiàn)不同調(diào)度算法。四、 實驗方案指導(dǎo)關(guān)鍵設(shè)計內(nèi)容如下,供參考。用C語言的結(jié)構(gòu)類型及其鏈表,完成PCB表數(shù)據(jù)結(jié)構(gòu)設(shè)計,并動態(tài)生成一組進程組成的就緒隊列鏈表。每個進程都由PCB記錄運行時間,優(yōu)先級、到達系統(tǒng)時間等數(shù)據(jù)。也可根據(jù)需要,自行添加不同調(diào)度算法需要的數(shù)據(jù)。設(shè)計實現(xiàn)不同調(diào)度算法的函數(shù),如先來先服務(wù)法、短作業(yè)優(yōu)先法、優(yōu)先級法等。設(shè)計一個函數(shù),計算出這組進程的平均周轉(zhuǎn)時間。設(shè)計總控函數(shù),實現(xiàn)進程調(diào)度程序。根據(jù)用戶界面的輸入,調(diào)用相應(yīng)的調(diào)度算法,實現(xiàn)進程調(diào)度,計算調(diào)度性能指標。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗六銀行家算法一、 實驗?zāi)康睦斫馑梨i概念、銀行家算法及安全性檢測算法。學(xué)會在Linux操作系統(tǒng)下'使用C語言函數(shù)和指針進行編程的方法。掌握利用C語言設(shè)計實現(xiàn)銀行家算法的基本過程。驗證銀行家算法對于避免死鎖的作用。二、 實驗要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程的調(diào)度。死鎖。安裝Linux操作系統(tǒng),使用C語言編程完成設(shè)計實現(xiàn)。三、 實驗內(nèi)容定義并初始化進程及其資源數(shù)據(jù)結(jié)構(gòu)。提供一個用戶界面,用戶利用它可動態(tài)輸入進程和資源種類等相關(guān)參數(shù)設(shè)計實現(xiàn)安全狀態(tài)檢測和銀行家死鎖避免算法的功能函數(shù)。四、 實驗方案指導(dǎo)以如下幾組初始數(shù)據(jù)為例,設(shè)計相應(yīng)程序,判斷下列狀態(tài)是否安全。1.3個進程共享12個同類資源狀態(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個進程共享多類資源狀態(tài)c下:判斷系統(tǒng)是否安全?若安全,給出安全序列。若進程2請求(0,4,2,0),可否立即分配?分配矩陣 最大需求矩陣可用資源矩陣00120012152010001750135423560632065200140656實現(xiàn)方案的主要作是如何輸入,如何初始數(shù)據(jù),如何調(diào)用對應(yīng)功能函數(shù),如何輸出結(jié)果。下面給出一個實現(xiàn)方案,供參考。開發(fā)一個交互程序,首先從文件中讀入系統(tǒng)描述信息,包括進程的數(shù)目、資源的種類和數(shù)量、每個進程的最大資源請求。程序自動根據(jù)文件內(nèi)容創(chuàng)建一個當前系統(tǒng)描述例如,每類資源的數(shù)目用…維數(shù)組R[m]描述,m為資源的種類。每個R[j]記錄資源Rj的數(shù)量。進程的最大需求矩陣用P[n][m]表示,P[il[j]記錄進程Pi對資源Rj的最人需求。分配矩陣和請求矩陣可使用二維數(shù)組表示。用戶輸入一個請求,格式類似:resquest(i,j,k),或release(i,j,k),在這里,i表示進程Pi,j表示資源Rj,k是申請/釋放的數(shù)量。對每一個請求,系統(tǒng)回應(yīng)是滿足要求還是拒絕分配。設(shè)定一個申請和釋放序列,無任何檢測和避免死鎖的算法,分配會導(dǎo)致死

鎖。設(shè)定一個申請和釋放序列,按照安全性算法進行設(shè)計,回應(yīng)系統(tǒng)是否安全。然后實現(xiàn)銀行家算法,確保沒有死鎖的分配。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果成"C:\DOCUIENTSANDSETTINGS\B\桌面\11l\bank\Debug\ban二二二二二二二二二二二二二二二二二二二可統(tǒng)dpO希--3:2:4輸嘉_|_p■日JV-;日JV-;日MV...-1.&2.&3.&首源源源源源源二二二二二二二二二二二二二二二二現(xiàn)討3T隋撤入作業(yè)的數(shù)量=S請輸入各進程的最大需求量《A3矩陣>CMax]:41000000000000000000系統(tǒng)目前可用的資源CAualiable]:dpo324進程名01Maxdpo41Allocation

dpo

0

0

0

000

00進程名01Maxdpo41Allocation

dpo

0

0

0

000

0000

00Needdpo41系統(tǒng)不安全二二二二二二二二二二二二二示嘟除改配加開123450結(jié)果分析實驗七磁盤調(diào)度算法一、 實驗?zāi)康睦斫馕募x/寫基本原理和磁盤調(diào)度算法的作用。學(xué)會在Linux操作系統(tǒng)下使用C語言函數(shù)和指針進行編程的方法。利用C語言設(shè)計實現(xiàn)不同磁盤調(diào)度算法,如FIFO,SSTF,SCAN等算法。驗證不同磁盤調(diào)度算法對性能的影響。二、 實驗要求學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程、調(diào)度、存儲管理、I/O管理。安裝Linux操作系統(tǒng),使用C語言編程完成設(shè)計實現(xiàn)。三、 實驗內(nèi)容設(shè)計一個函數(shù),其功能是動態(tài)創(chuàng)建I/O請求隊列及其相關(guān)參數(shù),如磁道號等。提供一個用戶界面,用戶可輸入不同的分配策略以相關(guān)參數(shù)。設(shè)計相應(yīng)程序計算平均移臂距離。四、 實驗方案指導(dǎo)實現(xiàn)本實驗的關(guān)鍵內(nèi)容如下,供參考。實現(xiàn)電梯算法。實現(xiàn)FIFO,SSTF算法。寫一個驅(qū)動程序,測試不同的算法。設(shè)置多次循環(huán),每次循環(huán)中,驅(qū)動程序隨機調(diào)用函數(shù)request(n)和release()。如果執(zhí)行request(n),系統(tǒng)會將n轉(zhuǎn)換成1?T之間的一個隨機值,T是磁盤的磁道數(shù)。對每種算法,計算平均移臂距離。以下部分由學(xué)生填寫:程序流程圖實驗結(jié)果結(jié)果分析實驗八設(shè)備處理程序設(shè)計一、 實驗?zāi)康睦斫庠O(shè)備處理程序的一般設(shè)計過程,加深對緩沖和中斷概念的理解。學(xué)會在Linux操作系統(tǒng)下使用C語言編程與有關(guān)進程的系統(tǒng)調(diào)用方法。掌握利用C語言設(shè)計實現(xiàn)鍵盤緩沖區(qū)的讀/寫操作的方法。驗證鍵盤緩沖區(qū)和中斷處理程序是否同步。二、 實驗要求

學(xué)生應(yīng)完成如下章節(jié)的學(xué)習(xí):進程和線程、調(diào)度、存儲管理、I/O管理。安裝Linux操作系統(tǒng),使用C語言和相關(guān)系統(tǒng)調(diào)用,編程完成設(shè)計實現(xiàn)。三、 實驗內(nèi)容主程序?qū)崿F(xiàn)鍵盤讀/寫、鍵盤中斷處理程序??尚薷木彌_區(qū)數(shù)目,運行此程序。四、 實驗方案指導(dǎo)將主程序看成消費者進程,將中斷程序看成生產(chǎ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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論