zoukankan      html  css  js  c++  java
  • 内存中:请求调页存储管理方式的模拟

     

     

     

    实 验 报 告(三)

     

     

    课程名称 操作系统实验

    学生学院 计算机学院

    专业班级 17网络工程一班

    学生姓名 陈鸿

    指导教师 林穗

     

    2019 11 23

     

     

     

     

     

     

     

     

     

     

     

     

     

    实验三 请求调页存储管理方式的模拟

     

    一、实验目的

    通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。

    二、实验内容

    1)假设每个页面中可存放10条指令,分配给作业的内存块数为4

    2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

    3)置换算法:采用先进先出(FIFO)、最近最久未使用(LRU)和最佳置换(OPT)算法置换算法。

    4)通过随机数产生一个指令序列,共320条指令。

    1)指令的地址按下述原则生成:

    50%的指令是顺序执行的;

    25%的指令是均匀分布在前地址部分;

    25%的指令是均匀分布在后地址部分;

    具体的实施方法是:

    [0319]的指令地址之间随机选取一起点m

    顺序执行一条指令,即执行序号为m+1的指令;

    在前地址[0m-1]中随机选取一条指令并执行,该指令的序号为m1

    顺序执行一条指令,其序号为m1+1的指令;

    在后地址[m1+2319]中随机选取一条指令并执行,该指令的序号为m2

    顺序执行一条指令,其序号为m2+1的指令;

    重复上述步骤①~⑥,直到执行320次指令。

    2)将指令序列变换为页地址流

    设页面大小为1K 用户虚存容量为32K。在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:

    0条~第9条指令为第0页(对应虚存地址为[09]);

    10条~第19条指令为第1页(对应虚存地址为[1019]);

    ……

    ……

    310条~第319条指令为第31页(对应虚存地址为[310319])。

    按以上方式,用户指令可组成32页。

     

     

    三、实现思路

     

    (1)先进先出法(First In First Out):

    该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。

    在该算法的模拟过程中,每当页面被置换进入内存时,将置换页面所在的物理块中访问标记设为-1;并且每执行一次指令,便将物理块的访问标记自动加1,需要置换时将访问标记最大的物理块中的页面置换出去,这样能防止当物理块访问标记出现两个以上相同的值的错误执行,更好地模拟了先进先出法;

     

    (2)最近最久未使用(Least Recently Used):

    该算法以最近的过去作为不久将来的近似, 将过去最长一段时间里不曾被使用的页面置换掉。

    在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的页面),便将其物理块访问标记置为-1。以后每执行一条指令,便将物理块中各页面的访问标记加1,需置换时访问标记最大的便是将要被置换的。

     

    (3)最佳置换算法(OPT):

    从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。

     

     

     

    四、主要的数据结构(展开批注可查看源代码)

     

    typedef struct 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 main( )

     

    五、算法流程图

     

     

     

    六、运行与测试

    产生随机数:

    FiFo:

     

    七、总结

    思考

    如果增加分配给作业的内存块数,将会对作业运行过程中的缺页产生什么影响?

     

    M=3时FIFO的命中率为:26.6667%  M=3时LRU的命中率为:30%

    M=4时FIFO的命中率为:36.6667%  M=4时LRU的命中率为:36.6667%

    M=5时FIFO的命中率为:50%  M=3时LRU的命中率为:46.6667%

    M=6时FIFO的命中率为:66.6667%  M=6时LRU的命中率为:63.3333%

     

    当分配给作业的内存块数增加时,缺页率将会降低

     

     

     

     

    为什么一般情况下,LRU具有比FIFO更好的性能?

     

    先进先出置换算法(FIFO):是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。 

     

    最近最久未使用(Least Recently Used):该算法以最近的过去作为不久将来的近似,将过去最长一段时间里不曾被使用的页面置换掉。在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的页面),便将其物理块访问标记置为-1。以后每执行一条指令,便将物理块中各页面的访问标记加1,需置换时访问标记最大的便是将要被置换的。

     

    FIFO 算法将页面进入内存后的时间长短作为淘汰依据,而LRU则是以使用频率作为淘汰依据,一般情况下,LRU之所以比FIFO具有更好的性能是因为长时间驻留并不一定代表不使用,FiFO的淘汰机制有可能增加了缺页率。

    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    postman参数化—上个接口返回数据作为下个接口入参
    postman设置token为全局变量
    postman请求https协议接口
    安装VMware 置灰正确解决办法
    Cron 表达式详解
    Jmeter + ant + jenkins轻量级接口自动化测试
    Jmeter CSV 参数化/检查点/断言
    Android专项测试-cpu,流量
    Android专项测试-获取启动时间
    腾讯云测试工程师--面试总结
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14923891.html
Copyright © 2011-2022 走看看