




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、程序流程圖:二、實(shí)驗(yàn)源代碼:#include <STDIO.H>#include <STDLIB.H>int MAX_SEGMENT=10;/最大碎片值struct Partition/分區(qū)表目int Par_Size;/分區(qū)大小int Par_No;/分區(qū)序號(hào)或者名字int Addr;/分區(qū)地址int IsUse;/分區(qū)使用情況,0表示空閑,1表示使用Partition *pri;/前向指針Partition *next;/后向指針;Partition * Int()/函數(shù),返回Partition類型指針/初始化空閑分區(qū)表Partition *list,*H,*H
2、1;list=(struct Partition *)malloc(sizeof(struct Partition);list->next=NULL;H=list;if(!list)printf("n錯(cuò)誤,內(nèi)存初始化分配失敗!程序結(jié)束");exit(1);H1=(struct Partition *)malloc(sizeof(struct Partition);printf("請(qǐng)預(yù)先輸入分區(qū)總大小(以KB為單位):");scanf("%d",&H1->Par_Size);H1->Addr=0;H1->
3、Par_No=0;H1->IsUse=0;H1->pri=H;H1->next=NULL;H->next=H1;/list->H1return list;Partition * InitFP()/初始化已分配分區(qū)表Partition *FP,*F,*H;int i;FP=(struct Partition *)malloc(sizeof(struct Partition);FP->next=NULL;H=FP;for(i=0;i<10;i+)/已分配區(qū)先暫定分配十個(gè)表目F=(struct Partition *)malloc(sizeof(struct
4、 Partition);if(!F)printf("n錯(cuò)誤,內(nèi)存分配失敗!程序結(jié)束");exit(1);F->Par_Size=0;F->Addr=0;F->Par_No=0;F->IsUse=0;F->next=NULL;H->next=F;F->pri=H;H=H->next;return FP;Partition * New_Process( Partition *list, Partition *FP)/為新的進(jìn)程分配資源Partition *H,*P,*H1;int Size,Name,L;H=list;H1=FP-
5、>next;H=H->next;printf("請(qǐng)輸入新作業(yè)的名稱和大小(整數(shù)):");scanf("%d %d",&Name,&Size);while(H)if(!H)/表目已查完,無法分配printf("n已無空閑分區(qū),本次無法分配!");return list;elseif(H->IsUse=0)/空表目/if(H->Par_Size>=Size)/大小滿足,空閑分區(qū)大小要分配的大小if(H->Par_Size>=Size)/大小滿足,bool temp=false;if
6、(H->Par_Size-Size)<=MAX_SEGMENT)/空閑分區(qū)大小-要分配的大小<碎片值,會(huì)產(chǎn)生碎片,將整塊內(nèi)存大小分配出去,Size=H->Par_Size;/分配的大小為整塊內(nèi)存temp=true;/會(huì)產(chǎn)生碎片/其他情況就分配大小為請(qǐng)求大小,不會(huì)產(chǎn)生碎片,L=H->Addr;/保存空閑分地址if(temp)printf("該次內(nèi)存分配會(huì)產(chǎn)生碎片,將整塊內(nèi)存大小%d分配出去!",Size);elseprintf("該次內(nèi)存分配不會(huì)產(chǎn)生碎片");break; H=H->next;/否則,繼續(xù)往下查找if(H
7、)if(H->Par_Size>Size)/大小滿足,空閑分區(qū)大小要分配的大小P=(struct Partition *)malloc(sizeof(struct Partition);/分配新的表目,處理一條數(shù)據(jù),分配一次內(nèi)存P->IsUse=1;P->Addr=L;/指向空閑分區(qū)地址P->next=H;/修改指針H->pri->next=P;P->pri=H->pri;H->pri=P;P->Par_Size=Size;/分配大小為要請(qǐng)求分配的大小P->Par_No=Name;/名稱H->Par_Size-=Si
8、ze;/修改空閑分區(qū),H所指區(qū)塊大小減SizeH->Addr+=Size;/H所指區(qū)塊地址加SizeelseH->IsUse=1;/大小相等的,把當(dāng)前表項(xiàng)設(shè)置空表目while(H1)if(H1->IsUse=0)H1->Par_No=Name;H1->Par_Size=Size;H1->Addr=L;/保存已分配地址H1->IsUse=1;/在已分配表中設(shè)置為已分配break;H1=H1->next;elseprintf("所申請(qǐng)資源已大過系統(tǒng)所擁有的,請(qǐng)重新輸入!n");return list;Partition *Recl
9、aim( Partition *list, Partition *FP)/結(jié)束作業(yè),資源回收,No為作業(yè)名,回收內(nèi)存 Partition * H1,*H2,*H3,*HF;/H1為釋放區(qū),H2為后分區(qū),H3為前分區(qū)int No;/作業(yè)名H1=list;HF=FP;/可有可無?H1=H1->next;HF=FP->next;printf("請(qǐng)輸入您想結(jié)束的作業(yè)名:");scanf("%D",&No);while(HF)/對(duì)已分配表進(jìn)行操作if(HF->Par_No=No)HF->IsUse=0;/標(biāo)志為空表目break;/這
10、時(shí)保存著HF所指分區(qū)的信息HF=HF->next;if(!HF)/如果找不到該作業(yè),則提示出錯(cuò)printf("所輸入的作業(yè)名稱不正確,請(qǐng)重新輸入!");elsewhile(H1)/對(duì)空閑表進(jìn)行操作if(H1->Par_No=No)H1->IsUse=0;/標(biāo)志為空表目printf("內(nèi)存回收成功");break;H1=H1->next;H2=H1->next;/后分區(qū)H3=H1->pri;/前分區(qū)if(H2&&H2->IsUse=0)/后接分區(qū)為空閑if(H2->next=NULL)/判斷后
11、接分區(qū)是否為尾結(jié)點(diǎn)H1->Par_Size+=H2->Par_Size;/把H2合并到H1H1->next=NULL;free(H2);printf("已回收%d大小內(nèi)存",H1->Par_Size);else/后分區(qū)不為空閑,表示已經(jīng)被使用H1->Par_Size+=H2->Par_Size;H1->next=H2->next;H2->next->pri=H1;free(H2);printf("已回收%d大小內(nèi)存",H1->Par_Size);if(H3&&H3->
12、IsUse=0)/前分區(qū)為空閑分區(qū),則合并去前分區(qū)H3->Par_Size+=H1->Par_Size;H3->next=H1->next;if(H1->next!=NULL)/若H1為尾結(jié)點(diǎn)H1->next->pri=H3;free(H1);printf("已回收%d大小內(nèi)存",H1->Par_Size);return list;void Print( Partition *list, Partition *FP)/輸出已分配分區(qū)和空閑分區(qū) Partition *H1,*H2;H1=list->next;H2=FP;H
13、2=H2->next;printf("*已分配分區(qū)表*n");printf("分區(qū)序號(hào)大小始址 狀態(tài)n");while(H2)printf("%d%d%d",H2->Par_No,H2->Par_Size,H2->Addr);if(H2->IsUse=1)printf("已分配n");elseprintf("空表目n");H2=H2->next;printf("*n");printf("*總的空閑分區(qū)表*n");prin
14、tf("分區(qū)序號(hào)大小始址 狀態(tài)n");while(H1)printf("%d%d%d",H1->Par_No,H1->Par_Size,H1->Addr);if(H1->IsUse=1)printf("已分配n");elseprintf("空表目n");H1=H1->next;printf("*n");void Main_Print( Partition *list, Partition *FP)/主入口函數(shù),進(jìn)行菜單選擇int op;while(1)printf("n主菜單n");printf("1.申請(qǐng)新的作業(yè),分配內(nèi)存n");printf("2.結(jié)束作業(yè),回收內(nèi)存n");printf("3.查看內(nèi)存表n");printf("4.退出系統(tǒng)n");printf("n請(qǐng)選擇:");scanf("%d",&op);switch(op)/根據(jù)輸入,選擇分支方向case 1: New_Process(list,FP);break;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)蒙古醫(yī)科大學(xué)《普通微生物學(xué)實(shí)驗(yàn)(1)》2023-2024學(xué)年第二學(xué)期期末試卷
- 渭南師范學(xué)院《影視色彩》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京信息工程大學(xué)《日語學(xué)術(shù)寫作與研究方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 西華大學(xué)《曲式與作品分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 麗水學(xué)院《計(jì)算機(jī)控制技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西省臨汾市堯都區(qū)興國實(shí)驗(yàn)校2024-2025學(xué)年初三接軌考試生物試題文試題含解析
- 校考卷2025屆數(shù)學(xué)三下期末監(jiān)測(cè)試題含解析
- 威海職業(yè)學(xué)院《工程流體力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 建筑公司雇傭勞動(dòng)合同書范例
- 私車公用協(xié)議書范例二零二五年
- 建筑電氣隱蔽工程驗(yàn)收記錄案例
- (完整版)高清米字格(A4打印版)
- 八年級(jí)國家義務(wù)教育質(zhì)量監(jiān)測(cè)德育考核試題
- 知識(shí)創(chuàng)新與學(xué)術(shù)規(guī)范中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 苦地丁中生物堿成分研究
- 八年級(jí)物理下冊(cè)《實(shí)驗(yàn)題》專項(xiàng)練習(xí)題及答案(人教版)
- 急診科品管圈主題擬定課件
- 第八講 發(fā)展全過程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 職業(yè)教育新型活頁式、工作手冊(cè)式、融媒體教材系統(tǒng)設(shè)計(jì)與開發(fā)指南
- 中國急性早幼粒細(xì)胞白血病診療指南
- 《向上管理 與你的領(lǐng)導(dǎo)相互成就》讀書筆記
評(píng)論
0/150
提交評(píng)論