版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、淮北師范大學(xué)程序設(shè)計(jì)課程設(shè)計(jì)動(dòng)態(tài)分區(qū)分配存儲(chǔ)管理系統(tǒng)學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè)學(xué) 號 學(xué) 生 姓 名指導(dǎo)教師姓名2012年3月 15 日一、設(shè)計(jì)目的與內(nèi)容用高級語言編寫和調(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)算法1. 內(nèi)存中有0-100M 的空間為用戶程序空間,最開始用戶空間是空閑的。2. 作業(yè)數(shù)量、作業(yè)大小、進(jìn)入內(nèi)存時(shí)間、運(yùn)行時(shí)間需要通過界面進(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í)間,采用簡單的先進(jìn)先出原則進(jìn)行從外存到內(nèi)存的調(diào)度,作業(yè)
2、具有等待(從外存進(jìn)入內(nèi)存執(zhí)行)、裝入(在內(nèi)存可執(zhí)行)、結(jié)束(運(yùn)行結(jié)束,退出內(nèi)存)三種狀態(tài)。5. 能夠自動(dòng)進(jìn)行內(nèi)存分配與回收,可根據(jù)需要自動(dòng)進(jìn)行緊湊與拼接操作。二、算法的基本思想1、定義基本結(jié)構(gòu):1作業(yè)結(jié)構(gòu):typedef struct JOBint num; /作業(yè)號int size; /作業(yè)大小int ctime; /作業(yè)進(jìn)入時(shí)間int rtime; /作業(yè)運(yùn)行時(shí)間int state; /作業(yè)狀態(tài)Job;2)分區(qū)結(jié)構(gòu):typedef struct DuLNodeint ID; /分區(qū)號int start; /開始地址int size; /大小int state; /0=尚未使用 1=使用 2
3、=釋放struct DuLNode *prior;/前驅(qū)指針struct DuLNode *next; /后即指針DuLNode, * DuLinkList;2、基本操作:int Firstfit(int);/首次適應(yīng)算法int Next_fit(int); /循環(huán)首次適應(yīng)算法void showJob(int); /顯示作業(yè)表void showPartiton(DuLinkList);/顯示分區(qū)表DuLinkList InitpartitionList(DuLinkList &p);/初始化void huishou(DuLinkList pl3,DuLinkList &pl);
4、/回收函數(shù)int Putin(int &n);/輸入函數(shù),輸入作業(yè)相關(guān)信息3、首次適應(yīng)算法空閑分區(qū)鏈以地址遞增的次序鏈接,分配內(nèi)存時(shí),從鏈?zhǔn)组_始順序查找,直至找到一個(gè)大小能滿足要求的空閑分區(qū)為止;然后再按照作業(yè)的大小,從該分區(qū)中劃出一塊內(nèi)存空間分配給請求者,取消的空閑分區(qū)仍留在空閑鏈中。若從鏈?zhǔn)字敝伶溛捕疾荒苷业揭粋€(gè)能滿足要求的分區(qū),則此次內(nèi)存分配失敗,返回。4、循環(huán)首次適應(yīng)算法在為進(jìn)程分配內(nèi)存空間時(shí),不再是每次都從鏈?zhǔn)组_始查找,而是從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開始查找,直至找到一個(gè)能滿足要求的空閑分區(qū),從中劃出一塊與請求大小相等的內(nèi)存空間分配給作業(yè)。三、主要功能模塊流程圖主函
5、數(shù):首次適應(yīng)算法: 循環(huán)首次適應(yīng)算法四、系統(tǒng)測試程序運(yùn)行實(shí)例如下:1、輸入界面,按要求輸入:2、選擇算法及分區(qū)首地址:3、運(yùn)行結(jié)束后顯示,并繼續(xù)選擇:4、退出:五、結(jié)論作業(yè)采用數(shù)組形式進(jìn)行存儲(chǔ),起初想用數(shù)組模擬分區(qū),但劃分記錄比較不易,時(shí)間空間復(fù)雜度較大,容易混亂,遂決定用鏈表形式模擬分區(qū)情況。基本能運(yùn)行符合要求,能模擬出動(dòng)態(tài)分區(qū)過程及最終結(jié)果。六、源程序及系統(tǒng)文件使用說明#include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <windows.h>#define Fr
6、ee 0#define Use 1#define MAX_length 100 /最大內(nèi)存空間為100MB/-作業(yè)結(jié)構(gòu)體數(shù)組-typedef struct JOBint num; /作業(yè)號 int size; /作業(yè)大小 int ctime; /作業(yè)進(jìn)入時(shí)間 int rtime; /作業(yè)運(yùn)行時(shí)間 int state; /作業(yè)狀態(tài)Job;typedef struct DuLNodeint ID; /分區(qū)號int start; /開始地址 int size; /大小 int state; /0=尚未使用 1=使用 2=釋放 struct DuLNode *prior;/前驅(qū)指針 struct Du
7、LNode *next; /后即指針DuLNode, * DuLinkList;/-int Firstfit(int);/首次適應(yīng)算法int Next_fit(int); /循環(huán)首次適應(yīng)算法void showJob(int); /顯示作業(yè)表void showPartiton(DuLinkList);/顯示分區(qū)表/-/-全局變量-int f;Job *A; /排序前Job *a; /排序后Job *temp;/-功能函數(shù)- void delay()/- /-初始化- DuLinkList InitpartitionList(DuLinkList &p)p=(DuLinkList)mall
8、oc(sizeof(DuLNode);/申請空間 if(!p) exit(0); p->size=100; /初始化大小 printf("輸入分區(qū)首地址:"); scanf("%d",&p->start); p->state=0; /狀態(tài)置空閑 p->ID=0; /分區(qū)號 p->next=NULL; p->prior=NULL; for(int x = 10000;x>0;x-) for(int y = 1000;y>0;y-);return p;/-/-輸入函數(shù)- int Putin(int &a
9、mp;n)int i; Job temp; printf("請輸入任務(wù)數(shù)目:"); scanf("%d",&n); a=(Job*)malloc(n*sizeof(Job); A=(Job*)malloc(n*sizeof(Job); for(i=0;i<n;i+) printf("n"); printf("信息輸入:nn"); printf("作業(yè)號:"); scanf("%d",&ai.num); printf("作業(yè)大小:");
10、 scanf("%d",&ai.size); printf("作業(yè)進(jìn)入時(shí)間:"); scanf("%d",&ai.ctime); printf("作業(yè)運(yùn)行時(shí)間:"); scanf("%d",&ai.rtime); ai.state=0; /默認(rèn)狀態(tài)為Free Ai = ai; for(int j = 0;j < n;j+) for(i = j;i< n;i+) if(aj.ctime > ai.ctime) temp = aj; aj = ai; ai
11、= temp; /冒泡排序 freopen("data.txt","w",stdout); for (i = 0;i < n;i+) printf("%d %d %d %dn",ai.num,ai.size,ai.ctime,ai.rtime); fclose(stdout); freopen("CON","w",stdout); printf("保存成功nn"); return 1;/- /-讀文件- int order(int &n)Job temp; pr
12、intf("Input the number of the task:n"); scanf("%d",&n); a=(Job*)malloc(n*sizeof(Job); freopen("data.txt","r",stdin); for(int i=0;i<n;i+) scanf("%d",&ai.num); scanf("%d",&ai.size); scanf("%d",&ai.ctime); scanf(&q
13、uot;%d",&ai.rtime); fclose(stdin); freopen("CON","r",stdin); for(int j = 0;j < n;j+) for(i = j;i< n;i+) if(aj.ctime > ai.ctime) temp = aj; aj = ai; ai = temp;return 1;/- /-顯示分區(qū)- void showPartition(DuLinkList pl)printf("nttt分區(qū)表n"); printf("t-n"
14、;); printf("t 開始地址t分區(qū)號t大小 狀態(tài) n"); printf("t-n"); while(pl) printf("t %dtt%dt%dt",pl->start,pl->ID,pl->size); if(pl->state = 0) printf("空閑 n"); if(pl->state = 1) printf("已分配 n"); pl=pl->next; printf("t-n");/-/-回收函數(shù)- void hu
15、ishou(DuLinkList pl3,DuLinkList &pl)while(pl3)if(pl3->state=0)if(pl3->next&&pl3->prior&&pl3->prior->state=0&&pl3->next->state=1) pl3->size+=pl3->prior->size; pl3->start=pl3->prior->start; pl3->state=0; pl3->ID=0; if(pl3->pri
16、or->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&&pl3->next&&pl3->next->state=0&&pl3->prior->state=1) else if(!pl3->prior) if(pl3->
17、next->state=0) pl3->size+=pl3->next->size; pl3->state=0; pl3->ID=0; if(pl3->next->next) else pl3->next->next->prior=pl3; pl3->next=pl3->next->next; pl3->size+=pl3->next->size; pl3->state=0; pl3->ID=0; if(pl3->next->next) pl3->next->
18、;next->prior=pl3; else pl3->next=pl3->next->next; pl3->next=pl3->next->next; pl3->state=0; else if(!pl3->next) if(pl3->prior->state=0) pl3->size+=pl3->prior->size; pl3->state=0; pl3->ID=0; pl3->start=pl->start; if(pl3->prior->prior) pl3->
19、;prior->prior->next=pl3; pl3->prior=pl3->prior->prior; else pl3->state=0; else pl3->prior=NULL; pl=pl3; pl3=pl; else if(pl3->next&&pl3->prior&&pl3->next->state=0&&pl3->prior->state=0) pl3->size=pl3->size+pl3->next->size+pl3-&
20、gt;prior->size; pl3->state=0; pl3->ID=0; pl3->start=pl3->prior->start; 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; else pl
21、3->next=pl3->next->next; pl3->prior=pl3->prior->prior; pl=pl3; pl3=pl; pl3=pl3->next; /- /-首次適應(yīng)算法- void Firstfit(DuLinkList block_first,int n)int t=1; int num=n; while(t&&num) for(int m=0;m<n;m+) if(t=am.ctime+am.rtime) num-=1; am.state=2; while(q) if(q->ID=am.num)
22、 q->state=Free; q=q->next; DuLinkList pl1=block_first,pl2,pl3=block_first; printf("時(shí)鐘:%dn",t); DuLNode *p=block_first; DuLNode *q=block_first; showJob(n); showPartition(block_first); for( m=0;m<n;m+) if(am.ctime=t) am.state=1; printf("作業(yè):%d開始運(yùn)行,對其分配!",am.num); for( m=0;m
23、<n;m+) if(t=am.ctime) while(pl1&&(pl1->state = 1|pl1->size<am.size) pl1=pl1->next; if(pl1) pl2=(DuLinkList)malloc(sizeof(DuLNode); pl2->start=pl1->start+am.size; pl2->state=0; pl2->ID=0; pl2->size=pl1->size-am.size; if(pl2->size>5) else pl1->state=1;
24、 pl1->ID=am.num; pl1->size=am.size; pl1->state=1; pl1->ID=am.num; if(pl1->next) pl1->next->prior=pl2; pl2->next=pl1->next; pl2->prior=pl1; pl1->next=pl2; pl1=block_first; showJob(n); showPartition(block_first); else cout<<"內(nèi)存不足,等待釋放"<<endl; for(
25、int i=m;i<n;i+) ai.ctime+=1; p=block_first; huishou(p, block_first); t+=1;/- /-顯示作業(yè)-void showJob(int n)printf("nttt作業(yè)表:n");printf("t-n"); printf("t 作業(yè)號t大小t進(jìn)入時(shí)間t運(yùn)行時(shí)間t狀態(tài) n"); printf("t-n"); for(int m=0;m<n;m+) printf("t %dt %dt%dt %dt",am.num,am.
26、size,am.ctime,am.rtime); if(am.state = 0) printf(" 等待 n"); if(am.state = 1) printf(" 裝入 n"); if(am.state = 2) printf(" 結(jié)束 n"); printf("t-n");/-/- 循 環(huán) 首 次 適 應(yīng) 算 法 - void Nextfit(DuLinkList block_first,int n)int t=1; int num=n; DuLinkList flag; flag=block_first;
27、 while(t&&num) DuLinkList pl1=block_first,pl2,pl3=block_first; printf("時(shí)鐘:%dn",t); DuLNode *p=block_first; DuLNode *q=block_first; for(int m=0;m<n;m+) if(t=am.ctime+am.rtime) num-=1; am.state=2; while(q) if(q->ID=am.num) q->state=Free; q=q->next; showJob(n); showPartiti
28、on(block_first);for( m=0;m<n;m+) for( m=0;m<n;m+) if(t=am.ctime) while(flag&&(flag->state = 1|flag->size<am.size) flag=flag->next; pl1=flag; if(pl1) else pl2=(DuLinkList)malloc(sizeof(DuLNode); pl2->start=pl1->start+am.size; pl2->state=0; pl2->ID=0; pl2->size
29、=pl1->size-am.size; if(pl2->size>5) else flag=pl2; showJob(n); showPartition(block_first); pl1->state=1; pl1->ID=am.num; pl1->size=am.size; pl1->state=1; pl1->ID=am.num; if(pl1->next) pl1->next->prior=pl2; pl2->next=pl1->next; pl2->prior=pl1; pl1->next=pl2; pl1=block_first; i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ABPLC在工業(yè)4.0中的關(guān)鍵作用:2024年深度培訓(xùn)教程
- 化學(xué)品生產(chǎn)單位特殊作業(yè)安全規(guī)范知識(shí)競賽試題
- 辦公室管理藝術(shù):2024年5S培訓(xùn)課件
- A特種設(shè)備相關(guān)管理(A6客運(yùn)索道)考試題庫及答案
- 委托加工承攬協(xié)議(眼鏡框)
- 2022年寧波財(cái)經(jīng)學(xué)院數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)專業(yè)《數(shù)據(jù)庫系統(tǒng)原理》科目期末試卷A(有答案)
- 工程資料檔案管理制度
- 如何做好護(hù)理查房解讀
- 干細(xì)胞的應(yīng)用價(jià)值
- 2海濱小城9年城市安全風(fēng)險(xiǎn)評估與管理
- 職工宿舍安全培訓(xùn)
- 華南理工大學(xué)《微積分Ⅰ(二)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024-2030年配電自動(dòng)化行業(yè)市場發(fā)展現(xiàn)狀分析及競爭格局與投資價(jià)值研究報(bào)告
- 山東省青島市李滄區(qū)2024-2025學(xué)年上學(xué)期八年級 期中英語試卷
- 工程項(xiàng)目承攬建設(shè)股權(quán)合作協(xié)議(居間協(xié)議)
- 2024年四川省綿陽市中考數(shù)學(xué)試題(無答案)
- 新教材人教版五年級上冊《用字母表示數(shù)》(課堂PPT)
- 彎臂車床夾具設(shè)計(jì)說明書
- 企業(yè)員工健康管理存在的問題與解決途徑探討
- 高中班務(wù)日志表格(超級實(shí)用)
- 乳糜瀉:診斷與治療指南
評論
0/150
提交評論