![操作系統(tǒng)原理-內(nèi)存分配與回收_第1頁](http://file4.renrendoc.com/view/5b70720b1361dea3f83574714272a829/5b70720b1361dea3f83574714272a8291.gif)
![操作系統(tǒng)原理-內(nèi)存分配與回收_第2頁](http://file4.renrendoc.com/view/5b70720b1361dea3f83574714272a829/5b70720b1361dea3f83574714272a8292.gif)
![操作系統(tǒng)原理-內(nèi)存分配與回收_第3頁](http://file4.renrendoc.com/view/5b70720b1361dea3f83574714272a829/5b70720b1361dea3f83574714272a8293.gif)
![操作系統(tǒng)原理-內(nèi)存分配與回收_第4頁](http://file4.renrendoc.com/view/5b70720b1361dea3f83574714272a829/5b70720b1361dea3f83574714272a8294.gif)
![操作系統(tǒng)原理-內(nèi)存分配與回收_第5頁](http://file4.renrendoc.com/view/5b70720b1361dea3f83574714272a829/5b70720b1361dea3f83574714272a8295.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
內(nèi)存的動(dòng)態(tài)存儲(chǔ)管理一、實(shí)驗(yàn)內(nèi)容編寫程序?qū)崿F(xiàn)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式的主存分配與回收。具體內(nèi)容包括:首先確定主存空間分配表;然后采用最先適應(yīng)算法完成主存空間的分配與回收;最后編寫主函數(shù)對(duì)所做工作進(jìn)行測試二、實(shí)驗(yàn)原理模擬存儲(chǔ)管理中內(nèi)存空間的管理和分配內(nèi)存空間的管理分為固定分區(qū)管理方式,可變分區(qū)管理方式,頁式存儲(chǔ)管理,段式存儲(chǔ)管理。題目:模擬內(nèi)存分配與回收三、實(shí)驗(yàn)步驟(或過程)在Microsoft
Visual
C++
6.0環(huán)境下運(yùn)行設(shè)計(jì)一個(gè)空閑分區(qū)表,空閑分區(qū)表通過空閑分區(qū)鏈表來管理,在進(jìn)行內(nèi)存分配時(shí),系統(tǒng)優(yōu)先使用空閑分區(qū)低端的空間。設(shè)計(jì)一個(gè)內(nèi)存分區(qū)表,可用鏈表管理,用以表示當(dāng)前以內(nèi)存使用情況。設(shè)計(jì)一個(gè)進(jìn)程申請(qǐng)隊(duì)列以及進(jìn)程完成后的釋放順序,實(shí)現(xiàn)主存的分配和回收。要求每次分配和回收后把空閑分區(qū)的變化情況以及各進(jìn)程的申請(qǐng)、釋放情況以及各進(jìn)程的申請(qǐng)、釋放情況以圖形方式顯示、打印出來。最佳適應(yīng)算法:該算法總是把滿足要求、又是最小的空閑區(qū)分配給作業(yè)。檢查空閑區(qū)說明表是否有滿足作業(yè)要求的空閑區(qū),也分為三種情況:大于,等于,小于。若檢查到有“等于”的情況,就可以直接分配,若沒有,則繼續(xù)檢查是否有“大于”的情況代碼實(shí)現(xiàn)如下:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#definen64//定義內(nèi)存的大小inta[n],count=0;//數(shù)組a用來保存內(nèi)存使用狀況1為已分配0為未分配,count用來記name數(shù)組中元素個(gè)數(shù)charname[n];//已分配內(nèi)存的名稱(字符類型)typedefstructlinknode{charpid;intstart;intlength;structlinknode*left,*right;}de_node;//進(jìn)程節(jié)點(diǎn)結(jié)構(gòu)體定義//head1表示未分配內(nèi)存隊(duì)列頭指針,head2便是已分配進(jìn)程隊(duì)列頭指針de_node*head1,*head2=NULL;structlinknode*creat()//創(chuàng)建一個(gè)進(jìn)程節(jié)點(diǎn){intlen,flag1=1;//用于表示進(jìn)程是否可以創(chuàng)建charid;structlinknode*p;p=(de_node*)malloc(sizeof(de_node));//試圖在系統(tǒng)內(nèi)存中開辟空間創(chuàng)建一個(gè)進(jìn)程if(p==NULL)//p為空,說明系統(tǒng)沒有可用內(nèi)存用于創(chuàng)建此模擬進(jìn)程{printf("系統(tǒng)沒有足夠的內(nèi)存可供使用!\n");//輸出return(NULL);//返回空指針}printf("請(qǐng)輸入進(jìn)程id(字符類型)和長度:");//為進(jìn)程輸入id和分配的長度scanf("%c%d",&id,&len);fflush(stdin);//清除輸入緩存if((id>='a'&&id<='z'||id>='A'&&id<='Z')&&(len>0)){for(inti=0;i<count;i++)//判斷輸入的進(jìn)程名,如果已使用,返回空指針,并釋放p指針if(name[i]==id){printf("此名稱進(jìn)程已存在!!");flag1=0;//標(biāo)志位為0,表示下面對(duì)p指向內(nèi)容不做修改if(head2==NULL)//表示當(dāng)前沒有進(jìn)程{printf("已沒有進(jìn)程!\n");}else{//已分配內(nèi)存隊(duì)列如果不為空printf("輸入要回收的進(jìn)程id:");//輸入要回收進(jìn)程的idscanf("%c",&id);fflush(stdin);for(inti=0;i<count;i++)//雙重循環(huán)把要回收的進(jìn)程找出來,并把記錄的id去掉if(name[i]==id){//判斷當(dāng)前的進(jìn)程是否滿足要求for(intj=i;j<count;j++)name[j]=name[j+1];//向前覆蓋name[j+1]=NULL;//置空count--;//減一}//判斷是否總共只有一個(gè)進(jìn)程且是夠剛好也滿足條件 if(q->pid==id&&q->right==q&&head2==q){head2=NULL;//把已分配隊(duì)列直接置空flag=1;//表示找到滿足條件的進(jìn)程}if(flag==0){//上面的都沒找到do{ if(q->pid==id){//如果找到 if(q==head2) head2=q->right; q->left->right=q->right;//修改指針指向 q->right->left=q->left;flag=1;break;}elseq=q->right;}while(q!=head2);}//如果找到或是遍歷一遍結(jié)束if(flag==0)printf("沒有此進(jìn)程號(hào)?。?!\n");//沒有找到滿足的進(jìn)程if(flag==1){//表示找到了for(inti=q->start;i<q->start+q->length;i++)//釋放占有的內(nèi)存a[i]=0;//接下來修改可用內(nèi)存的隊(duì)列,while(q->start>p->start&&p->right!=head1){//從第一個(gè)開始找到回收回來的內(nèi)存開始地址大的那個(gè)隊(duì)列 p=p->right;}if(p==head1)//表示比第一個(gè)的開始還小,那么就要修改頭地址head1=q;//其他情況不用修改頭地址,只需找到應(yīng)該的位置,把此進(jìn)程插進(jìn)去q->left=p->left;//修改指針的指向q->right=p;p->left->right=q;p->left=q; if(q->start+q->length==p->start)//可以與后面合并的情況 {q->length+=p->length;//修改指針的指向 p->right->left=q; q->right=p->right;free(p);} if(q->left->start+q->left->length==q->start)//可以與前面合并的情況 {q->left->length+=q->length;//修改指針的指向 q->left->right=q->right; q->right->left=q->left;free(q);}}} }//打印輸出voidprint(){de_node*q=head2,*p=head1;if(count==0)printf("沒有進(jìn)程占有內(nèi)存。\n");else{printf("輸出進(jìn)程id號(hào):\n");for(inti=0;i<count;i++)printf("%c\t",name[i]);}printf("\n");printf("輸出內(nèi)存當(dāng)前使用情況:\n");for(intj=0;j<n;j++)printf("%d%d\t",j,a[j]);printf("\n");printf("內(nèi)存初始名稱為i,回收后可能會(huì)變,可以查看回收來自那個(gè)進(jìn)程\n");do//輸出可用內(nèi)存序列{if(p!=NULL){printf("進(jìn)程id:%c開始地址:%d長度%d\n",p->pid,p->start,p->length);p=p->right;}}while(p!=head1);printf("\n");printf("已分配進(jìn)程隊(duì)列:\n");do//已分配進(jìn)程隊(duì)列{if(q!=NULL){printf("進(jìn)程id:%c開始地址:%d長度%d\n",q->pid,q->start,q->length);q=q->right;}}while(q!=head2);}//主函數(shù)voidmain(){intx;de_node*point,*p1;//創(chuàng)建內(nèi)存的初始狀態(tài)point=(structlinknode*)malloc(sizeof(structlinknode));head1=point;point->pid='i';point->start=0;point->length=n;head1->left=point;head1->right=point;print();while(1){printf("------MENU-------\n");printf("1----distribute(分配)\n");printf("2----reclaim(回收)\n");printf("3----view(瀏覽)\n");printf("4----exit(退出)\n");printf("請(qǐng)輸入上面的選項(xiàng)(1--4):\n");scanf("%d",&x);fflush(stdin);switch(x){case1:{p1=creat();if(p1==NULL)printf("創(chuàng)建進(jìn)程失敗。\n");elsedistribute(p1);x=0;break; }case2:{reclaim();x=0;break;}case3:{print();x=0;break;}case4: {printf("Thanks;Bye-bye!");exit(0);x=0;break;}default:{printf("輸入有誤,請(qǐng)重新輸入。\n");}}
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保行業(yè)采購工作經(jīng)驗(yàn)分享
- 2025-2030全球鍍鎳服務(wù)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球液密柔性非金屬導(dǎo)管行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球水電解用全氟磺酸膜行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國半自動(dòng)焊接機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國癸二酸二酰肼行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球小尺寸工業(yè)平板電腦行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國二氧化碳捕獲機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國叉車機(jī)器人行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球制藥用乙酰氯行業(yè)調(diào)研及趨勢分析報(bào)告
- 2024年河南省公務(wù)員錄用考試《行測》真題及答案解析
- 私密品牌年度規(guī)劃
- 2023年上海鐵路局集團(tuán)有限公司招聘筆試真題
- 貴州省貴陽市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 信永中和在線測評(píng)85題
- 2024至2030年中國中水回用行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報(bào)告
- 《軟件培訓(xùn)講義》課件
- 行政單位閑置資產(chǎn)清查盤活工作總結(jié)
- 設(shè)計(jì)單位-質(zhì)量管理體系
- 2024版《供電營業(yè)規(guī)則》學(xué)習(xí)考試題庫500題(含答案)
- 福建省醫(yī)院大全
評(píng)論
0/150
提交評(píng)論