武汉理工大学操作系统课内实践报告.docx
《武汉理工大学操作系统课内实践报告.docx》由会员分享,可在线阅读,更多相关《武汉理工大学操作系统课内实践报告.docx(12页珍藏版)》请在冰点文库上搜索。
武汉理工大学操作系统课内实践报告
学生学号
实践课成绩
课内实践
实践内容请求页式内存管理的分配与回收
开课学院计算机科学与技术学院
指导老师姓名
学生姓名
学生专业班级
—学年第一学期
请求页式内存管理的分配与回收
1设计目的、功能与要求
1.1设计目的、功能
模拟实现内存管理的分配与回收功能,掌握内存管理的相关内容,对内存的分配与回收有深入的理解。
1.2要求
(1)任选一种计算机高级语言编程实现
(2)选择一种内存管理方案:
动态分区式、请求页式、段式、段页式等
(3)能够输入给定的内存大小,进程的个数,每个进程所需内存空间大小
(4)能够选择分配/回收操作
(5)能够显示进程在内存的存储地址、大小等
(6)显示每次完成内存分配或回收后内存空间的使用情况
2问题的详细描述、需求分析
2.1问题的详细描述
利用c++语言设计程序,模拟页式内存管理的过程。
页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。
基本原理是将各进程的虚拟空间划分成若干个长度相等的页,页式管理把内存空间按页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。
页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。
静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。
系统通过存储页面表、请求表以及页表来完成内存的分配工作。
页表指的是内存中的一块固定存储区。
页式管理时每个进程至少有一个页表。
请求表指的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,描述了物理内存空间的分配使用状况。
2.2需求分析
模拟设计页式内存管理的分配与回收要求能够满足如下的要求:
(1)输入给定的内存大小、当前进程的大小、分配的页面数量及页面的执行顺序,能够选择分配/回收操作;
(2)使用内存管理方案:
请求页式管理;
(3)要求当进程提出申请空间的大小后,显示能否满足申请,显示每次完成内存分配或回收后内存空间的使用情况。
3数据结构、功能设计(功能与框图、功能模块说明)
3.1算法分析
首先,请求表给出进程或作业要求的页面数。
然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。
如果有则首先分配设置页表,并请求表中的相应表项后,按先来先服务算法搜索出所要求的空闲页面,并将对应的页好填入页表中。
3.2数据结构
页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表,并通过请求表将分配内容显示出来,将页表和请求表的内容使用结构体定义如下:
typedefstruct
{
intuse;//0表示没被用
intname;//name表示被哪个进程占用
}node;
typedefstruct
{
intsize;//表示进程的大小
intname;//表示进程号
}progress;
定义内存总大小:
size
定义当前进程大小:
pro.size
定义内存页面数:
intpagenum
定义块的数量:
kuai
定义进程个数:
intpnum
定义进程的编号:
num
定义删除进程的编号:
shanchunum
框图如下:
3.3模块说明
3.3.1主函数
整个程序由两个函数组成,主函数运行了程序中的功能函数,包含对整个内存基本信息的输入,并实现了内存的分配与回收。
3.3.2功能函数
功能函数:
voidaction(inta[],intb[],intnum),使用先进先出页面淘汰算法(FIFO)对页面进行置换。
4开发工具及源程序的主要部分(需对主要代码段附文字注释)
4.1开发平台
(1)使用系统:
Windows7
(2)使用语言:
C++
(3)开发工具:
VisualStudio2010
4.2源程序的主要部分
主函数部分代码:
cout<<"该进程已经被分为"<"<cin>>pagenum[0];
for(i=1;pagenum[i-1]!
=0;i++)
{
cin>>pagenum[i];
}
count=i-1;
action(pagenum,kuai,count);
for(i=0;i<30;i++)
{
pagenum[i]=0;
}
tem=pro[num].size;
for(i=0;i{
if(tem!
=0)
{
if(neicun[i].use==0)
{
neicun[i].use=1;
neicun[i].name=num;
tem--;
}
else
{
continue;
}
}
else
{
break;
}
}
num++;
cout<<"内存占用情况为:
"<cout<<"内存号进程号"<
功能函数:
voidaction(inta[],intb[],intnum)//使用先进先出页面淘汰算法对页面进行置换
{
inti,count=2;
boolflag=true;
cout<<"执行顺序为:
"<for(i=0;i<3;i++)//只使用三块物理内存块
{
b[i]=a[i];
}
cout<<"123"<cout<
cout<
cout<
for(i=3;i{
flag=true;
for(intj=0;j<3;j++)
{
if(b[j]==a[i])
{
flag=false;
break;
}
}
if(flag==false)
{
cout<
continue;
}
else
{
count=count+1;
b[count%3]=a[i];
cout<
}
}
}
5测试用例、运行结果与运行情况分析
5.1测试方法
假定内存的大小为100,输入第一个进程的大小为30,采用先进先出淘汰算法进行置换,输出页面执行顺序。
输入第二个进程大小为50,并同样采用先进先出算法置换,当输入第三个进程大小为30时,显示进程分配失败。
5.2测试结果
6自我评价与总结
本次课内实践旨在模拟实现内存管理的分配与回收功能,掌握内存管理的相关内容,对内存的分配与回收有深入的理解。
通过本次课内实践,我不仅加深了对页式管理的理解,也提高了自己的编程能力。
编程是个长久的过程,平时要多去动手实践,提高自己分析问题、发现问题、解决问题的能力。
做了这么多次的课内实践,大致的过程都熟悉了,每次的动手实践,都调动了我主动学习的积极性,并引导我根据实际编程要求,训练自己实际分析问题的能力及编程能力,养成良好的编程习惯。
在编写程序的过程中,我还翻阅了一些课外资料,并更加详细的阅读了课本,保证在页式管理基本原理透彻了解情况下进行设计,事半功倍,让我认识到磨刀不误砍柴工的道理。
7参考文献
(1)《计算机操作系统教程(第3版)》张尧学史美林张高编著
(2)《C++Primer第六版》B.Lippman著
(3)《深入解析Windows操作系统》M.Russunovich著潘爱民译
本科生课内实践成绩评定表
班级:
姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
年 月 日