91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

系統(tǒng)采用最佳適應(yīng)分配算法為作業(yè)分配主存空間,而且具有緊湊技術(shù)。請編程完成以下操作: (1). 輸出此時的已分配區(qū)表和未分配區(qū)表; (2). 裝入 Job3(15K),輸出主存分配后的已分配區(qū)表和未分配區(qū)表; (3). 回收 Job2所占用的主存空間,輸出主存回收后的已分配區(qū)表和未分配區(qū)表; (4).裝入 Job4(130K),輸出主存分配后的已分配區(qū)表和未分配區(qū)表。

資源截圖

代碼片段和文件信息

//內(nèi)存管理----最優(yōu)適應(yīng)分配算法
#include
#include
#include
#include
#define?MemSize??240??//定義內(nèi)存大小
#define?MemBassaddr?0??//定義內(nèi)存起始地址
using?namespace?std;

struct?freepartion//空閑分區(qū)結(jié)構(gòu)定義
{
????int?baseaddr;//空閑分區(qū)的起始地址
????int?partionlen;//空閑分區(qū)的長度
};
struct?usedpartion//已分配的內(nèi)存分區(qū)結(jié)構(gòu)定義
{
????string?jobname;//作業(yè)名
????int?baseaddr;??//作業(yè)所占分區(qū)的起始地址
int?partionlen;//作業(yè)所占分區(qū)的長度
};

listfreetable;//空閑分區(qū)表
listusedtable;//已分配分區(qū)表

void?AllocateMem(string?&jobnameint?&joblen)//采用最優(yōu)適應(yīng)分配算法為作業(yè)jobname分配joblen大小的空間
{
?//要分配的作業(yè)名不能為已存在的作業(yè)名
list::iterator?used=usedtable.begin();
while(used!=usedtable.end())
{
if(used->jobname==jobname)
{
cout<<“作業(yè)已存在不能再分配一個相同名的作業(yè)!“< return;
}
else
{
used++;
}
?}
?//最優(yōu)適應(yīng)分配算法
?list::iterator?it=freetable.begin();
?if(it==freetable.end())
?{
?????cout<<“空閑分區(qū)已用完!“< ?return;
?}
?list::iterator?itfreetmp=it;
?while(it!=freetable.end())
?{??
???????
?if(it->partionlen>=joblen)
{??
if(itfreetmp->partionlen>it->partionlen)
{
itfreetmp=it;
it++;
continue;
}
else?if(itfreetmp->partionlen {
????????????itfreetmp=it;
it++;
continue;
}
else
{
it++;
continue;
}
????}
else
{
it++;
}
?}//while
?if(itfreetmp->partionlen>=joblen)
?{
?????//修改已分配分區(qū)表
usedpartion?tempuse;
tempuse.baseaddr=itfreetmp->baseaddr;
tempuse.jobname=jobname;
tempuse.partionlen=joblen;
usedtable.push_back(tempuse);
????
??//從空閑區(qū)分配空間
if(itfreetmp->partionlen==joblen)
{
freetable.erase(itfreetmp);
}
else
{
itfreetmp->baseaddr=itfreetmp->baseaddr+joblen;
itfreetmp->partionlen=itfreetmp->partionlen-joblen;
}
cout<<“為作業(yè)“< return;
?}
?else
?{
????cout<<“內(nèi)存不足,為作業(yè)分配內(nèi)存失敗!“<????return;
?}
}
void?ReclaimMem(string?jobname)//回收作業(yè)jobname所占的內(nèi)存
{??
list::iterator?itused=usedtable.begin();
list::iterator?itfree=freetable.begin();
freepartion?free;
while(itused!=usedtable.end())
{
if(itused->jobname==jobname)//找到要回收的作業(yè)
{
free.baseaddr=itused->baseaddr;
free.partionlen=itused->partionlen;
usedtable.erase(itused);
if(itfree!=freetable.end())
{
list::iterator?ittmpdown=itfree;
list::iterator?ittmpup=++itfree;
while(ittmpup!=freetable.end())
{
if(free.baseaddr==(ittmpdown->baseaddr+ittmpdown->partionlen))//下鄰空閑區(qū)
{
if(free.baseaddr+free.partionlen==ittmpup->baseaddr)//下鄰空閑區(qū)上鄰空閑區(qū)
{
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen+ittmpup->partionlen;
freetable.erase(ittmpup);//刪除上鄰空閑區(qū)
cout<<“回收作業(yè)所占的內(nèi)存成功!“< return;
}
else//下鄰空閑區(qū)但不上鄰空閑區(qū)
{
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen;
cout<<“回收作業(yè)所占的內(nèi)存成功!“< return;
???????
}
???

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????573497??2017-11-16?15:27??Manage\Debug\Manage.exe

?????文件?????828488??2017-11-16?15:27??Manage\Debug\Manage.ilk

?????文件?????326908??2017-11-16?15:27??Manage\Debug\Manage.obj

?????文件????2423976??2017-11-16?14:38??Manage\Debug\Manage.pch

?????文件????1164288??2017-11-16?15:27??Manage\Debug\Manage.pdb

?????文件??????91136??2017-11-16?15:27??Manage\Debug\vc60.idb

?????文件?????135168??2017-11-16?15:27??Manage\Debug\vc60.pdb

?????文件???????8017??2017-11-16?15:38??Manage\Manage.cpp

?????文件???????4284??2017-11-09?16:20??Manage\Manage.dsp

?????文件????????520??2017-11-09?16:06??Manage\Manage.dsw

?????文件??????41984??2017-11-16?15:38??Manage\Manage.ncb

?????文件??????53760??2017-11-16?15:38??Manage\Manage.opt

?????文件???????1282??2017-11-16?15:28??Manage\Manage.plg

?????目錄??????????0??2017-11-16?15:27??Manage\Debug

?????目錄??????????0??2017-11-16?15:38??Manage

-----------?---------??----------?-----??----

??????????????5653308????????????????????15


評論

共有 條評論