![存儲管理源代碼_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/80e9ebbb-304e-4032-b818-b6d3f4ec3188/80e9ebbb-304e-4032-b818-b6d3f4ec31881.gif)
![存儲管理源代碼_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/80e9ebbb-304e-4032-b818-b6d3f4ec3188/80e9ebbb-304e-4032-b818-b6d3f4ec31882.gif)
![存儲管理源代碼_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/80e9ebbb-304e-4032-b818-b6d3f4ec3188/80e9ebbb-304e-4032-b818-b6d3f4ec31883.gif)
![存儲管理源代碼_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/80e9ebbb-304e-4032-b818-b6d3f4ec3188/80e9ebbb-304e-4032-b818-b6d3f4ec31884.gif)
![存儲管理源代碼_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/80e9ebbb-304e-4032-b818-b6d3f4ec3188/80e9ebbb-304e-4032-b818-b6d3f4ec31885.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、#include<stdio.h>#include <dos.h>#include<stdlib.h>/#include<conio.h>#include<iostream.h>#define n 10 /*假定系統(tǒng)允許的最大作業(yè)數(shù)為n,假定模擬實驗中n值為10*/ #define m 10 /*假定系統(tǒng)允許的空閑區(qū)表最大為m,假定模擬實驗中m值為10*/ #define minisize 100 /*空閑分區(qū)被分配時,如果分配后剩余的空間小于minisize,則將該空閑分區(qū)全部分配,若大于minisize,則切割分配*/struct
2、 float address; /*已分配分區(qū)起始地址*/ float length; /*已分配分區(qū)長度,單位為字節(jié)*/ int flag; /*已分配區(qū)表登記欄標(biāo)志,用"0"表示空欄目*/ used_tablen; /*已分配區(qū)表*/ struct float address; /*空閑區(qū)起始地址*/ float length; /*空閑區(qū)長度,單位為字節(jié)*/ int flag; /*空閑區(qū)表登記欄標(biāo)志,用"0"表示空欄目,用"1"表示未分配*/ free_tablem; /*空閑區(qū)表*/ void allocate(char J
3、,float xk) /*給J作業(yè),采用最佳分配算法分配xk大小的空間*/ int i,k; float ad; k=-1; for(i=0;i<m;i+) /*尋找空間大于xk的最小空閑區(qū)登記項k*/ if(free_tablei.length>=xk&&free_tablei.flag=1) if(k=-1|free_tablei.length<free_tablek.length) k=i; if(k=-1)/*未找到可用空閑區(qū),返回*/ printf("無可用空閑區(qū)n"); return; /*找到可用空閑區(qū),開始分配:若空閑區(qū)大小
4、與要求分配的空間差小于minisize大小,則空閑區(qū)全部分配;若空閑區(qū)大小與要求分配的空間差大于minisize大小,則從空閑區(qū)劃出一部分分配*/ if(free_tablek.length-xk<=minisize) free_tablek.flag=0; ad=free_tablek.address; xk=free_tablek.length; else free_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length; /*修改已分配區(qū)表*/ i=0; while(used_ta
5、blei.flag!=0&&i<n) /*尋找空表目*/ i+; if(i>=n) /*無表目可填寫已分配分區(qū)*/ printf("無表目填寫已分分區(qū),錯誤n"); /*修正空閑區(qū)表*/ if(free_tablek.flag=0) /*前面找到的是整個空閑分區(qū)*/ free_tablek.flag=1; else /*前面找到的是某個空閑分區(qū)的一部分*/ free_tablek.length=free_tablek.length+xk; return; else /*修改已分配表*/ used_tablei.address=ad; used_t
6、ablei.length=xk; used_tablei.flag=J; return; /*主存分配函數(shù)結(jié)束*/ void reclaim(char J) /*回收作業(yè)名為J的作業(yè)所占主存空間*/ int i,k,j,s,t; float S,L; /*尋找已分配表中對應(yīng)登記項*/ s=0; while(used_tables.flag!=J|used_tables.flag=0)&&s<n) s+; if(s>=n)/*在已分配表中找不到名字為J的作業(yè)*/ printf("找不到該作業(yè)n"); return; /*修改已分配表*/ used_
7、tables.flag=0; /*取得歸還分區(qū)的起始地址S和長度L*/ S=used_tables.address; L=used_tables.length; j=-1;k=-1;i=0; /*尋找回收分區(qū)的空閑上下鄰,上鄰表目k,下鄰表目j*/ while(i<m&&(j=-1|k=-1) if(free_tablei.flag=1) if(free_tablei.address+free_tablei.length=S)k=i;/*找到上鄰*/ if(free_tablei.address=S+L)j=i;/*找到下鄰*/ i+; if(k!=-1) if(j!=-
8、1) /* 上鄰空閑區(qū),下鄰空閑區(qū),三項合并*/ free_tablek.length=free_tablej.length+free_tablek.length+L; free_tablej.flag=0; else /*上鄰空閑區(qū),下鄰非空閑區(qū),與上鄰合并*/ free_tablek.length=free_tablek.length+L; else if(j!=-1) /*上鄰非空閑區(qū),下鄰為空閑區(qū),與下鄰合并*/ free_tablej.address=S; free_tablej.length=free_tablej.length+L; else /*上下鄰均為非空閑區(qū),回收區(qū)域直接
9、填入*/ /*在空閑區(qū)表中尋找空欄目*/ t=0; while(free_tablet.flag=1&&t<m) t+; if(t>=m)/*空閑區(qū)表滿,回收空間失敗,將已分配表復(fù)原*/ printf("主存空閑表沒有空間,回收空間失敗n"); used_tables.flag=J; return; free_tablet.address=S; free_tablet.length=L; free_tablet.flag=1; return; /*主存回收函數(shù)結(jié)束*/ int main( ) int i,a; printf("ttt*
10、n"); printf("ttt * 選擇功能項 *n"); printf("ttt*nn"); printf("ttt *n"); printf("ttt * 1-分配主存 * n"); printf("ttt * 2-回收主存 *n");printf("ttt * 3-顯示主存 * n");printf("ttt * 0-退出 * n"); printf("ttt *n"); /printf("n選擇功項 :&q
11、uot;); /scanf("%d",&a); /*空閑分區(qū)表初始化:*/ free_table0.address=10240; /*起始地址假定為10240*/ free_table0.length=10240; /*長度假定為10240,即10k*/ free_table0.flag=1; /*初始空閑區(qū)為一個整體空閑區(qū)*/ for(i=1;i<m;i+) free_tablei.flag=0; /*其余空閑分區(qū)表項未被使用*/ /*已分配表初始化:*/ for(i=0;i<n;i+) used_tablei.flag=0; /*初始時均未分配*/
12、while(1) float xk; char J; printf("選擇功能項:"); scanf("%d",&a); switch(a) case 0: exit(0); /*a=0程序結(jié)束*/ case 1: /*a=1分配主存空間*/ printf("輸入作業(yè)名J和作業(yè)所需長度xk: "); scanf("%*c%c%f",&J,&xk); allocate(J,xk); /*分配主存空間*/ break; case 2: /*a=2回收主存空間*/ printf("輸入要
13、回收分區(qū)的作業(yè)名"); scanf("%*c%c",&J); reclaim(J); /*回收主存空間*/ break; case 3: /*a=3顯示主存情況*/ /*輸出空閑區(qū)表和已分配表的內(nèi)容*/ printf("輸出空閑區(qū)表:n起始地址 分區(qū)長度 標(biāo)志n"); for(i=0;i<m;i+) printf("%6.0f%9.0f%6dn",free_tablei.address,free_tablei.length, free_tablei.flag); printf(" 按任意鍵,輸出已分配區(qū)表n"); getch(); printf(" 輸出已分配區(qū)表:n起始地址 分區(qū)長度 標(biāo)志n"); for(i=0;i<n;i+) if(used_tablei.flag!=0) printf("%6.0f%9.0f%6cn",used_tablei.address,used_tablei.lengt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司行政年度工作計劃2025(13篇)
- 2025新聞記者個人工作總結(jié)(8篇)
- 2024年6月教師工作總結(jié)范文(7篇)
- 關(guān)于愛情演講2024(31篇)
- 2024-2025學(xué)年重慶市巴渝學(xué)校高一上學(xué)期期中考試歷史試卷
- 2024-2025學(xué)年內(nèi)蒙古自治區(qū)赤峰市高三上學(xué)期期中考試歷史試卷
- 2025年合伙企業(yè)員工餐飲合同
- 2025年環(huán)氧大豆油項目規(guī)劃申請報告
- 2025年制造業(yè)薪資談判集體協(xié)商協(xié)議指導(dǎo)范本
- 2025年共有債權(quán)缺失的離婚協(xié)議書規(guī)范文本
- 《SPIN銷售法課件》課件
- 機動車屬性鑒定申請書
- 《機械制圖》課程教案-任務(wù)四 滾動軸承的視圖的繪制
- 2024年中考語文試題分類匯編:非連續(xù)性文本閱讀(學(xué)生版)
- 門店禮儀培訓(xùn)
- 2024年北京市平谷區(qū)中考英語二模試卷
- AQ 6111-2023個體防護(hù)裝備安全管理規(guī)范知識培訓(xùn)
- 第一屆山東省職業(yè)能力大賽濟(jì)南市選拔賽制造團(tuán)隊挑戰(zhàn)賽項目技術(shù)工作文件(含樣題)
- 尿毒癥替代治療
- 家族族譜模板
- 2022年公務(wù)員多省聯(lián)考《申論》真題(黑龍江省市卷)及答案解析
評論
0/150
提交評論