(1)動態分割槽管理的主存分配模擬系統的設計—最先適應法、最佳適應法、最壞適應法(選擇1~3種),模擬實現記憶體的分配**;
(2)能夠輸入給定的記憶體大小,程序的個數,每個程序所需記憶體空間的大小等;
(3)能夠選擇分配或**操作;並能顯示完成記憶體分配或**後記憶體空間的使用情況;
(4)能夠顯示程序在記憶體的儲存位址、大小等 //
#include
#include
"service.h"
using
namespace std;
intmain()
}}datastruct.h 檔案
#pragma once
#include
using
namespace std;
/** 資料結構定義檔案
*///分割槽表
struct ram
;//可用表
struct freeram
;//程序表
struct process
;
service.cpp檔案
#include
"service.h"
#include
#include
"datastruct.h"
#include
"partition.h"
#include
"processm.h"
using
namespace std;
//資料層物件
partition par;
//記憶體管理
processm pro;
//程序管理
/** 列印分割槽表
*/void
prirams()
/** 列印可用表
*/void
prifreerams()
/** 列印程序請求表
*/void
prirequestpros()
/** 初始化記憶體
*/void
initpars()
/** 向請求表中新增程序
*/void
addpros()
}/** 根據方式獲取區號
* way:使用的方法 0:最先適應法; 1:最佳適應法; 2:最壞適應法
* len: 程序長度
* return:區號 (-1:無可用區)
*/int
getpartnum
(int way,
int len)if(
0==way)
elseif(
1==way)
else
}return-1
;}/** 分配程序
* way:使用的方法 0:最先適應法; 1:最佳適應法; 2:最壞適應法
*/void
distributepros
(int way)}}
//更新程序請求表
pro.
upadaterequest()
;}/** 讓使用者選擇分配的方法
*/void
choosedisway()
/** 讓使用者選擇要釋放的分割槽
*/void
releasepars()
partition.cpp 檔案
/***************************************
類的成員變數
int totalram = 0; //給定的記憶體
int partitionnum = 0; //分割槽個數
int freenum = 0;//空閒分割槽個數
ram* toalram=null;//分割槽表
freeram freeram[100]; //空閒(可用)區表
*********/
#include
"partition.h"
using
namespace std;
/** 初始化記憶體
* totalram: 記憶體大小
*/void partition::
initram
(int totalram)
/** 初始化分割槽的區號
*/void partition::
initpartno()
partitionnum = i;}/*
* 更新空閒分割槽,每次改變分割槽表的時候,都需要更新空閒分割槽
*/void partition::
upadtefreeram()
freenum =0;
//找出所有空閒區
for(ram* p=toalram;p!=
null
;p=p-
>next)}}
/** 從可用表中查詢第乙個符合條件的分割槽
* len: 可用區的長度大於len
*/int partition::
serarchfreeram
(int len)
}return-1
;}/** 向指定的分割槽中,分配程序
* partno:分區區號
* pro: 需要分配的程序
* return: true 分配成功 ,false 分配失敗
*/bool partition::
distributeprocess
(int partno, process pro)
else}}
return
false;}
/** 將可用表進行遞減排序
*/void partition::
ascendingorder()
}}}/*
* 將可用表進行遞減排序
*/void partition::
decreasingorder()
}}}/*
* 釋放指定分割槽
* partno:要釋放的分割槽的區號
*/void partition::
releasepartition
(int partno)
}//處理**區與空閒區鄰接
neatendebris()
;}/** 整理記憶體
* 當釋放分割槽後,呼叫該函式用於處理空閒區與**取鄰接的情況*/
void partition::
neatendebris()
else
}else
}//跟新可用區
upadtefreeram()
;}/** 列印分割槽表
*/void partition::
printram()
cout << endl;}/*
* 列印可用表
*/void partition::
printfreeram()
}/** 交換a與b的值,
*用於可用表排序的工具函式
*/void partition::
change
(int
& a,
int& b)
processm.cpp檔案
/****************************
類的成員變數:
process prorequest[100]; //程序請求表
int processnum = 0;//請求表中程序個數
**********************************/
#include
"processm.h"
#include
using
namespace std;
/** 新增程序到程序請求表中
*/void processm::
addprocess
(process pro)
/** 列印請求表
*/void processm::
printrequest()
}/** 更新程序請求表
*/void processm::
upadaterequest()
} processnum = k;
}
作業系統實驗三 動態分割槽儲存管理
一 目的與任務 目的 熟悉並掌握動態分割槽分配的各種演算法,熟悉並掌握動態分割槽中分割槽 的各種情況,並能夠實現分割槽合併。任務 用高階語言模擬實現動態分割槽儲存管理。二 內容 要求與安排 1 實驗內容 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各...
作業系統實驗三 可變分割槽儲存管理
一.實驗目的和要求 通過這次實驗,加深對記憶體管理的認識,進一步掌握記憶體的分配 演算法的思想。二.實驗目的和要求 編寫程式模擬實現記憶體的動態分割槽法儲存管理。記憶體空閒區使用自由鏈管理,採用最壞適應演算法從自由鏈中尋找空閒區進行分配,記憶體 時假定不做與相鄰空閒區的合併。假定系統的記憶體共640...
作業系統實驗之動態分割槽分配演算法
設計程式模擬四種動態分割槽分配演算法 首次適應演算法 迴圈首次適應演算法 最佳適應演算法和最壞適應演算法的工作過程。假設記憶體中空閒分割槽個數為n,空閒分割槽大小分別為p1,pn,在動態分割槽分配過程中需要分配的程序個數為m m n 它們需要的分割槽大小分別為s1,sm,分別利用四種動態分割槽分配演...