采用首次適應算法的動態(tài)分區(qū)分配模擬課程設計實驗報告_第1頁
采用首次適應算法的動態(tài)分區(qū)分配模擬課程設計實驗報告_第2頁
采用首次適應算法的動態(tài)分區(qū)分配模擬課程設計實驗報告_第3頁
采用首次適應算法的動態(tài)分區(qū)分配模擬課程設計實驗報告_第4頁
采用首次適應算法的動態(tài)分區(qū)分配模擬課程設計實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上1 需求分析1)本程序要求實現(xiàn)對內(nèi)存的動態(tài)分配與回收的模擬,同時,在內(nèi)存的分配時還必須使用首次適應算法,最后,還要顯示內(nèi)存塊分配和回收后空閑內(nèi)存分區(qū)鏈的情況。2)要實現(xiàn)對作業(yè)的內(nèi)存分配,首先要有一個對作業(yè)進行創(chuàng)建和分配內(nèi)存的模塊,其中,該模塊在分配內(nèi)存時要使用首次適應算法;要實現(xiàn)對內(nèi)存的回收,要有一個內(nèi)存回收的模塊,其中,該模塊在回收內(nèi)存時要考慮內(nèi)存回收的四種情況;最后,還要有一個能顯示內(nèi)存空閑分區(qū)鏈的情況的模塊。2 概要設計1)首次適應算法的結構如圖1:圖1 首次適應算法的結構圖從鏈首開始順序查找空閑分區(qū)鏈完否?返 回分區(qū)大小>所需大???分區(qū)大小-所需大小&l

2、t;=不可再分割大???從該分區(qū)中劃出所需大小的新分區(qū)將該整個分區(qū)從空閑分區(qū)鏈中移出將該分區(qū)分配給相應的作業(yè),修改有關數(shù)據(jù)返 回Y繼續(xù)檢索下一個表項YNNNY2)數(shù)據(jù)結構:struct Fqint size,o,no;Fq *before,*next;其中,F(xiàn)q表示結構體的名字(類型),size表示分區(qū)的可用空間大小,o表示該分區(qū)的狀態(tài)(是否已分配),no表示該分區(qū)中的作業(yè)標志,*before表示該結點的向前指針,*next表示該結點的向后指針。3)各種函數(shù)說明:void alloc(int b,int no,Fq *p);對作業(yè)no進行內(nèi)存分配的功能函數(shù);其中,參數(shù)b表示需求的內(nèi)存大小,參數(shù)n

3、o表示作業(yè)的編號,參數(shù)*p表示空閑分區(qū)鏈的第一個非空結點的指針;void free(Fq *c);將地址為c的分區(qū)的內(nèi)存回收;其中,參數(shù)*c表示要回收內(nèi)存的結點;void create(Fq *head);創(chuàng)建新作業(yè)的子函數(shù);其中,參數(shù)*head表示空閑分區(qū)鏈的鏈首指針;要配合函數(shù)alloc()使用;void cha(Fq *head);查看內(nèi)存中的空閑分區(qū)鏈的子函數(shù);其中,參數(shù)*head表示空閑分區(qū)鏈的鏈首指針;void hui(Fq *head);回收內(nèi)存的子函數(shù);其中,參數(shù)*head表示空閑分區(qū)鏈的鏈首指針;要配合函數(shù)free()使用;3 運行環(huán)境1)操作系統(tǒng):Windows XP (

4、32位 / DirectX 11 )2)電腦: X86 兼容 臺式電腦 處理器: 英特爾 Pentium(奔騰) 雙核 E5300 2.60GHz內(nèi)存: 2 GB 4 開發(fā)工具和編程語言1)開發(fā)工具:Visual C+ 6.0;2)編程語言:C+語言;5 詳細設計1)程序結構如圖2: 圖2 程序結構圖主菜單創(chuàng)建新作業(yè)alloc();內(nèi)存分配查看空閑分區(qū)鏈free();內(nèi)存回收程序結束退出回收內(nèi)存空間2)主菜單模塊:void main()/主函數(shù)Fq *head=new Fq;head->next=new Fq;head->next->size=MAXSIZE;head->

5、;next->o=0;head->next->next=NULL;int choice=0;docout<<"請選擇你要進行的操作:"<<endl;cout<<"1、創(chuàng)建新作業(yè) 2、查看空閑分區(qū)鏈 3、回收內(nèi)存空間 0、退出"<<endl;cin>>choice;switch(choice)case 1: create(head);break;case 2: cha(head);break;case 3: hui(head);break;case 0: break; defau

6、lt: cout<<"輸入錯誤!"<<endl;while(choice!=0);創(chuàng)建新作業(yè)模塊:void create(Fq *head)/創(chuàng)建作業(yè)子函數(shù)Fq *p=head->next;p->before=head;int no=0,b=0;cout<<"請輸入要創(chuàng)建的作業(yè)的編號:"cin>>no;cout<<"請輸入作業(yè)的需求空間大?。?quot;cin>>b;alloc(b,no,p); /此處調(diào)用功能函數(shù)alloc()查看空閑分區(qū)鏈模塊:void ch

7、a(Fq *head)/查看內(nèi)存中的空閑分區(qū)鏈的子函數(shù)Fq *p=head->next;p->before=head;int i=0;cout<<"空閑分區(qū)鏈的情況為:"<<endl;while(p!=NULL)if(p->o=0)cout<<"空閑分區(qū)"<<+i<<" "<<p->size<<"K"<<endl;p=p->next;回收內(nèi)存空間模塊:void hui(Fq *head)/回

8、收內(nèi)存的子函數(shù)Fq *p=head->next;p->before=head;int no=0;cout<<"請輸入要回收內(nèi)存的作業(yè)號:"cin>>no;while(p!=NULL)if(p->no=no)free(p); /此處調(diào)用功能函數(shù)free()cout<<"作業(yè)"<<no<<"的內(nèi)存已回收!"<<endl;return ;else p=p->next;內(nèi)存分配功能函數(shù)模塊:void alloc(int b,int no,Fq *p

9、)/對作業(yè)no進行內(nèi)存分配的子函數(shù)while(p!=NULL)if(p->o=1) p=p->next;elseif(p->size>b)if(p->size-b<=min_size)p->o=1;p->no=no;elseFq *q=new Fq;Fq *r;r=p->before;r->next=q;q->before=r;q->next=p;p->before=q;q->size=b;p->size=p->size-b;q->no=no;q->o=1;cout<<&qu

10、ot;內(nèi)存分配成功!"<<endl;return ;else p=p->next;cout<<"內(nèi)存分配失??!"<<endl;內(nèi)存回收功能函數(shù)模塊:void free(Fq *c)/將地址為c的分區(qū)內(nèi)存回收if(c->before->o=0&&c->next->o=0)Fq *r=c->before,*s=c->next->next;r->size=(r->size+c->size+c->next->size);r->next=s

11、;if(s!=NULL) s->before=r;if(c->before->o=0&&c->next->o!=0) c->before->size=c->before->size+c->size;c->before->next=c->next;c->next->before=c->before;if(c->next->o=0&&c->before->o!=0)Fq *r=c->next->next;c->size=c->

12、;size+c->next->size;c->next=c->next->next;if(r!=NULL) r->before=c;c->o=0;else c->o=0;6 調(diào)試分析1)內(nèi)存分配功能函數(shù)模塊:剛開始對作業(yè)分配內(nèi)存時,只是將空閑分區(qū)的大小以及前后向指針進行修改,而沒有對分配給作業(yè)的內(nèi)存進行設置;這樣,盡管內(nèi)存的空閑分區(qū)大小已經(jīng)變小,但是,以后卻無法對已分配的內(nèi)存空間以及作業(yè)進行修改;于是,我經(jīng)過思考后,決定將分配給作業(yè)的內(nèi)存空間也設置為一個分區(qū),只不過不是空閑的分區(qū),通過狀態(tài)標識符o來與空閑分區(qū)進行區(qū)別。2)回收內(nèi)存空間模塊:剛開始編寫此模塊的代碼時,我有一種無從下手的感覺;因為,如果要回收某個作業(yè)的內(nèi)存,那么必須知道該作業(yè)所在的內(nèi)存中的位置;但是,剛開始我用的數(shù)據(jù)結構中只有表示內(nèi)存狀態(tài)的屬性(分區(qū)可用空間大小,狀態(tài)標識符,前后向指針),這樣就不能對特定的作業(yè)進行操作;最后,我經(jīng)過思考決定在內(nèi)存的數(shù)據(jù)結構中增加一項,即作業(yè)標識符,用來保存分區(qū)中的作業(yè)信息,從而達到查找特定作業(yè)所在內(nèi)存分區(qū)的目的。3)在編寫代碼的過程中,我還遇到了一些小的問題;比如,對鏈表進行操作時,老是出現(xiàn)錯誤,不能對鏈表進行正確的操作等;這些問題與我對鏈表的認識不夠深入和準確有關,不過,通過這次程序的編寫,進一步

溫馨提示

  • 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

提交評論