- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三分页管理的主存分配和回收
实验三 分页管理的主存分配和回收
班级: 学号: 姓名:
1.实验内容
主存的分配和去配
2.实验目的
加深对分页管理概念的理解
深入了解分页管理如何进行分配和去配
3.实验设计
3.1 数据结构设计
分页存储管理中,系统要建立一张主存物理块表来记录页框的状态,其中包含的信息有内存总量、已用空间、剩余空间、进程总数、已使用内存块数、当前内存是否有进程。用0表示内存块空闲,1表示内存块在使用。
#define N 100 // 共有100个内存块
int process[N][N+1]; // 存放每个进程的页表
int block[N]; // 内存块状态标志数组,0:空闲,1:使用
int blockCount; // 记录当前内存剩余空间
int processCount; // 记录当前进程数
进行主存分配时,先查看内存块的使用情况,看空闲块数是否满足用户进程的需要。
if(processCount0)
{cout内存详细使用情况如下:\n;
for(int i=0;iN;i++)
{if(process[i][0]0)
{cout进程号:i\n占用内存块:process[i][0];
for(int j=1,count=0;j=process[i][0];j++)
{printf(%2d ,process[i][j],count++);
if(count==15)
{putchar(\n);
printf( );
count = 0;
}
}
putchar(\n);
}
}
}
else
cout当前内存无进程!\n;
空闲块数满足用户需求时,可以创建新的进程,注意进程号不能过大。要将标志0改为1,表示占用。
bool createProcess()
{int pid, pages, k = 0;
loop:cout请输入进程号(小于N)和所需页面数:;
scanf(%d%d, pid, pages);
if(pid99)
{cout错误!进程号过大!\n;
goto loop;
}
if(pagesblockCount)
return false;
blockCount -= pages;
process[pid][0] = pages;
for(int i=1; i=pages; i++)
{while (block[k]==1 k100)
k++;
process[pid][i] = k;
block[k] = 1;
k++;
}
processCount++;
return true;
}
进行主存去配时,首先查看当前是否存在正在进行的进程,若有,则输入要结束的进程号,将占有标志改为0。
bool endProcess()
{int pid, pages;
if(processCount 1)
{ cout当前内存没有进程!\n\n;
return false;
}
printf(当前内存中的进程有%d 个,进程号为:, processCount);
for(int i=0;iN;i++)
if (process[i][0] 0)
printf(%2d , i);
putchar(\n);
cout请输入您要结束的进程号(小于N):;
cinpid;
pages = process[pid][0];
if(pages==0)
{cout对不起!该进程不存在!\n;
return false;
}
for(int j=1;jpages;j++)
{block[process[pid][j]] = 0;
process[pid][j] = -1;
}
process[pid][0] = 0;
processCount--;
blockCount += pages;
return true;
}
3.2 求解方法
进行主存分配时,先查空闲块数是否满足用户进程的要求,若不能,则令进程等待;若能,则查位示图,找出为“0”的位,置占用标志,从空闲块数中减去本次占用块数。进行主存去配时,根据页表可知要释放的块号和块数,计算出其在位示图的位置,将对应位置的标志置0,表示该块已空闲。还要将释放的块数累加到当前空前块总数中。
程序结构如下
4.实验结果
(1)主菜单界面
(2)选择1,创建进程
(3)选择3,查看内存
(4)选择2,结束进程
(5)选择0,退出
5.
文档评论(0)