




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 采用首次適應算法實現(xiàn)主存的分配和回收一、目的在計算機系統(tǒng)中,為了提高內存區(qū)的利用率,必須給電腦內存區(qū)進行合理的分配。本實驗通過對內存區(qū)分配方法首次適應算法的使用,來了解內存分配的模式。在熟練掌握計算機分區(qū)存儲管理方式的原理的基礎上,編程模擬實現(xiàn)操作系統(tǒng)的可變分區(qū)存儲管理的功能,一方面加深對原理的理解,另一方面提高根據(jù)已有原理通過編程解決實際問題的能力,為進行系統(tǒng)軟件開發(fā)和針對實際問題提出高效的軟件解決方案打下基礎。二、實驗內容與數(shù)據(jù)結構:(1) 可變式分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需要,并且分區(qū)的個數(shù)是可以調整的。當需要裝入一個作業(yè)時,根據(jù)作業(yè)需要的貯存量,查
2、看是否有足夠的空閑空間,若有,則按需求量分割一部分給作業(yè);若無,則作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分割成許多大大小小的分區(qū)。有的分區(qū)被分配作業(yè)占用,有的分區(qū)空閑,例如,某時刻主存空間占用情況如圖所示:為了說明哪些分區(qū)是空閑的,可以用來裝入新作業(yè),必須要有一張空閑區(qū)說明表,如下圖所示。(2) 當有一個新作業(yè)要求裝入貯存時,必須查空閑區(qū)說明表,從中找出一個足夠大的空閑區(qū)。有時找到的空閑區(qū)可能大于作業(yè)的需求量,這時應將空閑區(qū)一分為二。一個分給作業(yè),另一個仍作為空閑區(qū)留在空閑區(qū)表中。為了盡量減少由于分割造成的碎片,盡可能分配地地址部分的空閑區(qū),將較大的空閑區(qū)留在高地址端,以利于大作業(yè)的裝入。
3、為此在空閑區(qū)表中,按空閑區(qū)首地址從低到高進行登記。(3) 當一個作業(yè)執(zhí)行完成時,作業(yè)所占用的分區(qū)應歸還給系統(tǒng)。在歸還時,要考慮相鄰空間區(qū)合并問題。作業(yè)的釋放區(qū)與空閑區(qū)的鄰接分以下4種情況考慮:A、 釋放區(qū)下鄰空閑區(qū);B、 釋放區(qū)上鄰空閑區(qū);C、 釋放區(qū)上下都與空閑區(qū)鄰接;D、 釋放區(qū)上鄰空閑區(qū)不鄰接;一、 實驗要求1. 內存大小初始化2. 可以對內存區(qū)進行動態(tài)分配,采用首次適應算法來實現(xiàn)3. 可以對已分配的內存塊進行回收,并合并相鄰的空閑內存塊。二、 實驗內容把一個作業(yè)裝入內存,按照首次適應算法對內存區(qū)進行分配,作業(yè)結束,回收已分配給該作業(yè)的內存塊,并合并相鄰的空閑內存塊。三、 實驗結果運行效
4、果:1.初始化內存區(qū)大小,并添加作業(yè),選擇1添加作業(yè)2.當作業(yè)大小超過存儲塊大小時,分配失敗。3.選擇3,可查看內存分配情況4. 選擇2回收內存5. 選擇1添加新作業(yè)6. 回收C作業(yè),相鄰的空閑內存塊合并。五、程序流程圖:六、實驗源代碼:/ FirstFit.cpp : 可變分區(qū)用首次適應算法來模擬內存回收#include <STDIO.H>#include <STDLIB.H>int MAX_SEGMENT=10;/最大碎片值struct Partition/分區(qū)表目int Par_Size;/分區(qū)大小int Par_No;/分區(qū)序號或者名字int Addr;/分區(qū)地
5、址int IsUse;/分區(qū)使用情況,0表示空閑,1表示使用Partition *pri;/前向指針Partition *next;/后向指針;Partition * Int()/函數(shù),返回Partition類型指針/初始化空閑分區(qū)表Partition *list,*H,*H1;list=(struct Partition *)malloc(sizeof(struct Partition);list->next=NULL;H=list;if(!list)printf("n錯誤,內存初始化分配失??!程序結束");exit(1);H1=(struct Partition
6、*)malloc(sizeof(struct Partition);printf("請預先輸入分區(qū)總大小(以KB為單位):");scanf("%d",&H1->Par_Size);H1->Addr=0;H1->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 Par
7、tition *)malloc(sizeof(struct Partition);FP->next=NULL;H=FP;for(i=0;i<10;i+)/已分配區(qū)先暫定分配十個表目F=(struct Partition *)malloc(sizeof(struct Partition);if(!F)printf("n錯誤,內存分配失??!程序結束");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;
8、H=H->next;return FP;Partition * New_Process( Partition *list, Partition *FP)/為新的進程分配資源Partition *H,*P,*H1;int Size,Name,L;H=list;H1=FP->next;H=H->next;printf("請輸入新作業(yè)的名稱和大小(整數(shù)):");scanf("%d %d",&Name,&Size);while(H)if(!H)/表目已查完,無法分配printf("n已無空閑分區(qū),本次無法分配!&quo
9、t;);return list;elseif(H->IsUse=0)/空表目/if(H->Par_Size>=Size)/大小滿足,空閑分區(qū)大小要分配的大小if(H->Par_Size>=Size)/大小滿足,bool temp=false;if(H->Par_Size-Size)<=MAX_SEGMENT)/空閑分區(qū)大小-要分配的大小<碎片值,會產(chǎn)生碎片,將整塊內存大小分配出去,Size=H->Par_Size;/分配的大小為整塊內存temp=true;/會產(chǎn)生碎片/其他情況就分配大小為請求大小,不會產(chǎn)生碎片,L=H->Addr;/
10、保存空閑分地址if(temp)printf("該次內存分配會產(chǎn)生碎片,將整塊內存大小%d分配出去!",Size);elseprintf("該次內存分配不會產(chǎn)生碎片");break; H=H->next;/否則,繼續(xù)往下查找if(H)if(H->Par_Size>Size)/大小滿足,空閑分區(qū)大小要分配的大小P=(struct Partition *)malloc(sizeof(struct Partition);/分配新的表目,處理一條數(shù)據(jù),分配一次內存P->IsUse=1;P->Addr=L;/指向空閑分區(qū)地址P->
11、next=H;/修改指針H->pri->next=P;P->pri=H->pri;H->pri=P;P->Par_Size=Size;/分配大小為要請求分配的大小P->Par_No=Name;/名稱H->Par_Size-=Size;/修改空閑分區(qū),H所指區(qū)塊大小減SizeH->Addr+=Size;/H所指區(qū)塊地址加SizeelseH->IsUse=1;/大小相等的,把當前表項設置空表目while(H1)if(H1->IsUse=0)H1->Par_No=Name;H1->Par_Size=Size;H1->
12、Addr=L;/保存已分配地址H1->IsUse=1;/在已分配表中設置為已分配break;H1=H1->next;elseprintf("所申請資源已大過系統(tǒng)所擁有的,請重新輸入!n");return list;Partition *Reclaim( Partition *list, Partition *FP)/結束作業(yè),資源回收,No為作業(yè)名,回收內存 Partition * H1,*H2,*H3,*HF;/H1為釋放區(qū),H2為后分區(qū),H3為前分區(qū)int No;/作業(yè)名H1=list;HF=FP;/可有可無?H1=H1->next;HF=FP->
13、;next;printf("請輸入您想結束的作業(yè)名:");scanf("%D",&No);while(HF)/對已分配表進行操作if(HF->Par_No=No)HF->IsUse=0;/標志為空表目break;/這時保存著HF所指分區(qū)的信息HF=HF->next;if(!HF)/如果找不到該作業(yè),則提示出錯printf("所輸入的作業(yè)名稱不正確,請重新輸入!");elsewhile(H1)/對空閑表進行操作if(H1->Par_No=No)H1->IsUse=0;/標志為空表目printf(&q
14、uot;內存回收成功");break;H1=H1->next;H2=H1->next;/后分區(qū)H3=H1->pri;/前分區(qū)if(H2&&H2->IsUse=0)/后接分區(qū)為空閑if(H2->next=NULL)/判斷后接分區(qū)是否為尾結點H1->Par_Size+=H2->Par_Size;/把H2合并到H1H1->next=NULL;free(H2);printf("已回收%d大小內存",H1->Par_Size);else/后分區(qū)不為空閑,表示已經(jīng)被使用H1->Par_Size+=H2
15、->Par_Size;H1->next=H2->next;H2->next->pri=H1;free(H2);printf("已回收%d大小內存",H1->Par_Size);if(H3&&H3->IsUse=0)/前分區(qū)為空閑分區(qū),則合并去前分區(qū)H3->Par_Size+=H1->Par_Size;H3->next=H1->next;if(H1->next!=NULL)/若H1為尾結點H1->next->pri=H3;free(H1);printf("已回收%d大
16、小內存",H1->Par_Size);return list;void Print( Partition *list, Partition *FP)/輸出已分配分區(qū)和空閑分區(qū) Partition *H1,*H2;H1=list->next;H2=FP;H2=H2->next;printf("*已分配分區(qū)表*n");printf("分區(qū)序號大小始址 狀態(tài)n");while(H2)printf("%d%d%d",H2->Par_No,H2->Par_Size,H2->Addr);if(H2-&
17、gt;IsUse=1)printf("已分配n");elseprintf("空表目n");H2=H2->next;printf("*n");printf("*總的空閑分區(qū)表*n");printf("分區(qū)序號大小始址 狀態(tài)n");while(H1)printf("%d%d%d",H1->Par_No,H1->Par_Size,H1->Addr);if(H1->IsUse=1)printf("已分配n");elseprintf(&
18、quot;空表目n");H1=H1->next;printf("*n");void Main_Print( Partition *list, Partition *FP)/主入口函數(shù),進行菜單選擇int op;while(1)printf("n主菜單n");printf("1.申請新的作業(yè),分配內存n");printf("2.結束作業(yè),回收內存n");printf("3.查看內存表n");printf("4.退出系統(tǒng)n");printf("n請選擇:");scanf("%d",&op);switch(op)/根據(jù)輸入,選擇分支方向case 1: New_Process(list,FP);break;case 2: Reclaim(list,FP);break;case 3:Print(list,FP);break;case 4:break
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校介護實訓室設備采購 投標方案(技術方案)
- 體育館土石方運輸平整協(xié)議
- 醫(yī)療器械操作規(guī)范與標準作業(yè)指導書
- 環(huán)保理念與低碳生活實踐方法作業(yè)指導書
- 三農人才培養(yǎng)及實施方案指導書
- 新能源汽車充電紅燈
- 新能源汽車充電樁難題
- 品牌管理與推廣操作手冊
- 商家自行配送怎么查物流
- 施工建筑設計說明
- 《森林資源資產(chǎn)評估》課件-森林資源經(jīng)營
- 2025年中考語文復習課件 模塊三 語言綜合運用
- 2024年中國高軟化點瀝青市場調查研究報告
- 護士5年職業(yè)生涯規(guī)劃
- DB32T 3549-2019 醫(yī)療衛(wèi)生機構醫(yī)療廢物暫時貯存設施設備設置規(guī)范
- 深圳退休人員勞務合同模板
- 江西省發(fā)展改革委委屬事業(yè)單位招聘工作人員筆試真題2023
- 《無人機飛行操控技術(微課版)》試題及答案題庫07 無人機地面站飛行操控
- 國家開放大學《實 用管理基礎》形考任務1-4參考答案
- 9 漂浮的船 說課稿-2023-2024學年科學六年級下冊冀人版
- 2024-2030年中國高爾夫行業(yè)運作模式及投資規(guī)劃分析報告
評論
0/150
提交評論