基本分页存储管理的模拟实现2.docx
- 文档编号:6009042
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:12
- 大小:297.50KB
基本分页存储管理的模拟实现2.docx
《基本分页存储管理的模拟实现2.docx》由会员分享,可在线阅读,更多相关《基本分页存储管理的模拟实现2.docx(12页珍藏版)》请在冰豆网上搜索。
基本分页存储管理的模拟实现2
基本分页存储管理的模拟实现
学院
专业
学号
学生姓名
指导教师姓名
2014年03月18日
一、设计目的与内容
设计的目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1.进一步巩固和复习操作系统的基础知识。
2.培养学生结构化程序、模块化程序设计的方法和能力。
3.提高学生调试程序的技巧和软件设计的能力。
4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
设计内容:
根据设计要求实现对基本分页存储管理的模拟
设计要求:
1.选择恰当的数据结构表示页表
2.进程名,进程所需页数,进程进行的操作(装入/退出)等操作可有键盘输入,也
可从文件读出。
3.每进行一次进程的装入或者退出操作,就显示出操作执行后内存中各页的分配情
况。
所采用的数据结构:
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"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include
//#include
//#definey0;
charA[100];//内存物理块,0:
未使用,
intmax=99;//记录内存的物理块数,值为A[100]最大下标
intcount=100;//记录内存未使用物理块数
typedefstructLNode{
charname;//进程名
intn;//进程页数
intye[100];/*进程各页所在物理块,页表实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):
*/
structLNode*next;
}LNode,*LinkList;
//内存初始化
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重新指向头结点
}
}
printf("\n*****输入进程%c的页数:
*****",ch);
scanf("%d",&i);
while(i<1)
{
printf("\n*****请重新输入进程%c的页数:
*****",ch);
scanf("%d",&i);
}
if(i>count)
{
printf("\n*****内存物理块不足,新建进程%c失败*****\n\n",ch);
getch();
}
else
{
new_node=(LinkList)malloc(sizeof(LNode));
new_node->name=ch;
new_node->n=i;
new_node->next=NULL;
count-=i;
m=0;
for(i=0;i<=max;i++)
if(A[i]==0&&m
{
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->next;
}
p->next=new_node;
}
}
}
//回收进程,释放内存
voidFreeNode(LinkList&L)
{
LinkListp,q;
charch;
printf("*****请输入要删除的进程名称:
*****");
ch=getche();
p=L;//查找进程ch;用p记录
q=p;
while(p!
=NULL)
{
if(p->name==ch)
break;
else
{
q=p;
p=p->next;
}
}
if(p==NULL)
{
printf("\n*****进程%c不存在*****\n",ch);
getch();
}
else
{
for(inti=0;i
A[p->ye[i]]=0;
count+=p->n;
if(p->name==q->name)//要删除的是头结点
{
L=p->next;
}
else
{
q->next=p->next;
}
}
}
//输出内存物理块分配情况
voidPrintf(LinkListL)
{
inti=0;
printf("\n*****内存物理块分配情况:
*****\n");
LinkListp=L;
printf("\n*****各进程信息:
*****\n");
printf("*****进程名称\t进程页数\t所用物理块*****\n");
while(p!
=NULL)
{
printf("%c\t\t%d\t\t",p->name,p->n);
for(i=0;i
printf("%d,",p->ye[i]);
printf("\n");
p=p->next;
}
}
//显示内存块使用情况,不分进程
voidshowit()
{
inti=0;
printf("\n☆***☆***☆***☆***☆***☆***☆\n");
printf("|☆◇☆内存物理块分配情况☆◇☆|\n");
printf("\n☆***☆***☆***☆***☆***☆***☆\n");
for(i=0;i<=max;i++)
{if(A[i]!
=0)
printf("%c\t",A[i]);
else{printf("%d\t",A[i]);}
if(i%10==9)
printf("\n");
}
}
voidmain()
{
CreatA();
printf("\n***☆***☆*基本分页存储管理的模拟实现*☆***☆***\n");
LinkListL=NULL;
inti=0;
do
{
printf("\n☆***☆***☆***☆**菜单**☆***☆***☆***☆\n");
printf("1添加进程\n");
printf("2回收进程\n");
printf("3内存使用情况\n");
printf("4退出程序\n");
printf("☆***☆***☆***☆***☆***☆***☆***☆***☆\n");
printf("请输入你的选择(select):
");
scanf("%d",&i);
switch(i){
case1:
{
NewNode(L);//建立新的进程
Printf(L);//输出内存物理块分配情况和各进程概况
break;
}
case2:
{
FreeNode(L);//删除某进程
Printf(L);//输出内存物理块分配情况和各进程概况
break;
}
case3:
{
showit();//显示当前内存的使用情况
break;
}
case4:
exit(4);
break;
}
}while(i!
=0);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 分页 存储 管理 模拟 实现