操作系统课程设计--存储管理

写在最前面

文中测试数据来自教材“《计算机操作系统(第四版)》汤小丹、梁红兵、哲凤屏、汤子瀛版”中“5.3 页面置换算法”章节例子。不足之处欢迎指出!



设计内容

存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本设计的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
①50%的指令是顺序执行的;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分。
具体的实施方法是:
①在[0,319]的指令地址之间随机选取一起点m;
②顺序执行一条指令,即执行地址为m+l的指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
④顺序执行一条指令,其地址为m’+1;
⑤在后地址[m’+2,319]中随机选取一条指令并执行;
⑥重复上述步骤①~⑤,直到执行320次指令。
(2)将指令序列变换成为页地址流。设:
①页面大小为1K;
②用户内存容量为4页到32页;
③用户虚存容量为32K。
在用户虚存中,按每页存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
… … …
第310条~第319条指令为第31页(对应虚存地址为[310,319])。
按以上方式,用户指令可组成32页。
(3)计算并输出下述各种算法在不同内存容量下的命中率(要为以下各种算法定义数据结构):
①先进先出的算法(FIFO);
②最近最少使用算法(LRU);
③最近最不经常使用算法(NUR/NRU/CLOCK)。
命中率=1-页面失效次数/页地址流长度
在本设计中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
(4)关于随机数产生办法,Linux/UNIX系统提供函数srand()和rand(),分别进行初始化和产生随机数。例如:srand()语句可初始化一个随机数:
a[0]=10rand()/32767319+1,
a[1]=10rand()/32767a[0];
… … …
语句可用来产生a[0]、a[1]、…中的随机数。
在分页系统中,系统允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立一张页面映像表,简称页表。在进程地址空间内所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号,见下图。

在这里插入图片描述


一、总体设计

1.设计思路

(1)通过随机数产生一个指令序列,共320条指令。
(2)将指令序列变换成为页地址流。
(3)计算并输出下述各种算法在不同内存容量下的命中率。

2.设计流程图

在这里插入图片描述

二、详细设计

1.数据结构

(1)页面信息:其中pn为页号,pfn为该页对应的物理块号,counter是NRU算法中的访问位,time是LRU算法中的访问时间段。

typedef struct pl_type
{ 
    int pn;    
    int pfn;    
    int counter;   
    int time;       
}pl_type;

(2)页表项信息:其中pn为页号,pfn为pn页对应的物理块号。

typedef struct pt_struct
{      
    int pn;  
    int pfn;  
}pt_type;

2.变量定义

(1)pl_type pl[total_vp];
该数组为存储页面信息的数组,按每页存放10条指令排列虚存地址形成的一个页面。
(2)pt_type pt[total_vp];
该数组为存储页面信息的数组,每个空间里存一个页表项。
(3)int diseffect;
该变量记录页面置换算法中页面访问未命中的次数。
(4)int a[total_instruction];
存放通过随机数产生的320条指令序列。
(5)int page[total_instruction];
将依次执行的页号存入该数组中。
(6)int offset[total_instruction];
该数组存放的数据为每页的页内地址偏移量。

3.函数定义

(1)void initialize():初始化函数,给每个相关的页面赋值。
(2)void FIFO():计算使用FIFO算法时的命中率。
(3)void LRU():计算使用LRU算法时的命中率。
(4)void NRU():计算使用NRU算法时的命中率。

三、算法分析

1.FIFO算法

先进先出算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。

2.LRU算法

最久没有使用算法。该算法是根据页面调入内存后的使用情况做出决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间time。当需淘汰一个页面时,选择现有页面中time值最大的,即最近最久未使用的页面予以淘汰。

3.NRU算法

NRU算法又称Clock置换算法,当利用该算法时,只需为每页设置一个访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,该访问位被置1.置换算法在选择一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,给予该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。当检查到队列中的最后一个页面时,若其他访问位仍是1,则再返回到队首去检查第一个页面。

三、测试数据及结果

1.测试数据

为了检测算法的准确性,本次测试的数据选取了《计算机操作系统》中的案例的数据,通过输入数据的运行得出了案例中应出现的结果,从而保证了该算法的正确性。其中FIFO算法的测试结果如图3.2,LRU算法的测试结果如图3.4。
在这里插入图片描述
图3.1 教材FIFO算法测试结果图

在这里插入图片描述
图3.2 程序FIFO算法结果测试图
在这里插入图片描述
图3.3 教材LRU算法测试结果图

在这里插入图片描述
图3.4 程序LRU算法结果测试图

2.运行结果

利用Vmare虚拟机的命令,vi进入文件,然后编写代码,运行结果如图:
在这里插入图片描述


结论

从多次运算结果总结,在内存页面数较少(4~5页面)时,3种算法的命中率差别不大,都是50%左右。在内存页面为7~25个页面之间时,3种算法的访问命中率大致在52%至87%之间变化。在内存页面为25~32个页面时,由于用户进程的所有指令基本上都已装入内存,从而命中率已较大。从而算法之间的差别不大。
通过比较上述3种算法,得出NRU算法的命中率最高,LRU算法次之,再就是FIF0算法的结论。

代码及报告获取

方式一:点击蓝字资源地址
方式二:联系768165925(qq或微信同号,不收费)

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java图形化界面实现以下要求,我上传给大家一同分享。 通过随机数产生一个指令序列,共 320 条指令,指令的地址按下述原则生成: (1):在[0,319]的指令地址之间随机选取一起点 m。 (2):顺序执行一条指令,即执行地址为 m+1 的指令 。 (3):在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为 m' 。 (4):顺序执行一条指令,其地址为 m'+1。 (5):在后地址[m'+2,319]中随机选取一条指令并执行。 (6):重复步骤 (1)—(6),直到生成 320 条指令。 2、将指令序列转换为页地址流,比如:页面大小为 1K,用户内存容量 4 页到 32 页,用户虚存容量为 32K;在用户虚存中,按每 K存放 10 条指令排列虚存地址。即 320 条指令在虚存中的存放方式为: 第 0 条-第 9 条指令为第 0 页(对应虚存地址为[0,9])。 第 10 条-第 19 条指令为第 1 页(对应虚存地址为[10,19]) 。 ……………………………… 第 310 条-第 319 条指令为第 31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成 32页。 3、页面大小的取值范围分别为 1K,2K,4K,8K,16K;按照页面大小将指令地址转化为页号;对于相邻相同的页号,合并为一个。 4、分配给程序的内存块数取值范围为 1 块、2块,一直到程序的页面数。 5、分别采用 FIFO 和 LRU 算法对页号序列进行调度,并计算出对应的缺页中断率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值