![計算機操作系統(tǒng)動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收實驗報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea451.gif)
![計算機操作系統(tǒng)動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收實驗報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea452.gif)
![計算機操作系統(tǒng)動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收實驗報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea453.gif)
![計算機操作系統(tǒng)動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收實驗報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea454.gif)
![計算機操作系統(tǒng)動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收實驗報告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea455.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機操作系統(tǒng)實驗報告實驗二實驗題目:存儲器管理 系別:計算機科學與技術(shù)系 班級: 姓名: 學號:2一、實驗目的深入理解動態(tài)分區(qū)存儲管理方式下的內(nèi)存空間的分配與回收。二、實驗內(nèi)容編寫程序完成動態(tài)分區(qū)存儲管理方式下的內(nèi)存分配和回收的實現(xiàn)。具體內(nèi)容包括:確定用來管理內(nèi)存當前使用情況的數(shù)據(jù)結(jié)構(gòu);采用首次適應算法完成內(nèi)存空間的分配;分情況對作業(yè)進行回收;編寫主函數(shù)對所做工作進行測試。三、實驗原理分配:動態(tài)分區(qū)存儲管理方式把內(nèi)存除OS占用區(qū)域外的空間看作一個大的空閑區(qū)。當作業(yè)要求裝入內(nèi)存時,根據(jù)作業(yè)需要內(nèi)存空間的大小查詢內(nèi)存中各個空閑區(qū),當從內(nèi)存中找到一個大于或等于該作業(yè)大小的內(nèi)存空閑區(qū)時,選擇其中一個
2、空閑區(qū),按作業(yè)要求劃出一個分區(qū)裝入該作業(yè)?;厥眨鹤鳂I(yè)執(zhí)行完后,它所占用的內(nèi)存空間被收回,成為一個空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個空閑區(qū)。四、實驗方法實現(xiàn)動態(tài)分區(qū)的分配與回收,主要考慮三個問題:第一、設計記錄內(nèi)存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域(利用結(jié)構(gòu)體類型數(shù)組來保存數(shù)據(jù));第二、在設計的數(shù)據(jù)表格基礎(chǔ)上設計內(nèi)存分配算法(采用首次適應算法找合適的分區(qū)(對空閑分區(qū)表進行排序),分配時要考慮碎片問題);第三、在設計的數(shù)據(jù)表格基礎(chǔ)上設計內(nèi)存回收算法(分四種情況進行回收(上鄰、下鄰、上下鄰和無相鄰分區(qū))。五、實驗步驟第一,設計記錄內(nèi)存使用情況的數(shù)據(jù)
3、表格l 已分配分區(qū)表:起始地址、長度、標志(0表示“空表項”,1表示“已分配”)l 空閑分區(qū)表: 起始地址、長度、標志(0表示“空表項”,1表示“未分配”)struct used_table float address; /已分分區(qū)起始地址float length; /已分分區(qū)長度,單位為字節(jié)int flag; /已分配表區(qū)登記欄標志,用0表示空欄目,char zuoyename; /已分配區(qū)表Struct free_table float address; /空閑分區(qū)起始地址float length; /空閑分區(qū)長度,單位為字節(jié)int flag; /空閑分區(qū)表登記欄目用0表示空欄目,1表示未
4、配; /空閑分區(qū)表第二,在設計的表格上進行內(nèi)存分配l 首次適應算法:為作業(yè)分配內(nèi)存,要求每次找到一個起始地址最小的適合作業(yè)的分區(qū)(按起始地址遞增排序)。l 最大碎片size:要求當找到的空閑分區(qū)作業(yè)的大小的值小于或等于size時,將該分區(qū)全部分配給作業(yè)(數(shù)組后面元素向前移);l 否則,給作業(yè)分割出一部分空間時,其余部分仍作為新的空閑分區(qū)登記(空閑分區(qū)長度=空閑分區(qū)長度-作業(yè)長度,l 空閑分區(qū)起始地址=空閑分區(qū)起始地址+作業(yè)長度第三,在設計的表格上進行內(nèi)存回收。1、上鄰:條件:回收作業(yè)的始址=某個空閑區(qū)的始址+長度 操作:空閑區(qū)的長度=空閑區(qū)的長度+作業(yè)的大小2、下鄰:條件:回收作業(yè)的始址+作業(yè)
5、的長度=某個空閑區(qū)的始址 操作: 空閑區(qū)的始址=回收作業(yè)的始址 空閑區(qū)的長度=空閑區(qū)的長度+作業(yè)的長度3、上下鄰:條件:1,2條件同時成立 操作:空閑區(qū)的始址=上鄰的始址 空閑區(qū)的長度=上鄰的長度+作業(yè)的長度+下鄰的長度 刪除下鄰4、無上下鄰: 操作:找flag=0的行 空閑區(qū)的始址=回收作業(yè)的始址 空閑區(qū)的長度=作業(yè)的長度六、實驗代碼# include<iostream.h># include<iomanip.h>#define M 10 /允許的空閑區(qū)表長最大為m#define N 10 /允許的最大作業(yè)數(shù)量為n#define MIN 1 /碎片的最大值#defin
6、e SADDRESS 200 /空閑分區(qū)初始的起始地址#define SLENGTH 150000 /空閑分區(qū)的初始長度struct used_tfloat address; /已分分區(qū)起始地址float length; /已分分區(qū)長度int flag; /已分配表區(qū)登記欄標志,用0表示空欄目used_tableN;struct free_tfloat address; /空閑分區(qū)起始地址float length; /空閑分區(qū)長度int flag; /空閑分區(qū)表登記欄目用0表示空欄目,1表示未分配free_tableM; /空閑分區(qū)表void allocate(char,float); /分配
7、算法子程序void reclaim(char); /回收算法子程序void main()int i,a;float zyl; char zyn;/空閑分區(qū)表初始化free_table0.address=SADDRESS; /空閑分區(qū)表的起始地址free_table0.length=SLENGTH; /空閑分區(qū)表的長度 free_table0.flag=1; /標志位置1表示未分配for(i=1;i<M;i+)free_tablei.address=0;free_tablei.length=0;free_tablei.flag=0; /0表示空欄目/已分分區(qū)表初始化 for(i=0;i&l
8、t;N;i+)used_tablei.address=0;used_tablei.length=0;used_tablei.flag=0;while(1)cout<<"請選擇功能項:"<<endl<<"1-分配主存"<<endl<<"2-回收主存"<<endl<<"3-顯示主存"<<endl<<"0-退出"<<endl<<"選擇功能項(0-3):"
9、;cin>>a;switch(a)case 0: /當選擇0時退出程序return;case 1: /a=1 分配主存空間cout<<"n請輸入作業(yè)名zyn和作業(yè)所需長度zyl(作業(yè)名為一個字符,長度zyl要小于"<<SLENGTH<<"):"<<endl;cin>>zyn>>zyl;allocate(zyn,zyl); /為作業(yè)zyn分配主存空間break;case 2: / a=2 回收主存空間cout<<"n請輸入要回收分區(qū)的作業(yè)名:"
10、;cin>>zyn;reclaim(zyn); /回收作業(yè)zyn的主存空間break; case 3: /a=3 顯示主存情況,輸出空閑區(qū)表和已分配區(qū)表 cout<<"n輸出空閑區(qū)表:"<<endl<<" 起始地址 分區(qū)長度 標志"<<endl;for(i=0;i<M;i+) if(free_tablei.flag!=0)cout<<setw(10)<<free_tablei.address<<setw(10)<<free_tablei.le
11、ngth<<setw(10)<<free_tablei.flag<<endl; cout<<"n按任意鍵,輸出已分配區(qū)表"cin.get();cout<<"n輸出已分配區(qū)表:"<<endl<<" 起始地址 分區(qū)長度 標志"<<endl;for(i=0;i<N;i+)if(used_tablei.flag!=0)/輸出已分配給作業(yè)的表目 cout<<setw(10)<<used_tablei.address<
12、;<setw(10)<<used_tablei.length <<setw(10)<<(char)used_tablei.flag<<endl; break;default: cout<<"n沒有該選項!"<<endl;break; cin.get()/分配算法子程序void allocate(char zyn,float zyl) float ad;int k=-1;int i=0;while(i<M&&k=-1) /找空間大于zyl的最小空閑區(qū)登記項kif(free_ta
13、blei.length>=zyl&&free_tablei.flag=1) k=i; i+;if(k=-1) /未找到可用空閑區(qū),返回cout<<"無可用空閑區(qū)!"<<endl;return;/*找到可用空閑區(qū),開始分配:若空閑區(qū)大小與作業(yè)要求分配的空間差小于MIN,則將找到的空閑區(qū)全部分配給該作業(yè);若空閑區(qū)大小與要求分配的空間的差大于minisize,則從空閑區(qū)劃出一部分分配給作業(yè)。*/ if(free_tablek.length-zyl<=MIN) free_tablek.flag=0; ad=free_tablek.
14、address; zyl=free_tablek.length; for(i=k;i<M;i+)free_tablei=free_tablei+1; else free_tablek.length=free_tablek.length-zyl; ad=free_tablek.address; free_tablek.address=free_tablek.address+zyl; /*修改已分配區(qū)表*/ i=0; while(used_tablei.flag!=0&&i<N) i+; /找空表目i used_tablei.address=ad; used_table
15、i.length=zyl; used_tablei.flag=zyn; return;/allocate/回收作業(yè)名為J的作業(yè)所占主存空間void reclaim(char zyn)int i,k,j,s,t;float S,L;s=0;while(used_tables.flag!=zyn|used_tables.flag=0)&&s<N)s+; /找到作業(yè)zyn在以分配表中的表目sif(s>=N) cout<<"找不到該作業(yè)!"<<endl;return;used_tables.flag=0; /修改以分配表表目s標志
16、為為空表目S=used_tables.address; /取作業(yè)zyn在內(nèi)存中的首地址L=used_tables.length; /取作業(yè)zyn所分配到的內(nèi)存的長度j=-1;k=-1;i=0;/尋找回收分區(qū)的上下鄰空閑區(qū),上鄰表目k,下鄰表目jwhile(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) /有上鄰空閑區(qū)if(j!=-1) /有下鄰空閑區(qū) 即
17、有上下鄰空閑區(qū),三項合并 free_tablek.length=free_tablek.length+free_tablej.length+L; free_tablej.flag=0;else /上鄰空閑區(qū),下鄰非空閑區(qū),與上鄰合并free_tablek.length=free_tablek.length+L;/ifelse /k=-1 無上鄰空閑區(qū)if(j!=-1) /無上鄰空閑區(qū),有下鄰空閑區(qū),與下鄰合并 free_tablej.address=S;free_tablej.length=free_tablej.length+L; else /j=-1 上下鄰均為非空閑區(qū),回收區(qū)域直接填入 t=0; /在空閑區(qū)表中尋找空欄目while(free_tablet.flag=1&&t<M) t+;if(t>=M) /空閑區(qū)表滿,回收空間失敗,將已分配區(qū)表復原cout<<"主存空閑表沒有空間,回收失??!"<<endl; used_tables.flag=zyn; return;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1; for(i=0;i<=M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職場溝通中的情緒管理技巧
- 食品企業(yè)安全生產(chǎn)事故綜合應急預案
- 工業(yè)環(huán)境下的安全教育及應急措施
- 兩人合作研發(fā)合同范本
- 事業(yè)單位臨時工勞動合同相關(guān)規(guī)定
- 二手車交易合同官方范本
- 個人業(yè)務合作合同版
- 二手房買賣合同模板全新版
- 專業(yè)育兒嫂勞動合同協(xié)議書范例
- 個人車輛抵押借款合同標準版
- 2024年農(nóng)村述職報告
- 2025-2030年中國減肥連鎖市場發(fā)展前景調(diào)研及投資戰(zhàn)略分析報告
- 2024年湖南司法警官職業(yè)學院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 女性私密項目培訓
- 2025年麗水龍泉市招商局招考招商引資工作人員高頻重點提升(共500題)附帶答案詳解
- 《加拿大概況》課件
- 期末復習之一般疑問句、否定句、特殊疑問句練習(畫線部分提問)(無答案)人教版(2024)七年級英語上冊
- TD-T 1048-2016耕作層土壤剝離利用技術(shù)規(guī)范
- 抖音賬號租賃合同協(xié)議
- 直線加速器專項施工方案
- 2022年全國卷高考語文答題卡格式
評論
0/150
提交評論