预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共25页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

[汇集]虚拟存储器课程设计(完整版) (文档可以直接使用,也可根据实际需要修改使用,可编辑欢迎下载) 石家庄经济学院 课程设计报告 (学院)系:信息工程学院 专业:软件工程 姓名: 班级: 学号: 指导教师: 2012年1月15日 操作系统课程设计报告姓名学号日期实验室152机房指导教师设备编号53设计题目虚拟存储器一、设计内容 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。二、设计目的 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实习帮助同学理解在分页式存储管理中怎样实现虚拟存储器。三、设计过程 数据结构设计 作业页表以一个结构体数组实现,每个表项为一个包含标志位、主存块号、磁盘位置、修改标志、time五个变量的结构体,定义P[M]数组为装入到主存的页面,po为正在访问或者要装入的页面, 用结构体数组来表示页面。 结构体数组及整型变量如下: structpage//页表 { longflag;//标志 longblock;//主存块号 longdisk;//在磁盘上的位置 longdirty;//修改标志 inttime; }pagelist[SizeOfPage]; longP[M]为进入主存的页面建立的数组。 2、算法设计 主函数main() 功能:根据用户所输入的随机数,进行地址转换,使用fifo页面调度算法,以及使用lru页面调度算法。 流程图:见图1 图1 (2)初始化函数page() 功能:根据实验的要求,对页表初始化。 (3)地址变换函数work() 功能:实现模拟分页式存储管理中硬件的地址转换和产生缺页中断的功能。若输入的页面在主存,则根据公式计算出绝对地址,否则输出“*该页页号”。 流程图:见图2 图2(4)先进先出函数workfifo() 功能:实现fifo算法,用FIFO页面调度算法把该作业中最先进入主存的一页调出,然后装载新的页面。 流程图:见图3 图3 (5)GetMax()函数 功能:比较进入主存中页time的大小,得到最近最少用的页号,从而得到要调出的页号,返回值是可,即在数组中的位置。 流程图:见图4 图4 (6)worklru()函数 功能:实现lru算法,淘汰该作业中距现在最久没被访问过的那页,然后装载新的页面。 流程图:见图5 图5 四、程序实现及运行结果 (1)源程序见源程序\源程序\源程序.cpp (2)运行结果 1.菜单及退出 2.进行地址变换操作 3.进行先进先出操作 输入4098 4.进行最近最少用操作 输入4098 五、设计总结 这次操作系统课程设计是“模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断”,题目中包括了三个题目,“求绝对地址和模拟产生中断”“利用FIFO算法处理中断”“利用LRU算法处理中断”。 本次试验我获得了很多经验,拿到题目之后及时的去读懂题目的要求,并在课余的时候和同学相互讨论题目之中的一些比较难的算法,大家在一起讨论,很容易明白实验内容和如何去实现要求。按照老师说的先把结构研究出来,然后再写程序,让我更清楚的知道怎样去实现实验中的内容。六、指导教师评语及成绩 评语: 成绩: 年月日 附源程序 #include<stdio.h> #include<string> #defineSizeOfPage7 #defineSizeOfBlock128 #defineM4 structpage//页表 { longflag;//标志 longblock;//主存块号 longdisk;//在磁盘上的位置 longdirty;//修改标志 inttime; } pagelist[SizeOfPage]; longk;//队列标记 longP[M];//主存页号数组 intGetMax()//获取要调出的页号 { intmax=-1; inttag=0; for(k=0;k<M;k++) { if(pagelist[P[k]].time>max) { max=pagelist[P[k]].time; tag=k; } } returntag; } voidpage() { k=0; P[0]=0;P[1]=1;P[2]=2;P[3]=3; memset(pagelist,0,sizeof(pagelist)); pagelist[0].fla