操作系统上机实验之页面置换程序模拟

任务三:页面置换程序模拟
基本要求:要求使用随机量,比如进程的数量(在1-10之间)、进程逻辑页数量(虚拟空间大小)、页面访问地址和数量等是随机量,要求计算缺页率。

1、基本理论
页式存储管理和页面置换的基本理论描述。
页式存储管理指将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
页面置换指当 CPU 访问的页面不在物理内存时,便会产生一个缺页中断,请求操作系统将所缺页调入到物理内存,当出现缺页异常,需调入新页面而内存已满时,选择被置换的物理页面,也就是说选择一个物理页面换出到磁盘,然后把需要访问的页面换入到物理页。
衡量页面置换算法的性能指标有哪些?常用置换算法有哪些?
衡量页面置换算法的性能指标有缺页数,缺页率和命中率。
常用置换算法有:最佳页面置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使用的置换算法(LRU)、时钟页面置换算法(Clock)
2、实验的目的
通过模拟页面置换功能,加深关于页式存储管理和页面置换的理解,明确不同调度算法的优缺点,加深操作系统基本原理的理解。
3、实验平台
编程语言和环境
编程语言:C语言
编程环境:C-Free
4、主要数据结构和功能模块
if(c ==‘F’) //FIFO页面置换
{
for(i = 0; i < pageNum; i++)
{
if(Search(page[i].num,memory)<0) //若在主存中没有找到该页面
{
missNum++;
memory[curmemory].num = page[i].num;
print(memory);
curmemory = (curmemory+1) % memoryNum;
}
}
missRate = (float)missNum / pageNum;
printf(“缺页次数:%d缺页率:%f\n”,missNum,missRate);
}
if(c ==‘O’) //OPT页面置换
{
for (i = 0; i < pageNum; i++)
{
if (Search(page[i].num, memory) < 0) //若在内存中没有找到该页面
{
//找出未来最长时间内不再被访问的页面
int index;
int optimal = 0;
for (int k = 0; k < memoryNum; k++)
{
if (memory[k].num == -1)
{
curmemory = k;
break;
}
index = 0; //页面k在未来tem时间内不会出现
int j;
for (j = i + 1; j < pageNum; j++)
{
if (page[j].num == memory[k].num)
{
if (index > optimal)
{
optimal = index;
curmemory = k;
}
break;
}
else index++;
}
if (j == pageNum)
{
optimal = index;
curmemory = k;
}
}
missNum++;
memory[curmemory].num = page[i].num;
print(memory);
}
}//end for
if (c == ‘L’) //LRU页面置换算法
{
for (i = 0; i < pageNum; i++)
{
int rec = Search(page[i].num, memory);
if (rec < 0) //若在内存中没有找到该页面
{
missNum++;
for (int j = 0; j < memoryNum; j++) //找出最近最久未使用的页面
if (memory[j].time == -1)
{ curmemory = j;break; }
else
if (memory[j].time > memory[curmemory].time)
curmemory = j;
memory[curmemory].num = page[i].num;
memory[curmemory].time = 0;
print(memory);
}
else memory[rec].time = 0;
for (int j = 0; j < memoryNum; j++) //内存中的所有页面等待时间+1
if (memory[j].num != -1)
memory[j].time++;
}//end for
missRate = (float)missNum / pageNum;
printf(“缺页次数:%d 缺页率: %f\n”, missNum, missRate);
}//end if
5、问题分析和解决
问题一:FIFO算法是否比随机替换算法优越?LRU算法比FIFO 算法优越多少?
解决方法:FIFO算法比随机替换算法优越一些;LRU算法比FIFO算法的效率高5%~10%,由理论知识可知,页面访问序列具有局部性,而FIFO算法并不符合实际情况。
问题二:LRU算法和最优算法有何差距?
解决方法:LRU算法是所有算法中效率最接近最优算法的算法,由理论知识可知,最优算法是理想的算法,现实中几乎不可能实现,只能作为一种测评标准,LRU算法是效率较高的可实现置换算法,但其硬件要求较高,如果规模较小,则略显麻烦。
问题三:Clock算法和LRU算法有何差距?
解决方法:Clock算法和LRU算法从结果来看有些差距,Clock算法是使用软件的方式实现LRU算法中硬件的功能,从而在执行效率上会稍弱一些。
6、实验结果分析
A.先进先出(FIFO)页面置换算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO 算法并不能保证这些页面不被淘汰。采用 FIFO 算法进行页面置换。当进程第一次访问页面 2 时,将把第 7 页换出,因为它是最先被调入内存的;在第一次访问页面 3 时,又将把第 0 页换出, 因为它在现有的 2, 0, 1 三个页面中是最老的页。 由下图可以看出,利用 FIFO 算法时进行了 12 次页面置换,比最佳置换算法正好多一倍。
B.最佳(Optimal)置换算法所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
C.最近最久未使用LRU(Least Recently Used)置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU 置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最久未使用的页面予以淘汰。
7、实验小结
这次实验的题目是页面置换算法,属于存储器管理的内容。通过这次实验,我对页面置换算法的了解更为深刻。此次实验涉及到了常见的五种算法,包括OPT、随机置换、FIFO、LRU、Clock算法,每种算法都有各自的优缺点。实验中比较容易的是编写实现引用串的函数,比较困难是如何实现各种算法,需要我们掌握每个算法的流程和原理,通过查阅资料和向同学请教最终完成了这个实验,让我觉得受益匪浅。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

次郎不小

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值