




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淮北師范大學(xué) 操作系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目動(dòng)態(tài)分區(qū)分配管理系統(tǒng)班級(jí):設(shè)計(jì)者:指導(dǎo)老師:時(shí)間: 2012/03/14-2012/03/15 目錄1程序設(shè)計(jì)的內(nèi)容和相關(guān)的要求-2程序總的功能說(shuō)明-3程序的模塊的說(shuō)明-4程序設(shè)計(jì)的流程圖-5程序的操作說(shuō)明及運(yùn)行結(jié)果-6源程序的清單-7心得體會(huì)-1程序設(shè)計(jì)的內(nèi)容和相關(guān)的要求課程設(shè)計(jì)的目的:操作系統(tǒng)課程設(shè)計(jì)是計(jì)算機(jī)學(xué)院重要的教學(xué)環(huán)節(jié),它為學(xué)生提供了一個(gè)既動(dòng)手又動(dòng)腦,將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來(lái),獨(dú)立分析和解決實(shí)際問(wèn)題的機(jī)會(huì)。l進(jìn)一步鞏固和復(fù)習(xí)操作系統(tǒng)的基礎(chǔ)知識(shí)。l培養(yǎng)學(xué)生結(jié)構(gòu)化程序、模塊化程序設(shè)計(jì)的方法和能力。l提高學(xué)生調(diào)試程序的技巧和軟件設(shè)計(jì)的能
2、力。l提高學(xué)生分析問(wèn)題、解決問(wèn)題以及綜合利用c語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力。實(shí)現(xiàn)的任務(wù):編寫(xiě)一個(gè)動(dòng)態(tài)分區(qū)分配程序。設(shè)計(jì)內(nèi)容:用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)動(dòng)態(tài)分區(qū)內(nèi)存分配程序,演示實(shí)現(xiàn)下列兩種動(dòng)態(tài)分區(qū)分配算法1.首次適應(yīng)算法2.循環(huán)首次適應(yīng)算法設(shè)計(jì)要求:1.內(nèi)存中有0-100m的空間為用戶程序空間,最開(kāi)始用戶空間是空閑的;2.作業(yè)數(shù)量、作業(yè)大小、進(jìn)入內(nèi)存空間、運(yùn)行時(shí)間需要通過(guò)界面進(jìn)行輸入;3.可讀取樣例數(shù)據(jù)(要求存放在外部文件夾中)進(jìn)行作業(yè)數(shù)量、作業(yè)大小、進(jìn)圖內(nèi)存時(shí)間、運(yùn)行時(shí)間的初始化;4.根據(jù)作業(yè)進(jìn)圖內(nèi)存的時(shí)間,采用簡(jiǎn)單的先進(jìn)先出原則進(jìn)行從外村到內(nèi)存的調(diào)度,作業(yè)具有等待(從外存進(jìn)入內(nèi)存執(zhí)行)、裝入(在內(nèi)
3、存可執(zhí)行)、結(jié)束(運(yùn)行結(jié)束,退出內(nèi)存)三種狀態(tài)。(為了簡(jiǎn)化,不考慮cpu的調(diào)度與切換,運(yùn)行時(shí)間為作業(yè)在內(nèi)存中駐留的時(shí)間);5.能夠自動(dòng)進(jìn)行內(nèi)存分配與回收,可根據(jù)需要自動(dòng)進(jìn)行緊湊與拼接操作,所有過(guò)程均有動(dòng)態(tài)圖形變化的顯示;6.采用可視化界面,可隨時(shí)暫停顯示當(dāng)前內(nèi)存分配和使用情況圖。2程序總的功能說(shuō)明:本程序可以從界面直接輸入作業(yè)并進(jìn)行動(dòng)態(tài)的內(nèi)存分配,也可以自動(dòng)地生成作業(yè)文件并自行調(diào)度進(jìn)行內(nèi)存分配,每次分配可以選擇兩種算法(首次適應(yīng)算法和循環(huán)首次算法)中的一種,每次作業(yè)結(jié)束后可以進(jìn)入操作主界面進(jìn)行再次作業(yè)的操作。3程序各模塊的功能說(shuō)明:(1) 界面顯示函數(shù):showinterface(pl p,j
4、ob job);顯示操作界面showjob(job job);顯示作業(yè)鏈表;showpartitiion(pl pl)顯示分區(qū)鏈表(2) 執(zhí)行練習(xí)的功能函數(shù):copyjob(job p);作業(yè)鏈表復(fù)制函數(shù)函數(shù)initpartitionlist(pl &p);鏈表初始化分區(qū)函數(shù)函數(shù)createjoblist(job &job,int count);創(chuàng)建作業(yè)鏈表函數(shù)insertnode(job p,job &job);按時(shí)間順序創(chuàng)建鏈表函數(shù)initpartitionlist(pl &p);初始化分區(qū)鏈表函數(shù)(3)文件函數(shù) openfile();打開(kāi)文件函數(shù) readfile();讀取文件函數(shù)ran
5、domparameter();隨即參數(shù)讀入文件函數(shù) main()/主函數(shù)4程序設(shè)計(jì)的流程圖 : 總體設(shè)計(jì)流程圖:動(dòng)態(tài)分區(qū)分配界面作業(yè)生成退出操作界面輸入自動(dòng)生成文件生成方式12 3分配方式首次適應(yīng)循環(huán)首次適應(yīng)應(yīng)123作為一個(gè)整體首次適應(yīng)算法:開(kāi)始接受作業(yè)作業(yè)n-執(zhí)行進(jìn)入內(nèi)存回收釋放空間結(jié)束intime=timewaitingjobstate (0或1) 空閑分區(qū)狀態(tài) (0或1)n=0作業(yè)等待序列ynyny0010回收函數(shù):回收函數(shù)回收區(qū)在空閑分區(qū)前不連接回收連接回收回收區(qū)在空閑分區(qū)間回收區(qū)在空閑分區(qū)后5程序操作說(shuō)明書(shū)及結(jié)果在vc+6.0環(huán)境中運(yùn)行本程序,先進(jìn)行編譯,然后再進(jìn)行鏈接,在進(jìn)行執(zhí)行將
6、會(huì)出現(xiàn)顯示界面。按照顯示界面上顯示的提示進(jìn)行操作,就可以實(shí)現(xiàn)相應(yīng)的功能:1.運(yùn)行進(jìn)入操作主界面:6源程序清單#include#include #include#include#include #define memorysize 100/為空閑分區(qū)分配的最大空間(按題目要求)int workload;/輸入作業(yè)的數(shù)量;typedef struct joblistint id;/ 作業(yè)的name int size;/ 作業(yè)大?。ㄐ枰拇鎯?chǔ)空間大?。?int intime; /進(jìn)入時(shí)間int runtime; /運(yùn)行時(shí)間int state; /作業(yè)的狀態(tài)(0表示等待,1表示執(zhí)行,2表示結(jié)束并釋放)
7、struct joblist *next;/ 作業(yè)鏈表指針 *job;typedef struct partitionlistint id;int startaddress;/分區(qū)起始地址 int size;/分區(qū)大小int state; /分區(qū)的狀態(tài)struct partitionlist *prior;struct partitionlist *next;/ 分區(qū)鏈表指針 *pl;file *fp;/*打開(kāi)文件*/void openfile()if(fp=(fopen(d:作業(yè)文件.txt,w)=null)printf(無(wú)法打開(kāi)文件!n);exit(0);/*讀取文件*/void read
8、file()if(fp=(fopen(d:作業(yè)文件.txt,r)=null)printf(無(wú)法打開(kāi)文件!n);exit(0);/*將隨機(jī)產(chǎn)生進(jìn)程的參數(shù)寫(xiě)入文件*/void randomparameter()openfile();for(int i=0;istartaddress,pl-id,pl-size,pl-state);printf(n);pl=pl-next;printf(t*n);sleep(1000);if(kbhit()=1)system(“pause”);/*按進(jìn)入時(shí)間順序創(chuàng)建一個(gè)作業(yè)鏈表*/void insertnode(job p,job &job) /將創(chuàng)建的新結(jié)點(diǎn)插入到
9、鏈表中job q1,q2;q1=job;q2=job-next;int i=0;if(!q2)p-next=q2;q1-next=p; while(q2!=null&q2-intimeintime)q1=q2;q2=q2-next;i=1;if(!q2&i=1)p-next=q2;q1-next=p;if(q2!=null&p-intimeintime)p-next=q2;q1-next=p;job createjoblist(job &job,int count)/創(chuàng)建作業(yè)鏈表job=(job)malloc(sizeof(joblist);if(!job)exit(0);job-next=n
10、ull;job p;printf(idtsizetintimetruntimen);for(int i=0;iid,&p-size,&p-intime,&p-runtime);p-state=0;if(p-size100)printf(作業(yè)過(guò)大不能為之分配內(nèi)存,請(qǐng)重新輸入的作業(yè):n); scanf(%dt%dt%dt%d,&p-id,&p-size,&p-intime,&p-runtime); p-state=0; insertnode(p,job); else insertnode(p,job);return job;/*從外部文件讀入數(shù)據(jù)并進(jìn)行作業(yè)初始化*/job readinitjob(
11、job &job)readfile();job=(job)malloc(sizeof(joblist);if(!job)exit(0);job-next=null;job p;for(int i=0;iid,&p-size,&p-intime,&p-runtime,&p-state); insertnode(p,job);return job;/*初始化分區(qū)鏈表*/pl initpartitionlist(pl &p)p=(pl)malloc(sizeof(partitionlist);if(!p)exit(0);p-size=memorysize;printf(輸入分區(qū)首地址:);scanf
12、(%d,&p-startaddress);p-state=0;p-id=0;p-next=null;p-prior=null;return p;/*將一個(gè)作業(yè)鏈表復(fù)制到另一個(gè)鏈表*/job copyjob(job p) job q,l,s=p,r;l=(job)malloc(sizeof(joblist);l-next=null;r=l;s=s-next;while(s) q=(job)malloc(sizeof(joblist);q-id=s-id;q-state=0;q-intime=s-intime;q-runtime=s-runtime;q-size=s-size;r-next=q;q
13、-next=null;r=q;s=s-next;return l;/*將一個(gè)分區(qū)鏈表復(fù)制到另一個(gè)鏈表*/pl copypartition(pl p)pl q,l,s=p,r;l=(pl)malloc(sizeof(partitionlist);l-next=null;r=l;s=s-next;while(s) q=(pl)malloc(sizeof(partitionlist);q-size=s-size;q-startaddress=s-startaddress;q-state=s-state;r-next=q;q-next=null;r=q;s=s-next;return l;/*作業(yè)鏈表
14、*/void showjob(job job)job=job-next;printf(n將作業(yè)按進(jìn)入時(shí)間排序表示:n);printf(t*n);printf(t* idtsizetintimetruntimetstate *n);printf(t*n);while(job)printf(t* %dt%dt%dt%dt%d *,job-id,job-size,job-intime,job-runtime,job-state);printf(n);job=job-next;printf(t*n);printf(n);/*回收內(nèi)存*/void recover(pl pl3,pl &pl)while(
15、pl3) if(pl3-state=0) if(pl3-next&pl3-prior&pl3-prior-state=0&pl3-next-state=1)pl3-size+=pl3-prior-size; pl3-startaddress=pl3-prior-startaddress;pl3-state=0;pl3-id=0; if(pl3-prior-prior) pl3-prior-prior-next=pl3; pl3-prior=pl3-prior-prior;else pl3-prior=pl3-prior-prior;pl=pl3;pl3=pl;else if(pl3-prior
16、&pl3-next&pl3-next-state=0&pl3-prior-state=1)pl3-size+=pl3-next-size;pl3-state=0;pl3-id=0;if(pl3-next-next)pl3-next-next-prior=pl3;pl3-next=pl3-next-next;elsepl3-next=pl3-next-next;else if(!pl3-prior) if(pl3-next-state=0)pl3-size+=pl3-next-size;pl3-state=0;pl3-id=0; if(pl3-next-next)pl3-next-next-pr
17、ior=pl3;pl3-next=pl3-next-next;elsepl3-state=0;else if(!pl3-next)if(pl3-prior-state=0)pl3-size+=pl3-prior-size;pl3-state=0;pl3-id=0;pl3-startaddress=pl-startaddress; if(pl3-prior-prior)pl3-prior-prior-next=pl3; pl3-prior=pl3-prior-prior;elsepl3-prior=null;pl=pl3;pl3=pl;elsepl3-state=0;else if(pl3-ne
18、xt&pl3-prior&pl3-next-state=0&pl3-prior-state=0)pl3-size=pl3-size+pl3-next-size+pl3-prior-size;pl3-state=0;pl3-id=0;pl3-startaddress=pl3-prior-startaddress;if(pl3-next-next)pl3-next-next-prior=pl3;if(pl3-prior-prior)pl3-prior-prior-next=pl3;pl3-next=pl3-next-next;pl3-prior=pl3-prior-prior;elsepl3-ne
19、xt=pl3-next-next;pl3-prior=pl3-prior-prior;pl=pl3;pl3=pl;pl3=pl3-next;/*首次適應(yīng)算法*/void cyclefirstfit(pl pl,job job)int t=0;int n=workload;while(t+1&n)pl pl1=pl,pl2;printf(時(shí)鐘:%dn,t);job job1=job;job1=job1-next;job j1=job;j1=j1-next;job j2=job;j2=j2-next;job j3=job;j3=j3-next;pl pl3=pl;while(j2)if(j2-in
20、time+j2-runtime=t)printf(作業(yè)id:%d運(yùn)行結(jié)束,釋放內(nèi)存!,j2-id);n=n-1;j2-state=2;showjob(job);showpartitiion(pl);j2=j2-next;while(j1)if(j1-intime=t)printf(作業(yè)id:%d開(kāi)始運(yùn)行,對(duì)其分配!,j1-id);j1-state=1;j1=j1-next;while(job1)if(t=job1-intime)while(pl1&(pl1-sizesize|pl1-state=1) pl1=pl1-next;if(pl1)pl2=(pl)malloc(sizeof(parti
21、tionlist);pl2-startaddress=pl1-startaddress+job1-size;pl2-state=0;pl2-id=0;pl2-size=pl1-size-job1-size;if(pl2-size5)pl1-size=job1-size;pl1-state=1;pl1-id=job1-id;if(pl1-next)pl1-next-prior=pl2;pl2-next=pl1-next;pl2-prior=pl1;pl1-next=pl2;pl1=pl;elsepl1-state=1;pl1-id=job1-id;showjob(job);showpartiti
22、ion(pl);elseprintf(內(nèi)存不足,將作業(yè):%d置于等待狀態(tài)!等待內(nèi)存釋放在進(jìn)行分配!n,job1-id);job j=job1;while(j)j-intime+=1;j-state=0;j=j-next;job jj=job;jj=jj-next;while(jj)if(jj-state=2)while(pl3)if(pl3-id=jj-id)pl3-state=0;pl3=pl3-next;jj=jj-next;pl3=pl;recover(pl3,pl);job1=job1-next;t=t+1;sleep(500);pl p=pl;while(p)p-state=0;p=
23、p-next;showjob(job);showpartitiion(pl);printf(所有進(jìn)程分配完畢!n);/*循環(huán)首次算法*/void firstfit(pl pl,job job)int t=0;int n=workload;while(t+1&n)pl pl1=pl,pl2;printf(時(shí)鐘:%dn,t);job job1=job;job1=job1-next;job j1=job;j1=j1-next;job j2=job;j2=j2-next;job j3=job;j3=j3-next;pl pl3=pl;while(j2)if(j2-intime+j2-runtime=t
24、)printf(作業(yè)id:%d運(yùn)行結(jié)束,釋放內(nèi)存!n,j2-id);n=n-1;j2-state=2;pl3=pl;while(pl3)if(pl3-id=j2-id)pl3-state=0;pl3=pl3-next;showjob(job);showpartitiion(pl);/進(jìn)程運(yùn)行結(jié)束時(shí)進(jìn)行內(nèi)存回收j2=j2-next;while(j1)if(j1-intime=t)printf(作業(yè)id:%d開(kāi)始運(yùn)行,對(duì)其進(jìn)行分配!,j1-id);j1-state=1;j1=j1-next;while(job1)if(t=job1-intime)while(pl1&(pl1-sizesize|pl
25、1-state=1) pl1=pl1-next;if(pl1)pl2=(pl)malloc(sizeof(partitionlist);pl2-startaddress=pl1-startaddress+job1-size;pl2-state=0;pl2-id=0;pl2-size=pl1-size-job1-size;if(pl2-size=5)/碎片最大值設(shè)為 5pl1-size=job1-size;pl1-state=1;pl1-id=job1-id;if(pl1-next)pl1-next-prior=pl2;pl2-next=pl1-next;pl2-prior=pl1;pl1-ne
26、xt=pl2;pl1=pl;elsepl1-state=1;pl1-id=job1-id;showjob(job);showpartitiion(pl);elseprintf(內(nèi)存不足,將作業(yè):%d置于等待狀態(tài)!等待內(nèi)存釋放在進(jìn)行分配!n,job1-id);job j=job1;while(j)j-intime+=1;j-state=0;j=j-next;pl3=pl;recover(pl3,pl);job1=job1-next;t=t+1;sleep(500);pl p=pl;while(p)p-state=0;p=p-next;showjob(job);showpartitiion(pl);printf(所有進(jìn)程分配完畢!n);/*界面顯示*/void showinterface(pl p,job job)int a,con=0;job j1,j2;while(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 把握2024年計(jì)算機(jī)基礎(chǔ)考試要點(diǎn)試題及答案
- 酒店防控疫情培訓(xùn)課件
- 2025年小學(xué)語(yǔ)文考試支持材料試題及答案
- 2024年汽車(chē)維修工安全知識(shí)考核試題及答案
- 思維導(dǎo)圖的小自考漢語(yǔ)言考試試題及答案
- 2024年汽車(chē)維修工在團(tuán)隊(duì)中的角色與責(zé)任試題及答案
- 校園法治安全教育
- 影響二手車(chē)流通率的因素分析試題及答案
- 2024年教育研究統(tǒng)計(jì)試題答案
- 經(jīng)典藥物作用試題及答案
- 2024年中考英語(yǔ)新熱點(diǎn)時(shí)文閱讀-中華文化(二)
- 《制作葉脈書(shū)簽》教案
- 對(duì)老賴的拘留申請(qǐng)書(shū)
- 1社戲 公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 廣東計(jì)算機(jī)一級(jí)考試試題和答案
- 山東省濟(jì)南市育英中學(xué) 2023-2024學(xué)年下學(xué)期八年級(jí)期中英語(yǔ)試卷
- (高清版)JTGT D81-2017 公路交通安全設(shè)施設(shè)計(jì)細(xì)則
- 2023-2024全國(guó)初中物理競(jìng)賽試題-杠桿(解析版)
- 部編版道德與法治六下《第6課 探訪古代文明》課件
- 鄉(xiāng)鎮(zhèn)安全生產(chǎn)網(wǎng)格員培訓(xùn)
評(píng)論
0/150
提交評(píng)論