《网络操作系统》
课 程 设 计 报 告 书
题
学
目: 请求调页存储管理方式的模拟
号:
081007323
学生姓名:
尚 卫 民
指导教师:
张 春 风
2010 年 12 月 9 日
目录
一. 实验内容 ................................................. 错误!未定义书签。
二. 实验目的 ................................................. 错误!未定义书签。
三. 设计思想 ................................................. 错误!未定义书签。
四. 程序流程图 ............................................... 错误!未定义书签。
五. 程序清单及使用说明 ....................................... 错误!未定义书签。
六. 运行结果及分析 ........................................... 错误!未定义书签。
七. 总结 ..................................................... 错误!未定义书签。
一、 实验内容
1.假设每个页面中可存放 10 条指令,分配给作业的内存块数为 4。
2.用 C 语言或 C++语言模拟一个作业的执行过程,该作业共有 320 条指令,即它的地
址空间为 32 页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在
内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,
此时需记录缺页的次数,并将相应页调入内存。如果 4 个内存块均已装入该作业,则需进行
页面置换,最后显示其物理地址,并转下一条指令。
在所有 320 指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
3.置换算法:请分别考虑最佳置换算法(OPT)、先进先出(FIFO)算法和最近最久
未使用(LRU)算法。
4.作业中指令的访问次序按下述原则生成;
50%的指令是顺序执行的;
25%的指令是均匀分布在前地址部分;
25%的指令均匀分布在后地址部分。
具体的实现办法是:
(1)在[0,319]之间随机选取一条起始执行指令,其序号为 m;
(2)顺序执行下一条指令,其序号为 m+1 条指令;
(3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为 m1;
(4)顺序执行下一条指令,即序号为 m1+1 的指令;
(5)通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为 m2;
(6)顺序执行下一条指令,则序号为 m2+1 的指令;
(7)重复跳转到前地址部分,顺序执行,跳转到后地址部分;顺序执行的过程,直至
执行 320 条指令。
二、 实验目的
1.通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。
2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实
现过程的理解。
3.掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比
较它们的效率。
三、 设计思想
在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲
空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对
换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。在这一过程中,选择换出
页面的算法称为页面置换算法。一个好的页面置换算法,应具有较低的页面更换频率。页面
置换算法的好坏,将直接影响到系统的性能。以下分别是实验要求的两个页面置换算法的介
绍及设计思想。
(1)先进先出法(First In First Out):
该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。
在该算法的模拟过程中,每当页面被置换进入内存时,将置换页面所在的物理块中访问
标记设为-1;并且每执行一次指令,便将物理块的访问标记自动加 1,需要置换时将访问标
记最大的物理块中的页面置换出去,这样能防止当物理块访问标记出现两个以上相同的值的
错误执行,更好地模拟了先进先出法;
(2)最近最久未使用(Least Recently Used):
该算法以最近的过去作为不久将来的近似, 将过去最长一段时间里不曾被使用的页面
置换掉。
在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的
页面),便将其物理块访问标记置为-1。以后每执行一条指令,便将物理块中各页面的访问
标记加 1,需置换时访问标记最大的便是将要被置换的。
(3)最佳置换算法(OPT):
发生缺页时,有些页面在内存中,其中有一页见很快被访问(也包含紧接着的下一条
指令的那页),而其他页面则可能要到 10、100 或者 1000 条指令后才会被访问,每个页面
都可以用在该页面首次被访问前所要执行的指令数进行标记。
最佳页面置换算法只是简单地规定:标记最大的页应该被置换。如果某页在八百万条指
令内不会被使用,另一页在 600 万条指令内不会被使用,则置换前一个页面,从而把因需
要调回这一页发生的缺页推到将来,越远越好。这个算法唯一的一个问题就是它无法实现。
当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可
能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。
四、 程序流程图及数据结构
内存物理块
320 条待执行指
输入一个随机数
1-319
显示随机产生的指令执行
顺序和页面的调用顺序
选择调页存储算法
LRU 算法
FIFO 算法
OPT
程序结束
数据结构:
typedef struct BLOCK//声明一种新类型——物理块类型
{
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
//程序初始化函数
}BLOCK;
int count;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储 320 条随机数
BLOCK block[size]; //定义一大小为 4 的物理块数组
void init( );
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace( );//查找是否有空闲物理块
int findReplace( );//查找应予置换的页面
void display ( );//显示
void Random( );//产生 320 条随机数,显示并存储到 temp[320]
void pagestring( );//显示调用的页面队列
void OPT( );//OPT 算法
void LRU( );// LRU 算法
void FIFO( );//FIFO 算法
五、 程序清单
#include
#include
#include
#include
#define size 4
typedef struct BLOCK//声明一种新类型——物理块类型
{
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
}BLOCK;
int count;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储 320 条随机数
BLOCK block[size]; //定义一大小为 4 的物理块数组
void init( );
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace( );//查找是否有空闲物理块
int findReplace( );//查找应予置换的页面
void display ( );//显示
//程序初始化函数
void Random( );//产生 320 条随机数,显示并存储到 temp[320]
void pagestring( );//显示调用的页面队列
void OPT( );//OPT 算法
void LRU( );// LRU 算法
void FIFO( );//FIFO 算法
void init( )
{
for(int i=0;iblock[pos].accessed)
pos = i;//找到应予置换页面,返回 BLOCK 中位置
}
return pos;
}
void display( )
{
for(int i=0; i>count;
cout<<"******按照要求产生的 320 个随机数:*******"<