內(nèi)存的分配與回收實(shí)驗(yàn)報(bào)告_第1頁
內(nèi)存的分配與回收實(shí)驗(yàn)報(bào)告_第2頁
內(nèi)存的分配與回收實(shí)驗(yàn)報(bào)告_第3頁
內(nèi)存的分配與回收實(shí)驗(yàn)報(bào)告_第4頁
內(nèi)存的分配與回收實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)報(bào)告專業(yè) 網(wǎng)絡(luò)工程 班級(jí) 08102班 學(xué)號(hào) 01號(hào) 姓名 胡雙雙課程名稱操作系統(tǒng) 學(xué)年20102011 學(xué)期 下課程類別專業(yè)必修 限選任選實(shí)踐實(shí)驗(yàn)時(shí)間 2010年12 月9 日實(shí)驗(yàn)名稱實(shí)驗(yàn)三:內(nèi)存分區(qū)與回收實(shí)驗(yàn)?zāi)康暮鸵笕胬斫鈨?nèi)存分配的三種方法及回收,掌握解決該問題的算法思想。實(shí)驗(yàn)軟硬件要求pentium(r) dual-core cpu 3.2m內(nèi)存windows xp professionalvisual c+6.0實(shí)驗(yàn)內(nèi)容、方法和步驟問題描述:初始化一內(nèi)存空間,要求用最先適應(yīng)算法、最優(yōu)適應(yīng)算法及最壞適應(yīng)算法實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存,并可進(jìn)行回收。功能要求:可對(duì)內(nèi)存進(jìn)行分區(qū),回收及打印,用

2、戶可選擇最先適應(yīng)算法、最優(yōu)適應(yīng)算法及最壞適應(yīng)方法三種算法對(duì)內(nèi)存進(jìn)行分配。實(shí)驗(yàn)結(jié)果:見截圖小結(jié)此次實(shí)驗(yàn)的難點(diǎn)是內(nèi)存的回收及動(dòng)態(tài)分配問題,三個(gè)分區(qū)的算法相對(duì)來說簡(jiǎn)單一點(diǎn),設(shè)計(jì)者必須考慮內(nèi)存回收時(shí),上為空閑區(qū),下為空閑區(qū),上下都為空閑區(qū)及上下都不為空閑區(qū)四種情況。動(dòng)態(tài)分區(qū)的基本思想是先初始化一空閑內(nèi)存空間為1024,然后動(dòng)態(tài)對(duì)其進(jìn)行分區(qū),分區(qū)的過程中可選擇是按首次適應(yīng)算法、最優(yōu)適應(yīng)算法或者最壞適應(yīng)算法進(jìn)行分配,動(dòng)態(tài)分區(qū)過程中,可以邊分配邊回收。在設(shè)計(jì)過程中,還要注意一些細(xì)節(jié)問題,比如在分配內(nèi)存時(shí),工作名不能重復(fù),否則可能導(dǎo)致打印時(shí)混淆重復(fù)的內(nèi)存區(qū),所以,本實(shí)驗(yàn)中,用pdname()函數(shù)來進(jìn)行判定是否

3、重名。評(píng)定成績(jī):批閱教師: 年月日 一、問題概述初始化一內(nèi)存空間,要求可對(duì)內(nèi)存進(jìn)行分區(qū),回收及打印,用戶可選擇最先適應(yīng)算法、最優(yōu)適應(yīng)算法及最壞適應(yīng)方法三種算法對(duì)內(nèi)存進(jìn)行分配。二、設(shè)計(jì)流程圖(1)首次適應(yīng)算法(first_fit)流程圖開 始比size大的空內(nèi)存結(jié) 束yi沒有超過終值y待進(jìn)入的內(nèi)存進(jìn)入空內(nèi)存區(qū)將剩下的內(nèi)存獨(dú)立為空內(nèi)存塊nn沒有找到比要分配的大的內(nèi)存快,分配失敗(2)最優(yōu)適應(yīng)算法(best_fit)流程圖 開 始查找大于size的空閑空間將其分區(qū)號(hào)存入id大小存入min空閑區(qū)大小小于min將空閑區(qū)分割,一部分分配給size,一部分為空閑區(qū) 結(jié) 束yi沒有超過極值尋找比size大的空

4、閑區(qū)yy空閑區(qū)空間=申請(qǐng)空間將空閑區(qū)直接分配給sizennn(3)最壞適應(yīng)算法(worst-_fit)流程圖與最佳適應(yīng)算法類似(4)內(nèi)存回收流程圖 開 始判斷空閑區(qū)上下內(nèi)存情況上為空將上面的空閑區(qū)合并,并回收下為空將下面的空閑區(qū)合并,并回收上下都為空將上下的空閑區(qū)合并,并回收上下都不為空直接將其回收 結(jié) 束三、數(shù)據(jù)定義struct used_tableint id;/分區(qū)號(hào)char workname;/工作名int worksize;/工作空間int address;/開始地址bool state;/狀態(tài)0表示未分配 1表示已分配j100;void init();int search();in

5、t pdname(char c);void print();void begin();int first_fit(char c,int i);int best_fit(char c,int i);int worst_fit(char c,int i);void reclaim();int free(char c);四、源程序#include <iostream.h>void init();int search();int pdname(char c);void print();void begin();int first_fit(char c,int i);int best_fit

6、(char c,int i);int worst_fit(char c,int i);void reclaim();int free(char c);struct used_tableint id;/分區(qū)號(hào)char workname;/工作名int worksize;/工作空間int address;/開始地址bool state;/狀態(tài)0表示未分配 1表示已分配j100;void init() /主存表的初始化j0.id=1; /分區(qū)號(hào) j0.address =0;j0.state =0;j0.workname =null;j0.worksize =1024;for(int i=1;i<

7、;100;i+)ji.id =i+1;ji.state =0;ji.workname =null; ji.address =ji-1.address +ji.worksize ;int search() /返回空閑空間int sizeall=1024; /主存總空間int sizeuse=0; /已用空間int sizeky; /可用工作空間for(int i=0;i<100;i+)if(ji.state=1)sizeuse=sizeuse+ji.worksize ; sizeky=sizeall-sizeuse;return sizeky;/返回空閑空間int pdname(char

8、name) /判斷作業(yè)名for(int i=0;i<100;i+)if(ji.workname =name)cout<<"輸入工作名重復(fù),分配失??!"<<endl;return 0;return 1;void print() /輸出函數(shù)cout<<"分區(qū)號(hào)"<<" 工作名"<<" 開始地址"<<" 工作空間"<<" 狀態(tài)"<<endl;for(int i=0;i<100

9、;i+)cout<<ji.id<<" "<<ji.workname<<" "<<ji.address <<" "<<ji.worksize<<" "<<ji.state<<endl; if(ji.state=0&&ji+1.state=0&&ji+2.state=0)break;void begin() char name;int size;int c=1;cout

10、<<"請(qǐng)輸入工作名:"<<endl;cin>>name;cout<<"請(qǐng)分配空間:"<<endl;cin>>size;if(pdname(name)cout<<"請(qǐng)選擇要選的算法 1:首次適應(yīng)算法 2:最佳適應(yīng)算法:3:最壞適應(yīng)算法 "<<endl;cin>>c;if(c!=1&&c!=2&&c!=3)c=1;switch(c)case 1:first_fit(name,size);break;c

11、ase 2:best_fit(name,size);break;case 3:worst_fit(name,size);break;int first_fit(char name,int size) /首次適應(yīng)算法for(int i=0;i<100;i+) if(ji.worksize>=size&&ji.state=0)int temp=ji.worksize;int sum=ji+1.address ;ji.worksize=size;ji.workname=name;ji.address=ji-1.address +ji-1.worksize ;ji+1.ad

12、dress=ji.address +ji.worksize ;ji.state =1;if(temp>size) /將i項(xiàng)分成兩項(xiàng)for(int j=100;j>i+1;j-)jj.address =jj-1.address;jj.state =jj-1.state ;jj.workname =jj-1.workname ;jj.worksize =jj-1.worksize ;ji+2.address =sum;ji+1.state =0;ji+1.workname =null;ji+1.worksize =temp-size;cout<<"成功分配!&qu

13、ot;<<endl;for(int j=i;j<100;j+)if(jj.state =0&&jj+1.state =0&&jj+2.state =0)/查找以后表 條件為3個(gè)連續(xù)空閑的空間 則視為以后都空閑jj.worksize =search();/將剩余空間放入j中return 1;if(i=100)cout<<"主存空間已滿!"<<endl;return 0;return 0;int best_fit(char name,int size) /最佳適應(yīng)分配算法/查找一個(gè)大于size的空閑空間,

14、將此空間的id存入id,worksize存入min int min=1025;int id=-1; for(int i=0;i<100;i+)if(ji.state =0&&ji.worksize <min&&ji.worksize>=size)id=i;min=ji.worksize;cout<<"最佳適應(yīng)空間的id:"<<id+1<<"空間大?。?quot;<<min<<endl;/將作業(yè)存入ji項(xiàng)int temp=jid.worksize -size

15、;if(temp=0)/空閑空間大小恰好等于申請(qǐng)空間大小直接存入ji.workname =name;ji.state =1;else if(temp>0)/空閑空區(qū)大于申請(qǐng)空間,需要將空閑分區(qū)分割jid.workname =name;jid.worksize =size; jid.state =1;for(int j=100;j>id+1;j-)jj.address =jj-1.address;jj.state =jj-1.state ;jj.workname =jj-1.workname ;jj.worksize =jj-1.worksize ; jid+1.address =j

16、id.address +jid.worksize ;jid+1.state =0;jid+1.worksize =temp;jid+1.workname =null;return 0;int worst_fit(char name,int size)/查找一個(gè)大于size的空閑空間,將此空間的id存入id,worksize存入max int max=size;int id=-1; for(int i=0;i<100;i+)if(ji.state =0&&ji.worksize >max)id=i;max=ji.worksize;cout<<"最

17、壞適應(yīng)空間的id:"<<id+1<<"空間大?。?quot;<<max<<endl;/將作業(yè)存入ji項(xiàng)int temp=jid.worksize -size;if(temp=0)/空閑空間大小恰好等于申請(qǐng)空間大小直接存入ji.workname =name;ji.state =1;else if(temp>0)/空閑空區(qū)大于申請(qǐng)空間,需要將空閑分區(qū)分割jid.workname =name;jid.worksize =size; jid.state =1;for(int j=100;j>id+1;j-)jj.addre

18、ss =jj-1.address;jj.state =jj-1.state ;jj.workname =jj-1.workname ;jj.worksize =jj-1.worksize ; jid+1.address =jid.address +jid.worksize ;jid+1.state =0;jid+1.worksize =temp;jid+1.workname =null;return 0;/回收工作各函數(shù)void reclaim()char name;cout<<"請(qǐng)輸入需要回收的工作名:"<<endl;cin>>name

19、;free(name);/回收工作int free(char name)int j;/查找要回收的工作for(int i=0;i<100;i+)if(ji.workname =name)cout<<"你要回收的工作是在"<<ji.id<<"分區(qū)中"<<endl;break;if(i=100)cout<<"對(duì)不起 沒有找到你要回收的工作"<<endl;return 0;int n=i;/第n個(gè)工作需要回收 /回收工作 4種情況if(i=0&&j

20、1.state =0)j0.address=0;j0.state =1;j0.workname =null;j0.worksize =j0.worksize +j1.worksize;for(i=1;i<100;i+)ji.address =ji+1.address ;ji.state =ji+1.state ;ji.workname =ji+1.workname ;ji.worksize =ji+1.worksize ;else if(jn-1.state =0&&jn+1.state =1)/下有空jn-1.worksize =jn-1.worksize +jn.wo

21、rksize;for(j=n;j<99;j+)jj.address =jj+1.address ;jj.state =jj+1.state ;jj.workname =jj+1.workname ;jj.worksize =jj+1.worksize ;else if(jn-1.state=1&&jn+1.state=0)/上有空jn.worksize =jn.worksize +jn+1.worksize;jn.workname =null;jn.state =0;for(j=n+1;j<99;j+)jj.address =jj+1.address ;jj.state =jj+1.state ;jj.workname =jj+1.workname ;jj.worksize =jj+1.worksize ;else if(jn-1.state=0&&jn+1.state=0)/上下都為空jn-1.worksize =jn-1.worksize +jn.worksize +jn+1.worksize;for(j=n;j<98;j+)jj.address

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論