版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)習(xí)二 主存空間的分配和回收一、實(shí)習(xí)內(nèi)容模擬主存空閑空間的表示方法,以及模擬實(shí)現(xiàn)主存空間的分配和回收。二、實(shí)習(xí)目的通過本實(shí)習(xí)幫助理解在不同的存儲管理方式下應(yīng)怎樣進(jìn)行存儲空間的分配和回收。三、實(shí)習(xí)題目在可變分區(qū)管理方式下采用首次適應(yīng)算法實(shí)現(xiàn)主存分配和回收。假定內(nèi)存大小為128K。空閑區(qū)說明表格式為:起始地址指出空閑區(qū)的起始地址;長度一個連續(xù)空閑區(qū)的長度;狀態(tài)有兩種狀態(tài),一種是“未分配”狀態(tài),另一種是“空表目”狀態(tài)。本實(shí)習(xí)我用FBT實(shí)現(xiàn),并且采用首次適應(yīng)算法FF分配內(nèi)存。四、程序中所使用的符號說明和數(shù)據(jù)結(jié)構(gòu)struct FBT自由塊表結(jié)構(gòu)體int startdress;自由塊表中一個表項(xiàng)的始地址i
2、nt size;自由塊表中的一個表項(xiàng)的大小int processid;這個表項(xiàng)所對應(yīng)的進(jìn)程號int state;這個表項(xiàng)的狀態(tài)struct FBT *next;指向下一個自由塊表結(jié)構(gòu)體;struct FBT *create() 建立自由塊表子函數(shù)struct FBT *distribute(struct FBT *head)分配內(nèi)存空間子函數(shù)struct FBT *callback(struct FBT *head)回收內(nèi)存空間子函數(shù)回收內(nèi)存有下列4種情況,在程序中用條件語句實(shí)現(xiàn):進(jìn)程i回收區(qū)進(jìn)程j空閑區(qū)回收區(qū)進(jìn)程j進(jìn)程i回收區(qū)空閑區(qū)空閑區(qū)回收區(qū)空閑區(qū)void print(struct FBT
3、 *head)顯示自由塊表內(nèi)容子函數(shù)void main()主函數(shù)五、流程圖鏈表初始化流程圖顯示FBT流程圖分配內(nèi)存子函數(shù)流程圖回收內(nèi)存子函數(shù)流程圖六、程序清單#include <stdio.h>#include<malloc.h>struct FBTint startdress;/分區(qū)首地址int size;/分區(qū)所占內(nèi)存大小int processid;/所申請內(nèi)存分區(qū)的進(jìn)程號,本來FBT中沒有這一項(xiàng),但是便于內(nèi)存的回收我加了這一項(xiàng)int state;/此分區(qū)的狀態(tài)struct FBT *next;/指針,指向下一個結(jié)點(diǎn)(分區(qū));struct FBT *create()
4、/建立自由塊表struct FBT *head,*p,*q;head=NULL;p=(struct FBT *)malloc (sizeof(struct FBT);/申請一個新的結(jié)點(diǎn),用來存放新的分區(qū)q=(struct FBT *)malloc (sizeof(struct FBT);/申請一個新的結(jié)點(diǎn),用來存放新的分區(qū)head=p;p->size =5;/系統(tǒng)分區(qū),大小為5p->processid =-1;/1表示操作系統(tǒng)的固定分區(qū)p->startdress =0;/開始地址為0p->state =1;/狀態(tài)為已分配,值為1p->next =q;/指向下一個結(jié)
5、點(diǎn)q->size=123;/余下的分區(qū)大小為123q->processid=0;/所對應(yīng)的進(jìn)程號為0,表示都未分配q->startdress=5;/開始地址為5q->state=0;/狀態(tài)為未分配,值為0q->next=NULL;/指向下一個分區(qū),因?yàn)橹挥袃蓚€分區(qū),所以為空return head;struct FBT *distribute(struct FBT *head)/分配內(nèi)存子函數(shù)int id,neededsize;struct FBT *pretail,*tail,*p;printf("please input the process id:
6、");/輸入要申請內(nèi)存的進(jìn)程號scanf("%d",&id);printf("please input the needed size:");/輸入要申請的內(nèi)存大小scanf("%d",&neededsize);pretail=tail=head;while (tail!=NULL)if(tail->state =0&&tail->size >=neededsize)/如果此分區(qū)沒有分配,而且大小大于等于申請的內(nèi)存大小if(tail->size >neededsi
7、ze)/如果此分區(qū)大小大于要申請的大小,分配,并把余下的再分割成一個分區(qū)p=(struct FBT *)malloc (sizeof(struct FBT);p->size =neededsize;p->processid =id;p->startdress =tail->startdress ;p->state =1;if(head!=tail)pretail->next =p;p->next =tail;pretail=p;else p->next =tail;head=p;tail->next =NULL;tail->start
8、dress =p->startdress+p->size ;tail->size =tail->size -neededsize;break;if(tail->size =neededsize)/如果此分區(qū)等于要申請的大小,直接分配即可tail->processid =id;tail->state =1;break; else/否則,指向下一個結(jié)點(diǎn)繼續(xù)判斷pretail=tail;tail=tail->next ;if(tail=NULL)/如果遍歷完鏈表都沒有找到合適的分區(qū)分配,則顯示以下信息printf("nSorry,there
9、is not enough memory!n");return head;/返回頭指針struct FBT *callback(struct FBT *head)/回收內(nèi)存子函數(shù)int id;struct FBT *pretail,*tail;printf("please input the process's id:");scanf("%d",&id);pretail=tail=head;while(tail!=NULL)/遍歷鏈表if(tail->processid =id)/如果改分區(qū)所對應(yīng)的進(jìn)程號為要收回分區(qū)的進(jìn)程
10、號,則做以下動作if(tail->next !=NULL)/如果改分區(qū)不是最后一個分區(qū),則做以下動作if(pretail->state =1&&tail->next->state =1 )/前一個分區(qū)是已分配的且后一個分區(qū)也是已分配的tail->state =0;break;if(pretail->state =0&&tail->next->state =1 )/前一個分區(qū)是未分配的且后一個分區(qū)是已分配的pretail->next =tail->next;pretail->size =tail-&
11、gt;size +pretail->size ;free(tail);break;if(pretail->state =1&&tail->next->state =0 )/前一個分區(qū)是已分配的且后一個分區(qū)是未分配的if(pretail!=tail)pretail->next =tail->next ;tail->next ->size =tail->next ->size +tail->size;tail->next ->startdress =tail->startdress ;free(ta
12、il);break;else head=tail->next ;tail->next->startdress =0;tail->next->size +=tail->size;break;if(pretail->state =0&&tail->next->state =0 )/前一個分區(qū)和后一個分區(qū)都是未分配的pretail->next =tail->next->next ;pretail->size =pretail->size +tail->size +tail->next -&
13、gt;size ;free(tail->next);free(tail);break;else/如果改分區(qū)是最后一個分區(qū)則做以下動作if(pretail->state =1)/如果前一個分區(qū)是已分配的tail->state =0;break;else/如果前一個分區(qū)是未分配的pretail->next =NULL;pretail->size=pretail->size +tail->size ;free(tail);break;pretail=tail;tail=tail->next ;/遍歷下一個分區(qū)結(jié)點(diǎn)return head;/返回頭指針vo
14、id print(struct FBT *head)/顯示FBT的內(nèi)容給用戶struct FBT *tail=head;printf("startdresstsizetstatettprocessidtn");tail=head;while(tail!=NULL)if(tail->state=1)printf("%5dtt%5dt%5dtt%5dn",tail->startdress ,tail->size ,tail->state ,tail->processid );elseprintf("%5dtt%5dt%
15、5dn",tail->startdress ,tail->size ,tail->state );tail=tail->next ;void main()/主函數(shù)int choice=1;struct FBT *head;head=create();while(choice!=0)/顯示選擇菜單,供用戶選擇printf("t1.distribute the memoryn");printf("t2.callback the memoryn");printf("t0.exitn");printf("tplease choose:&qu
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度倉儲物流倉儲場地租賃合同6篇
- 二零二五年度技術(shù)開發(fā)合同:人工智能助手定制開發(fā)服務(wù)3篇
- 2025年度LED燈具安裝與節(jié)能效果評估合同3篇
- 二零二五年度展覽館租賃合同交接與展覽服務(wù)標(biāo)準(zhǔn)協(xié)議3篇
- 二零二五年度文化產(chǎn)業(yè)園區(qū)開發(fā)合作協(xié)議3篇
- 二零二五年度人工智能領(lǐng)域股東合作協(xié)議書模板3篇
- 海南職業(yè)技術(shù)學(xué)院《數(shù)控加工力學(xué)和動力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南衛(wèi)生健康職業(yè)學(xué)院《中小學(xué)音樂教學(xué)實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 課程設(shè)計洗瓶器
- 護(hù)理博士課程設(shè)計
- 新疆塔城地區(qū)(2024年-2025年小學(xué)六年級語文)部編版期末考試(下學(xué)期)試卷及答案
- 四人合伙投資協(xié)議書范本
- 反射療法師3級考試題庫(含答案)
- 汽車供應(yīng)商審核培訓(xùn)
- 山東省濟(jì)南市2023-2024學(xué)年高二上學(xué)期期末考試地理試題 附答案
- 期末復(fù)習(xí)試題1(試題)-2024-2025學(xué)年二年級上冊數(shù)學(xué)北師大版
- 1《地球的表面》說課稿-2024-2025學(xué)年科學(xué)五年級上冊教科版
- 汽車以租代購合同完整版完整版
- 音樂制作基礎(chǔ)知識單選題100道及答案解析
- 2024至2030年大型儲油罐項(xiàng)目投資價值分析報告
- GB/T 44764-2024石油、石化和天然氣工業(yè)腐蝕性石油煉制環(huán)境中抗硫化物應(yīng)力開裂的金屬材料
評論
0/150
提交評論