2022年實驗四動態(tài)分區(qū)分配方式的模擬答案_第1頁
2022年實驗四動態(tài)分區(qū)分配方式的模擬答案_第2頁
2022年實驗四動態(tài)分區(qū)分配方式的模擬答案_第3頁
2022年實驗四動態(tài)分區(qū)分配方式的模擬答案_第4頁
2022年實驗四動態(tài)分區(qū)分配方式的模擬答案_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選學習資料 - - - 歡迎下載動態(tài)分區(qū)安排方式的模擬第一部分設計思想的說明1設計目標用 c 語言或 c+語言分別實現(xiàn)采納首次適應算法和正確適應算法的動態(tài)分區(qū)安排過程alloc和回收過程free;其中,閑暇分區(qū)通過閑暇分區(qū)鏈表來治理,在進行內(nèi)存安排時,系統(tǒng)優(yōu)先使用閑暇區(qū)低端空間;預期結果:假設初始狀態(tài)如下,可用的內(nèi)存空間為640kb,并有以下懇求序列:作業(yè)1申請130kb作業(yè)2申請60kb作業(yè)3申請100kb作業(yè)2釋放60kb作業(yè)4申請200kb作業(yè)3釋放100kb作業(yè)1釋放130kb作業(yè)5申請140kb作業(yè)6申請60kb作業(yè)7申請50kb作業(yè)6釋放60kb分別用首次適應算法和正確適應算法進

2、行內(nèi)存塊的安排和回收,同時顯示內(nèi)存塊安排和回收后閑暇內(nèi)存分區(qū)鏈的情形;2.設計理論首次適應算法(first-fit) :當要安排內(nèi)存空間時,就查表,在各閑暇區(qū)中查找滿意大小要求的可用塊;只要找到第一個足以滿意要球的閑暇塊就停止查找,并把它安排出去;假如該閑暇空間與所需空間大小一樣,就從閑暇表中取消該項;假如仍有剩余, 就余下的部分仍留在閑暇表中,但應修改分區(qū)大小和分區(qū)始址;正確適應算法(best-fit): 當要安排內(nèi)存空間時,就查找閑暇表中滿意要求的閑暇塊,并使得剩余塊為最小的;然后把它安排出去,如大小恰好合適,就直按安排;如有剩余 塊,就仍保留該余下的閑暇分區(qū),并修改分區(qū)大小的起始地址;內(nèi)

3、存回收: 將釋放作業(yè)所在內(nèi)存塊的狀態(tài)改為閑暇狀態(tài),刪除其作業(yè)名,設置為空;并判定該閑暇塊為否與其他閑暇塊相連,如釋放的內(nèi)存空間與閑暇塊相連時,就合并為同一個閑暇塊,同時修改分區(qū)大小及起始地址;精品學習資料精選學習資料 - - - 歡迎下載其次部分程序清單/*/*動態(tài)分區(qū)安排方式的模擬*/*#include<iostream.h>#include<stdlib.h>#define free 0 /閑暇狀態(tài)#define busy 1 /已用狀態(tài)#define ok 1/完成#define error 0 /出錯#define max_length 640 /最大內(nèi)存空間為

4、640kb typedef int status;typedef struct freearea/定義一個閑暇區(qū)說明表結構int id;/分區(qū)號long size;/分區(qū)大小 long address; /分區(qū)地址 int state;/狀態(tài)elemtype;/-線性表的雙向鏈表儲備結構- typedef struct dulnode /double linked listelemtype data;struct dulnode *prior; /前趨指針struct dulnode *next; /后繼指針dulnode、*dulinklist;dulinklist block_first;

5、 /頭結點dulinklist block_last; /尾結點status allocint;/內(nèi)存安排status freeint; /內(nèi)存回收status first_fitint、int;/首次適應算法status best_fitint、int; /正確適應算法void show;/查看安排status initblock;/開創(chuàng)空間表精品學習資料精選學習資料 - - - 歡迎下載status initblock/開創(chuàng)帶頭結點的內(nèi)存空間鏈表block_first=dulinklistmallocsizeofdulnode; block_last=dulinklistmallocsiz

6、eofdulnode; block_first->prior=null;block_first->next=block_last; block_last->prior=block_first; block_last->next=null; block_last->data.address=0;block_last->data.size=max_length; block_last->data.id=0;block_last->data.state=free; return ok;/-分 配 主 存 -status allocint chint i

7、d、request;cout<<" 請輸入作業(yè) 分區(qū)號 :" cin>>id;cout<<" 請輸入需要安排的主存大小 單位 :kb : "cin>>request; ifrequest<0 |request=0cout<<" 安排大小不合適,請重試!"<<endl; return error;ifch=2 /挑選正確適應算法ifbest_fitid、request=ok cout<<"安排勝利! "<<endl;

8、 else cout<<"內(nèi)存不足,安排失??!"<<endl;return ok;else /默認首次適應算法iffirst_fitid、request=ok cout<<"安排勝利! "<<endl; else cout<<"內(nèi)存不足,安排失?。?quot;<<endl;return ok;/-首次適應算法-status first_fitint id、int request/傳入作業(yè)名及申請量精品學習資料精選學習資料 - - - 歡迎下載/ 為申請作業(yè)開創(chuàng)新空間且初始化

9、dulinklist temp=dulinklistmallocsizeofdulnode; temp->data.id=id;temp->data.size=request;temp->data.state=busy;dulnode *p=block_first->next; whilepifp->data.state=free && p->data.size=request/ 有大小恰好合適的閑暇塊p->data.state=busy; p->data.id=id; return ok;break;ifp->data.s

10、tate=free && p->data.size>request/ 有閑暇塊能滿意需求且有剩余" temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address; p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp->data.size; p->data.size-=request;return ok; break;

11、p=p->next;return error;/-正確適應算法-status best_fitint id、int requestint ch; /記錄最小剩余空間dulinklist temp=dulinklistmallocsizeofdulnode; temp->data.id=id;temp->data.size=request; temp->data.state=busy; dulnode *p=block_first->next;dulnode *q=null; /記錄正確插入位置whilep /初始化最小空間和正確位置精品學習資料精選學習資料 - -

12、 - 歡迎下載ifp->data.state=free &&p->data.size>request | p->data.size=request q=p;ch=p->data.size-request; break;p=p->next;whilepifp->data.state=free && p->data.size=request/ 閑暇塊大小恰好合適p->data.id=id;p->data.state=busy; return ok;break;ifp->data.state=free

13、&& p->data.size>request/ 閑暇塊大于安排需求ifp->data.size-request<ch/剩余空間比初值仍小ch=p->data.size-request;/更新剩余最小值q=p;/ 更新正確位置指向p=p->next;ifq=null return error;/沒有找到閑暇塊else/找到了正確位置并實現(xiàn)安排temp->prior=q->prior; temp->next=q;temp->data.address=q->data.address; q->prior->

14、next=temp;q->prior=temp;q->data.address+=request; q->data.size=ch;return ok;/-主 存 回 收-精品學習資料精選學習資料 - - - 歡迎下載status freeint iddulnode *p=block_first; whilepifp->data.id=idp->data.state=free; p->data.id=free;ifp->prior->data.state=free/與前面的閑暇塊相連p->prior->data.size+=p->

15、;data.size; p->prior->next=p->next;p->next->prior=p->prior;ifp->next->data.state=free/與后面的閑暇塊相連p->data.size+=p->next->data.size; p->next->next->prior=p;p->next=p->next->next;break;p=p->next;return ok;/-顯示主存安排情形-void showcout<<"+n"

16、cout<<"+主 存 分 配 情 況+n" cout<<"+n"dulnode *p=block_first->next; whilepcout<<" 分 區(qū) 號 : "ifp->data.id=free cout<<"free"<<endl; else cout<<p->data.id<<endl;cout<<" 起始地址: "<<p->data.address

17、<<endl;cout<<" 分區(qū)大?。?"<<p->data.size<<" kb"<<endl;cout<<" 狀態(tài): "ifp->data.state=free cout<<"空閑"<<endl;精品學習資料精選學習資料 - - - 歡迎下載else cout<<"已安排 "<<endl;cout<<" "<<end

18、l;p=p->next;/-主函數(shù)-void mainint ch;/算法挑選標記cout<<"動態(tài)分區(qū)安排方式的模擬n" cout<<"*n"cout<<"* 1首次適應算法2正確適應算法*n"cout<<"*n"cout<<" 請?zhí)暨x安排算法:" cin>>ch;initblock; /開創(chuàng)空間表 int choice; /操作挑選標記 while1cout<<"*n"cout<<"*1:安排內(nèi)存2:回收內(nèi)存*n" cout<<"*3:查看安排0:退出*n"cout<<"*n"cout&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論