北交大操作系統作業-內存管理器實驗_第1頁
北交大操作系統作業-內存管理器實驗_第2頁
北交大操作系統作業-內存管理器實驗_第3頁
北交大操作系統作業-內存管理器實驗_第4頁
北交大操作系統作業-內存管理器實驗_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、實驗三 內存管理1一實驗目的1二實驗內容1三實驗設計1四模擬實驗2First.cpp3First.h5Next.cpp7Next.h9五實驗結果12六實驗總結15實驗三 內存管理一實驗目的構造一個沒有虛存功能的內存管理系統,并進行測試和對不同分配策略的性能展開比較評估。本次實驗,選擇的分配策略:First-fit 和 next-fit二實驗內容1、設計一個內存管理器,支持至少兩種分配策略(本實驗使用firstfit策略和nextfit策略);2、分別對不同的策略進行性能評估三實驗設計1.內存unsigned char mm65536;2. 用戶接口用戶接口函數:int mm_init() /初

2、始化int mm_request(int n) /申請空間void mm_release(int p) /釋放空間3計算請求尺寸srand(unsigned char)time(NULL);tmp = (rand() % 1024) + 1; /最大申請10244.選擇待釋放的塊tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "釋放指針 " <&

3、lt; ptmp << endl;ptmp = -1;四模擬實驗實現兩個版本的內存管理器,分配策略分別為:first-fit和next-fitFirst.cpp#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "first.h"using namespace std;int main()int i;int j = 0; /分配指針數int p1000; /用于存放分配出的指針int tmp;int r

4、equestsize = 0; /統計申請空間int k = 0; /統計搜索步數srand(unsigned char)time(NULL);step = 0;mm_init();for(i = 0; i < 30; i+) /模擬30步cout << "第 " << i + 1 << " 步" << endl;dotmp = (rand() % 1024) + 1; /最大申請1024cout << "申請空間 " << tmp << &qu

5、ot; 字節" << endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize+tmp;k = k + step;cout << "分配指針 " << pj << endl;cout << endl;j+;elsecout << "剩余空間不足,分配失敗" << endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand

6、() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "釋放指針 " << ptmp << endl;ptmp = -1;/以下為性能統計指標cout << endl;cout << "平均申請空間:" << (double)requestsize / (double)j << " 字節" << endl;cout <

7、< "平均空間利用率:" << (double)requestsize/(double)65536 << endl;cout << "平均搜索步數:" << (double)k/(double)j << endl;cout << endl;if(i + 1) % 5 = 0)system("pause");First.hunsigned char mm65536;int step; /記錄搜索步數int BinToInt(unsigned char *s)

8、/把char類型變成intint i;char tmp4;int t;for(i = 0; i < 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t) /把int類型變成charint i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i < 4; i+)ti = tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm); /前向指針 置-1 放在數組的第一個

9、位置IntToBin(65536, &mm4); /整個塊大小,放在第四個位置IntToBin(-1, &mm65536-4); /后向指針 置-1 放在數組的倒數第四個位置return 0;int mm_request(int n)/四字節前向指針、四字節塊大小、一字節狀態、N字節可用內存、四字節后向指針int pointer = 0;step = 0;while(mmpointer+8=1)|(n+26)>=BinToInt(&mmpointer+4) /pointer+4 表示塊大小/mmpointer+8=1 狀態位是一,說明這一塊已經被分配/n+26 申

10、請的空間+管理開銷pointer=BinToInt(&mmpointer+BinToInt(&mmpointer+4)-4); /找到后向指針if(mmpointer+8 != 1)step+;/非空閑塊不在鏈內,不計步數if(pointer = -1)return -1;mmpointer + 8 = 1; /修改本塊標志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本塊后向指針IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /

11、修改后塊前向指針IntToBin(BinToInt(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后塊大小IntToBin(n + 13,&mmpointer + 4); /修改本塊大小return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本塊標志

12、位if(BinToInt(&mmbac+8) = 0) /如果后塊未使用IntToBin(0,&mmp+BinToInt(&mmp + 4) - 4); /清空本塊后向指針IntToBin(0,&mmbac); /清空后塊前向指針IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本塊大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后塊不是最后一塊IntToBin(p, &a

13、mp;mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后塊的后塊前向指針IntToBin(0, &mmbac + 4); /清空后塊大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前塊未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前塊后向指針IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpr

14、e + 4); /修改前塊大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后塊前向指針IntToBin(0, &mmp + 4); /清空本塊大小IntToBin(0, &mmp); /清空本塊前向指針Next.cpp#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "next.h"using n

15、amespace std;int main()int i;int j = 0; /分配指針數int p1000; /用于存放分配出的指針int tmp;int requestsize = 0; /統計申請空間int k = 0; /統計搜索步數srand(unsigned char)time(NULL);step = 0;next = 0;end = -1;mm_init();for(i = 0; i < 30; i+)/模擬30步cout << "這是第 " << i + 1 << " 步" <<

16、endl;dotmp = (rand() % 1024) + 1; /最大申請1024cout << "申請空間 " << tmp << " 字節" << endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize + tmp;k = k + step;cout << "分配指針:" << pj << endl;cout << endl;j+;elsecout <&l

17、t; "剩余空間不足,分配失敗。" << endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "釋放指針:" << ptmp << endl;ptmp = -1;/以下為性能統計指標cout << endl;cout << "

18、平均申請空間:" << (double)requestsize/(double)j << " 字節" << endl;cout << "平均空間利用率:" << (double)requestsize/(double)65536 << endl;cout << "平均搜索步數:" << (double)k/(double)j << endl;cout << endl;if(i + 1) % 5 = 0)sy

19、stem("pause");Next.hunsigned char mm65536;int step;int next;int end;int BinToInt(unsigned char *s)int i;char tmp4;int t;for(i = 0; i < 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t)int i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i < 4; i+)ti

20、= tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm);IntToBin(65536, &mm4);IntToBin(-1, &mm65536-4);return 0;int mm_request(int n)/四字節前向指針、四字節塊大小、一字節狀態、N字節可用內存、四字節后向指針int pointer;step = 0;pointer = next;while(pointer != -1)if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&am

21、p;mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToInt(&mmpointer + 4) - 4);/step+;if(mmpointer + 8 != 1)step+;if(pointer = -1)pointer = 0;while(pointer != end)if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToI

22、nt(&mmpointer + 4) - 4);if(mmpointer + 8 != 1)step+;/step+;if(pointer = end)return -1;mmpointer+8 = 1; /修改本塊標志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本塊后向指針IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后塊前向指針IntToBin(BinToInt(&mmpointer + 4) - n - 13, &

23、amp;mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后塊大小IntToBin(n + 13, &mmpointer + 4); /修改本塊大小end = pointer;next = pointer + 4 + 4 + 1 + n + 4;return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本塊標志位if(Bin

24、ToInt(&mmbac + 8) = 0) /如果后塊未使用IntToBin(0, &mmp + BinToInt(&mmp + 4) - 4); /清空本塊后向指針IntToBin(0, &mmbac); /清空后塊前向指針IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本塊大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后塊不是最后一塊IntToBin(p, &am

25、p;mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后塊的后塊前向指針IntToBin(0, &mmbac + 4); /清空后塊大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前塊未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前塊后向指針IntToBin(0, &mmp); /清空本塊前向指針IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpre + 4); /修改前塊大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后塊前向指針IntToBin(0, &mmp + 4); /清空本塊大小五實驗結果1 .實現的兩種分配策略:first-fit 和 next-fit2. 設計測試程序,收集實驗數據:First-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論