基本分页存储管理的模拟实现2Word文档格式.docx
《基本分页存储管理的模拟实现2Word文档格式.docx》由会员分享,可在线阅读,更多相关《基本分页存储管理的模拟实现2Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
typedefstructLNode{
intf;
//进程号
charname[8];
//进程名
intsize;
//进程大小
intn;
//进程页数
intye[100];
//页表,下标表示页号,内容表示进程各页所在物理块
structLNode*next;
}LNode,*LinkList;
二、各个功能模块
三、主要功能模块流程图
四、系统测试
主界面:
(显示程序的各个功能块)
1、选择1,运行界面如下:
(选择1,输入进程名,显示内存物理块分配情况)
2、选择2,运行界面如下:
(显示2回收进程,若进程名输入错误,则显示进程不存在,)
3、选择3,运行界面如下:
(显示进程r的内存使用情况,0表示未用)
五、结论
在这次课程设计中,我清楚的认识理论到到实践的重要性,经过实际的动手操作不仅提高了我的动手能力还提高了我把理论转化成实践的能力。
实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):
如ye[100]
六、源程序及系统文件使用说明
#include"
stdio.h"
stdlib.h"
string.h"
conio.h"
#include<
ctime>
//#include<
string>
//#definey0;
charA[100];
//内存物理块,0:
未使用,
intmax=99;
//记录内存的物理块数,值为A[100]最大下标
intcount=100;
//记录内存未使用物理块数
charname;
//进程名
intye[100];
/*进程各页所在物理块,页表实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):
*/
//内存初始化
voidCreatA()
{
inti=0;
for(i=0;
i<
=max;
i++)
A[i]=0;
}
//建立新进程
voidNewNode(LinkList&
L)
charch;
inti;
intm;
LinkListp;
LinkListnew_node;
printf("
\n*****输入进程名称:
*****"
);
ch=getche();
p=L;
while(p!
=NULL)//查找进程名是否重复
{
if(p->
name!
=ch)
p=p->
next;
else
{
printf("
\n*****进程名%c已存在,请重新输入:
*****"
ch);
ch=getche();
p=L;
//p重新指向头结点
}
}
\n*****输入进程%c的页数:
scanf("
%d"
&
i);
while(i<
1)
printf("
\n*****请重新输入进程%c的页数:
scanf("
if(i>
count)
\n*****内存物理块不足,新建进程%c失败*****\n\n"
getch();
else
new_node=(LinkList)malloc(sizeof(LNode));
new_node->
name=ch;
n=i;
next=NULL;
count-=i;
m=0;
for(i=0;
i<
if(A[i]==0&
&
m<
new_node->
n)
{
A[i]=new_node->
name;
new_node->
ye[m]=i;
m++;
}
if(L==NULL)
L=new_node;
else
{
p=L;
//查找最后一个节点
while(p->
next!
=NULL)
{
p=p->
}
p->
next=new_node;
}
//回收进程,释放内存
voidFreeNode(LinkList&
LinkListp,q;
*****请输入要删除的进程名称:
//查找进程ch;
用p记录
q=p;
name==ch)
break;
q=p;
if(p==NULL)
\n*****进程%c不存在*****\n"
{
for(inti=0;
p->
n;
i++)
A[p->
ye[i]]=0;
count+=p->
name==q->
name)//要删除的是头结点
L=p->
q->
next=p->
//输出内存物理块分配情况
voidPrintf(LinkListL)
\n*****内存物理块分配情况:
*****\n"
LinkListp=L;
\n*****各进程信息:
*****进程名称\t进程页数\t所用物理块*****\n"
%c\t\t%d\t\t"
p->
name,p->
n);
%d,"
ye[i]);
\n"
p=p->
//显示内存块使用情况,不分进程
voidshowit()
\n☆***☆***☆***☆***☆***☆***☆\n"
|☆◇☆内存物理块分配情况☆◇☆|\n"
{if(A[i]!
=0)
%c\t"
A[i]);
else{printf("
%d\t"
if(i%10==9)
voidmain()
CreatA();
\n***☆***☆*基本分页存储管理的模拟实现*☆***☆***\n"
LinkListL=NULL;
do
\n☆***☆***☆***☆**菜单**☆***☆***☆***☆\n"
printf("
1添加进程\n"
2回收进程\n"
3内存使用情况\n"
4退出程序\n"
☆***☆***☆***☆***☆***☆***☆***☆***☆\n"
请输入你的选择(select):
"
switch(i){
case1:
NewNode(L);
//建立新的进程
Printf(L);
//输出内存物理块分配情况和各进程概况
break;
case2:
FreeNode(L);
//删除某进程
Printf(L);
//输出内存物理块分配情况和各进程概况
case3:
showit();
//显示当前内存的使用情况
case4:
exit(4);
}while(i!
=0);