版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
學號:課程設計題目模擬設計動態(tài)分區(qū)存儲管理的分配與回收學院計算機科學與技術學院專業(yè)計算機科學與技術班級姓名指導教師2011年01月20日課程設計任務書學生姓名:專業(yè)班級:計算機指導教師:工作單位:計算機科學與技術學院題目:模擬設計動態(tài)分區(qū)存儲管理的分配與回收初始條件:1.預備內容:閱讀操作系統(tǒng)的內存管理章節(jié)內容,理解動態(tài)分區(qū)的思想,并體會動態(tài)分區(qū)主存的分配的具體實施方法。2.實踐準備:掌握一種計算機高級語言的使用。要求完成的主要任務:〔包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求〕1.采用動態(tài)分區(qū)管理方案實施內存分配和回收。能夠處理以下的情形⑴能夠輸入給定的內存大小,進程的個數(shù),每個進程所需內存空間的大??;⑵當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進程分配資源后有關內存空間使用的情況;⑶當某進程撤消時,顯示內存回收后內存空間的使用情況。能夠處理以下的情形:主存回收函數(shù)實現(xiàn):有上鄰空閑區(qū)和下鄰空閑區(qū),它們與回收區(qū)的合并;有上鄰空閑區(qū),無下鄰空閑區(qū),回收區(qū)與上鄰空閑區(qū)的合并;無上鄰空閑區(qū),有下鄰空閑區(qū),回收區(qū)與下鄰空閑區(qū)的合并。2.設計報告內容應說明:⑴課程設計目的與功能;⑵需求分析,數(shù)據(jù)結構或模塊說明(功能與框圖);⑶源程序的主要局部;⑷測試用例,運行結果與運行情況分析;⑸自我評價與總結:=1\*romani〕你認為你完成的設計哪些地方做得比擬好或比擬出色;=2\*romanii〕什么地方做得不太好,以后如何改正;=3\*romaniii〕從本設計得到的收獲〔在編寫,調試,執(zhí)行過程中的經(jīng)驗和教訓〕;=4\*romaniv〕完成此題是否有其他的其他方法〔如果有,簡要說明該方法〕;=5\*romanv〕對實驗題的評價和改良意見,請你推薦設計題目。時間安排:設計安排一周:周1、周2:完成程序分析及設計。周2、周3:完成程序調試及測試。周4、周5:驗收、撰寫課程設計報告。〔考前須知:嚴禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記〕指導教師簽名:年月日系主任〔或責任教師〕簽名:年月日模擬設計動態(tài)分區(qū)存儲管理的分配與回收1.課程設計目的與功能1.1課程設計的目的深入了解動態(tài)分區(qū)存儲管理方式的主存分配回收的實現(xiàn)。1.2課程設計的功能1.能夠輸入給定的內存大小,進程的個數(shù),每個進程所需內存空間的大??;2.當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進程分配資源后有關內存空間使用的情況;3.當某進程撤消時,顯示內存回收后內存空間的使用情況。能夠處理以下的情形:主存回收函數(shù)實現(xiàn):有上鄰空閑區(qū)和下鄰空閑區(qū),它們與回收區(qū)的合并;有上鄰空閑區(qū),無下鄰空閑區(qū),回收區(qū)與上鄰空閑區(qū)的合并;無上鄰空閑區(qū),有下鄰空閑區(qū),回收區(qū)與下鄰空閑區(qū)的合并。2.需求分析,數(shù)據(jù)結構或模塊說明2.1需求分析動態(tài)分區(qū)管理方式預先不將主存劃分成幾個區(qū)域,而把主存除操作系統(tǒng)占區(qū)域外的空間看作一個大的空閑區(qū)。當作業(yè)要求裝入主存時,根據(jù)作業(yè)需要的主存空間的大小查詢主存內各個空閑區(qū),當從主存空間中找到一個大于或等于該作業(yè)大小的主存空閑區(qū)時,選擇其中一個空閑區(qū),按作業(yè)需求量劃出一個分區(qū)裝入該作業(yè)。作業(yè)執(zhí)行完后,它所占的主存分區(qū)被收回,成為一個空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),那么需要將相鄰空閑區(qū)合并成一個空閑區(qū)。實現(xiàn)動態(tài)分區(qū)的分配和回收,主要考慮的問題有三個:第一,設計記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設計的數(shù)據(jù)表格根底上設計主存分配算法;第三,在設計的數(shù)據(jù)表格根底上設計主存回收算法。實驗中主存分配算法采用“最優(yōu)適應”算法。最優(yōu)適應算法是按作業(yè)要求挑選一個能滿足作業(yè)要求的最小空閑區(qū),這樣保證可以不去分割一個大的區(qū)域,使裝入大作業(yè)時比擬容易得到滿足。但是最優(yōu)適應算法容易出現(xiàn)找到的一個分區(qū)可能只比作業(yè)所要求的長度略大一點的情況,這時,空閑區(qū)分割后剩下的空閑區(qū)就很小,這種很小的空閑區(qū)往往無法使用,卻影響了主存的使用。為了一定程度上解決這個問題,如果空閑區(qū)的大小比作業(yè)要求的長度略大一點,不再將空閑區(qū)分成已分分區(qū)和空閑區(qū)兩局部,而是將整個空閑區(qū)分配給作業(yè)。在實現(xiàn)最優(yōu)適應算法時,可把空閑區(qū)按長度以遞增方式登記在空閑區(qū)表中。2.2結構說明分區(qū)說明表structPST{//partitionspecificationtableintid;//分區(qū)號intaddr;//起始地址intsize;//分區(qū)長度Statusstate;//狀態(tài)};2.1.2雙向鏈structNode{//雙向鏈表結點PSTdata;Node*back;//前驅Node*next;//后繼Node(){back=NULL;next=NULL;} Node(intid,intsize) { data.ID=id; data.size=size; back=NULL; next=NULL; }};2.1.3StatusFFA(intid,intsize){//headfitalgorithm Node*temp=newNode(id,size); temp->data.state=BUSY; Node*cur=head->next; while(cur) { if(cur->data.state==FREE&&cur->data.size==size) {//如果空閑塊大小剛好與請求大小相等,直接分配 cur->data.ID=id; cur->data.state=BUSY; returnOK; break; } if(cur->data.state==FREE&&cur->data.size>size) {//如果大于 temp->back=cur->back; temp->next=cur; cur->back->next=temp; temp->data.addr=cur->data.addr; cur->back=temp; cur->data.addr=cur->data.addr+size; cur->data.size=cur->data.size-size; returnOK; break; } cur=cur->next; } returnERROR;}2.1.4StatusBFA(intid,intsize){//bestfitalgorithm Node*temp=newNode(id,size); temp->data.state=BUSY; intmin;//記錄符合滿足請求的最小空閑塊大小 Node*fit;//指向采用最正確適應算法的插入位置 Node*cur=head->next; while(cur) {//取得第一個可以分配的位置〔不一定是最正確位置〕 if(cur->data.state==FREE&&cur->data.size>=size) { fit=cur; min=cur->data.size-size; break; } cur=cur->next; } while(cur) { if(cur->data.state==FREE&&cur->data.size==size) {//如果相等直接分配 cur->data.state=BUSY; cur->data.ID=id; returnOK; break; } if(cur->data.state==FREE&&cur->data.size>size) {//獲取最正確位置 if(cur->data.size-size<min) { min=cur->data.size-size; fit=cur; } } cur=cur->next; } if(fit) {//假設最正確,插入 temp->back=fit->back; temp->next=fit; fit->back->next=temp; temp->data.addr=fit->data.addr; fit->back=temp; fit->data.addr=fit->data.addr+size; fit->data.size=fit->data.size-size; returnOK; } else returnERROR;}2.1.5StatusWFA(intid,intsize){//worstfitalgorithm Node*temp=newNode(id,size); temp->data.state=BUSY; intmax;//記錄符合滿足請求的最小空閑塊大小 Node*fit;//指向采用最壞適應算法的插入位置 Node*cur=head->next; while(cur) {//取得第一個可以分配的位置〔不一定是最正確位置〕 if(cur->data.state==FREE&&cur->data.size>=size) { fit=cur; max=cur->data.size-size; break; } cur=cur->next; } while(cur) {/* if(cur->data.state==FREE&&cur->data.size==size) {//如果相等直接分配 cur->data.state=BUSY; cur->data.ID=id; returnOK; break; } */ if(cur->data.state==FREE&&cur->data.size>size) {//獲取最正確位置 if(cur->data.size-size>max) { max=cur->data.size-size; fit=cur; } } cur=cur->next; } if(fit) {//假設最正確,插入 temp->back=fit->back; temp->next=fit; fit->back->next=temp; temp->data.addr=fit->data.addr; fit->back=temp; fit->data.addr=fit->data.addr+size; fit->data.size=fit->data.size-size; returnOK; } else returnERROR;}2.3結構框圖圖13.源程序#include<iostream>usingnamespacestd;//#defineMAX_LEN1024//定義內存大小,1024字節(jié)enumStatus{FREE,BUSY,OK,ERROR};structPST{//partitionspecificationtableintID;//分區(qū)號 intaddr;//起始地址intsize;//分區(qū)長度 Statusstate;//狀態(tài)};structNode{//雙向鏈表結點 PSTdata;Node*back;//前驅Node*next;//后繼Node() { back=NULL; next=NULL;} Node(intid,intsize) { data.ID=id; data.size=size; back=NULL; next=NULL; }};intarea;//輸入內存空間Node*head,*last;voidInit(intarea){ head=newNode();last=newNode(); head->next=last; last->back=head; last->data.addr=0; last->data.ID=0; last->data.size=area;last->data.state=FREE;}StatusFFA(intid,intsize){//headfitalgorithmNode*temp=newNode(id,size); temp->data.state=BUSY; Node*cur=head->next;while(cur){if(cur->data.state==FREE&&cur->data.size==size){//如果空閑塊大小剛好與請求大小相等,直接分配cur->data.ID=id;cur->data.state=BUSY;returnOK;break; } if(cur->data.state==FREE&&cur->data.size>size) {//如果大于temp->back=cur->back;temp->next=cur;cur->back->next=temp;temp->data.addr=cur->data.addr;cur->back=temp;cur->data.addr=cur->data.addr+size;cur->data.size=cur->data.size-size;returnOK;break;} cur=cur->next;} returnERROR;}StatusBFA(intid,intsize){//bestfitalgorithm Node*temp=newNode(id,size);temp->data.state=BUSY;intmin;//記錄符合滿足請求的最小空閑塊大小Node*fit;//指向采用最正確適應算法的插入位置Node*cur=head->next;while(cur){//取得第一個可以分配的位置〔不一定是最正確位置〕if(cur->data.state==FREE&&cur->data.size>=size){fit=cur;min=cur->data.size-size;break; }cur=cur->next; }while(cur) { if(cur->data.state==FREE&&cur->data.size==size) {//如果相等直接分配cur->data.state=BUSY;cur->data.ID=id;returnOK;break; } if(cur->data.state==FREE&&cur->data.size>size){//獲取最正確位置if(cur->data.size-size<min){min=cur->data.size-size;fit=cur;} } cur=cur->next; }if(fit) {//假設最正確,插入 temp->back=fit->back; temp->next=fit; fit->back->next=temp; temp->data.addr=fit->data.addr; fit->back=temp;fit->data.addr=fit->data.addr+size; fit->data.size=fit->data.size-size; returnOK; }elsereturnERROR;}StatusWFA(intid,intsize){//worstfitalgorithmNode*temp=newNode(id,size); temp->data.state=BUSY;intmax;//記錄符合滿足請求的最小空閑塊大小 Node*fit;//指向采用最壞適應算法的插入位置 Node*cur=head->next; while(cur) {//取得第一個可以分配的位置〔不一定是最正確位置〕if(cur->data.state==FREE&&cur->data.size>=size){fit=cur;max=cur->data.size-size;break;} cur=cur->next; }while(cur){/*if(cur->data.state==FREE&&cur->data.size==size) {//如果相等直接分配cur->data.state=BUSY;cur->data.ID=id;returnOK;break;}*/if(cur->data.state==FREE&&cur->data.size>size){//獲取最正確位置if(cur->data.size-size>max){max=cur->data.size-size;fit=cur;}}cur=cur->next; } if(fit) {//假設最正確,插入 temp->back=fit->back;temp->next=fit; fit->back->next=temp; temp->data.addr=fit->data.addr; fit->back=temp; fit->data.addr=fit->data.addr+size;fit->data.size=fit->data.size-size; returnOK;} elsereturnERROR;}voidFree(intid){Node*cur=head;while(cur){if(cur->data.ID==id){cur->data.state=FREE;cur->data.ID=FREE;if(cur->back->data.state==FREE)//與前面的空閑塊相連{cur->back->data.size+=cur->data.size;cur->back->next=cur->next;cur->next->back=cur->back;}if(cur->next->data.state==FREE)//與后面的空閑塊相連{cur->data.size+=cur->next->data.size;cur->next->next->back=cur->back;cur->back->next=cur->next;}break;}cur=cur->next;}}StatusAssign(intchoice){ intid,size; cout<<"請輸入?yún)^(qū)號:"; cin>>id; cout<<endl<<"請輸入分區(qū)長度(KB):"; cin>>size; if(size<=0) { cout<<"輸入錯誤!"<<endl; returnERROR; } if(choice==1) { if(FFA(id,size)==OK) cout<<"分配成功!"<<endl; else cout<<"分配失??!"<<endl; } elseif(choice==2) { if(BFA(id,size)==OK) cout<<"分配成功!"<<endl; else cout<<"分配失敗!"<<endl; } elseif(choice==3) { if(WFA(id,size)==OK) cout<<"分配成功!"<<endl; else cout<<"分配失敗!"<<endl; } else returnERROR;}voidShow(){ Node*cur=head->next; while(cur) { cout<<"***********************************"<<endl; cout<<"區(qū)號:"; if(cur->data.ID==FREE) cout<<"無"<<endl; else cout<<cur->data.ID<<endl; cout<<"起始地址:"<<cur->data.addr<<endl; cout<<"分區(qū)長度:"<<cur->data.size<<endl; cout<<"狀態(tài):"; if(cur->data.state==BUSY) cout<<"已分配"<<endl; else cout<<"未分配"<<endl; cur=cur->next; }}intmain(){ cout<<"動態(tài)分區(qū)分配方式的模擬"<<endl; cout<<"********************************************"<<endl; cout<<"請輸入內存大小(KB):"; cin>>area; while(area<=0) { cout<<"輸入錯誤,請重新輸入內存大小(KB)"; cin>>area; } while(1) { cout<<"********************************************"<<endl; cout<<"**1.FFA2.BFA3.WFA0.EXIT**"<<endl; cout<<"********************************************"<<endl; cout<<"請選擇:"; intch; cin>>ch; if(ch==0) { break; } Init(area); intchoice; while(1) { cout<<"********************************************"<<endl; cout<<"**1.分配2.回收3.查看0.退出**"<<endl; cout<<"********************************************"<<endl; cout<<"請輸入您的操作:"; cin>>choice; if(choice==1) { cout<<"請輸入進程個數(shù)"; intnum; cin>>num; for(;num>0;num--) {
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購買電風扇合同范例
- 2024至2030年脂肪族丙烯酸聚氨酯漆項目投資價值分析報告
- 成品軟件購買合同范例
- 陜西能源職業(yè)技術學院《罐頭食品加工與軟飲料工藝學》2023-2024學年第一學期期末試卷
- 陜西理工大學《休閑運動綜合技能實訓(跆拳道)》2023-2024學年第一學期期末試卷
- 電器購銷合同范例
- 陜西科技大學鎬京學院《軟件工程(雙語)》2023-2024學年第一學期期末試卷
- 房子抵押拍賣合同范例
- 靜安獨棟廠房出租合同范例
- 不銹鋼管件購買合同范例
- 會計學原理智慧樹知到期末考試答案2024年
- 《血站業(yè)務場所建設指南 第3部分:獻血屋》
- 安寧護理個案
- (2024年)計算機安全培訓
- 城市地理學智慧樹知到期末考試答案2024年
- 項目撤銷方案
- 20220226【案例分享】鋁加工行業(yè)SAP解決方案
- 異地辦公與遠程團隊管理
- JB T 3929-2008通用懸掛輸送機
- 銀行輿情管理培訓課件
- 抖音小店數(shù)據(jù)分析怎么做
評論
0/150
提交評論