实验要求

实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
二、实验内容
(1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。
页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。
(2) produce_addstream通过随机数产生一个指令序列,共320条指令。
A、 指令的地址按下述原则生成:
1) 50%的指令是顺序执行的
2) 25%的指令是均匀分布在前地址部分
3) 25%的指令是均匀分布在后地址部分
B、 具体的实施方法是:
1) 在[0,319]的指令地址之间随机选取一起点m;
2) 顺序执行一条指令,即执行地址为m+1的指令;
3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
4) 顺序执行一条指令,地址为m’+1的指令
5) 在后地址[m’+2,319]中随机选取一条指令并执行;
6) 重复上述步骤1)~5),直到执行320次指令
C、 将指令序列变换称为页地址流
在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
。。。。。。
第310条~第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。
(3) 计算并输出下属算法在不同内存容量下的命中率。
1) 先进先出的算法(FIFO);
2) 最近最少使用算法(LRU);

四、运行结果
运行程序:
a、 终端先显示:
Start memory management.
Producing address flow, wait for while, please.
b、 地址流、地址页号流生成后,终端显示:
There are algorithms in the program
1、 Optimization algorithm
2、 Least recently used algorithm
3、 First in first out algorithm
4、 Least frequently used algorithm
Select an algorithm number, please.
用户输入适当淘汰算法的号码,并按回车,若是第一次选择,输出相应的地址页号流。然后输出该算法分别计算的用户内存从2k32k时的命中率,若输入的号码不再14中,则显示:
there is not the algorithm in the program,并重复b。
c、 输出结果后,终端显示 “do you try again with anther algorithm(y/n)”。若键入y则重复b,否则结束。(一般讲四种算法都用过后结束,以便比较)。
五、运行结果讨论
1、 比较各种算法的命中率
2、 分析当用户内存容量增加是对命中率的影响

实验报告

1.实验目的

存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

2.实验内容与要求

①实验内容
(1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。

页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。

在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。

(2) produce_addstream通过随机数产生一个指令序列,共320条指令。
A、 指令的地址按下述原则生成:
1) 50%的指令是顺序执行的
2) 25%的指令是均匀分布在前地址部分
3) 25%的指令是均匀分布在后地址部分

B、 具体的实施方法是:
1) 在[0,319]的指令地址之间随机选取一起点m;
2) 顺序执行一条指令,即执行地址为m+1的指令;
3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
4) 顺序执行一条指令,地址为m’+1的指令
5) 在后地址[m’+2,319]中随机选取一条指令并执行;
6) 重复上述步骤1)~5),直到执行320次指令

C、 将指令序列变换称为页地址流
在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
。。。。。。
第310条~第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。

(3) 计算并输出下属算法在不同内存容量下的命中率。
1) 先进先出的算法(FIFO);
2) 最近最少使用算法(LRU);

②实验要求
运行程序:
a、 终端先显示:
Start memory management.
Producing address flow, wait for while, please.

b、 地址流、地址页号流生成后,终端显示:
There are algorithms in the program
1、 Optimization algorithm
2、 Least recently used algorithm
3、 First in first out algorithm
4、 Least frequently used algorithm
Select an algorithm number, please.
用户输入适当淘汰算法的号码,并按回车,若是第一次选择,输出相应的地址页号流。然后输出该算法分别计算的用户内存从2k32k时的命中率,若输入的号码不再14中,则显示:
there is not the algorithm in the program,并重复b。

c、 输出结果后,终端显示 “do you try again with anther algorithm(y/n)”。若键入y则重复b,否则结束。(一般讲四种算法都用过后结束,以便比较)。法

3.流程图与模块调用

4.实验分析

想要完成操作系统算法,首先要弄清楚操作系统相关的专业术语。弄清各个算法的流程和目的要求。才能模拟出相关算法的过程。
在我的理解中,
为什么要进行页面置换?

在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。

这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断。操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。如果这时内存中有空闲块,就可以直接调入该页面;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换。

先进先出法(FIFO)
算法描述:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进入内存的页,先被换出。先进先出法把一个进程所有在内存中的页按进入内存的次序排队,淘汰页面总是在队首进行。如果一个页面刚被放入内存,就把它插在队尾。

最近最少使用置换法(LRU)
算法描述:最近最少使用置换法(LRU)是选择在最近一段时间里最久没有使用过的页面予以淘汰。借鉴FIFO算法和OPT算法,以“最近的过去”作为“不久将来”的近似。

5.运行情况

①程序正常运行测试:


② 比较各种算法的命中率、分析当用户内存容量增加是对命中率的影响:
利用如下语句,可以直观对比区别:

for i in range(2,33):print('memory={} FIFO/LRU命中率:{} / {}'.format(i,FIFO(i),LRU(i)))


由上图可以直观看出:
①当用户内存容量增加对命中率会相应增加;
②对于FIFO与LRU两种算法,在内存容量为20左右时,命中率差不多;
在内存容量小于20时,FIFO算法命中率更高;
在内存容量大于20时,LRU算法命中率更高;

6.实验体会

通过本次实验,我深刻的理解了操作系统中资源的分配方式和存储管理的调度方式。操作系统实验重在理解每一个算法的意图和目的,那么就选择适当的数据结构模拟过程就可以完成相关算法了。

对于FIFO算法,这个算法原理简单,就是先进先出。对于这个结构最好采用的就算队列了,对于python而言,我用的是list集合,每次添加数据的时候添加到第0位置(list的insert(0,num)),而如果移除的时候移除末尾的页数(list的pop())。在这个过程中,每执行一条指令的时候,如果这个指令对应的地址(指令/10)在list中,那么就命中,否则就是缺页,需要移除尾,在0位置添加元素。

对于LRU算法,这个算法跟FIFO其实还是挺像的,但是有一点区别,最近最少使用。也就是说在一个正常序列的时候如果命中的话,就会把这个地址的页号移动到首位(或者链表首位)。而如果缺页的时候,要把这个链表的末尾位置移除,因为末尾的元素是最近用的最少的(很久前才有的)。对于数据结构,依然选择list。其实这个是典型的堆栈的数据结构,利用python的list的pop()和append()就可以完美完成。

本次实验采用python完成,IDE是pycharm,python的列表list的insert()、pop()、append()方法可以把列表很好的模拟成堆栈或者队列,这些在算法的编写过程中否起到了很大的作用。

【附】实验代码

import randomnum = [0 for i in range(0, 325)]  # 生成随机数会有溢出,所以数组长度设置大一点
page = [0 for i in range(0, 320)]# 按照题目的算法生成随机数
def createRandomNum():i = 0while i < 320:m = random.randint(0, 318)num[i] = m + 1  # 顺序执行了一条指令m1 = random.randint(0, m + 1)i += 1num[i] = m1  # 在[0,m+1]之间执行了一条指令i += 1num[i] = m1 + 1  # 顺序执行了一条指令if m1 < 317:m2 = random.randint(m1 + 2, 319)i += 1num[i] = m2  # 在[m1+2,319]之间执行了一条指令print('**********生成320个随机数**********')str = ''for index, i in enumerate(num):if index < 320:str += '{}\t'.format(i)if (index + 1) % 20 == 0:str += '\n'print(str)# 将指令序列变换称为页地址流
def changeAsPage():for index, i in enumerate(num):if index < 320:page[index] = int(i / 10)print('**********转化为320个页码数**********')str = ''for index, i in enumerate(page):str += '{}\t'.format(i)if (index + 1) % 20 == 0:str += '\n'print(str)# 先进先出法
def FIFO(msize):Q = []  # 定义队列queYeTimes = 0  # 缺页次数for item in page:if len(Q) < msize:Q.insert(0, item)  # 压入队列elif item in Q:Q.remove(item)else:Q.pop()Q.insert(0, item)queYeTimes += 1return (1-queYeTimes/320)# 最近最少使用置换法
def LRU(msize):L = []  # 定义堆栈queYeTimes = 0  # 缺页次数for item in page:if item in L:[L[0],L[len(L)-1]]=[L[len(L)-1],L[0]]elif len(L)<msize:L.append(item)else:L.append(item)del L[0]queYeTimes+=1return (1 - queYeTimes / 320)print('Start memory management.\nProducing address flow, wait for while, please.\n')
print('There are algorithms in the program\n1、 Optimization algorithm\n2、  Least recently used algorithm\n3、   First in first out algorithm\n4、    Least frequently used algorithm\nSelect an algorithm number, please.')
key = int(input())
createRandomNum()
changeAsPage()i=2
while i<33:if key==2:print('memory={} LRU命中率:{}'.format(i,LRU(i)))flag = input('do you try again with anther algorithm(y / n):')if flag=='y':key = int(input('input the num:'))i+=1else:breakelif key == 3:print('memory={} FIFO命中率:{}'.format(i,FIFO(i)))flag = input('do you try again with anther algorithm(y / n):')if flag == 'y':key = int(input('input the num:'))i += 1else:break# for i in range(2,33):
#     print('memory={} FIFO/LRU命中率:{} / {}'.format(i,FIFO(i),LRU(i)))

操作系统 存储管理实验报告相关推荐

  1. 计算机操作系统存储管理实验报告,《操作系统》存储管理实验报告

    <操作系统>存储管理实验报告 ____大学____学院实验报告课程名称: 计算机操作系统 实验名称: 存储管理实验 实验日期: 班级: 姓名: 学号: 仪器编号: XX 实验报告要求:1. ...

  2. 东北大学软件学院操作系统v实验报告

    课程编号:B080000070     <操作系统>实验报告             姓名   学号   班级   指导教师   实验名称 <操作系统>实验 开设学期 2016 ...

  3. 《操作系统》实验报告——熟悉Linux基础命令及进程管理

    理论知识 Linux--进程管理 Linux--Linux C语言编程基础知识 手把手教你安装Linux虚拟机 一.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执 ...

  4. 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

    操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...

  5. 课程linux实验报告,Linux操作系统课程实验报告.doc

    Linux操作系统课程实验报告.doc Linux操作系统课程实验报告班级姓名学号指导老师田丽华完成时间2014年7月目录一.实验目的1二.实验要求1三.实验内容1[第一题]1[第二题]2[第三题]4 ...

  6. linux课程实验报告,Linux操作系统课程实验报告

    Linux操作系统课程实验报告 Linux操作系统 课程实验报告 班级: 姓名: 学号: 指导老师:田丽华 完成时间:2014年7月 目录 一.实验目的1 二.实验要求1 三.实验内容1 [第一题]1 ...

  7. 操作系统存储管理实验课程设计报告

    操作系统报告 存储管理 姓名:郑兆涵 专业:计算机科学与技术(嵌入式方向) 一.设计目的.意义 本次实验针对:(1)存储管理实验,(2)主存储器空间的分配和回收实验,两个实验进行学习. (1)存储管理 ...

  8. 可变分区存储管理实验报告总结_可变分区存储管理方式的内存分配和回收实验报告...

    操作系统实验报告 一.实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储 管理的内存分配和回收. 二.实验内容 1.确定内存空间分配表: 2.采用最优适应算法完成内 ...

  9. 操作系统 作业调度实验报告

    题目要求 一. 实验目的 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解. 二. 例题 为单道批处理系统设计一个作业调度程序. 由于在单道批处理系统中,作业一投入运行,它 ...

  10. 《操作系统》实验报告——主存空间的分配与回收

    理论知识 Linux--Linux C语言编程基础知识 一.实验目的 采用可变式分区管理,使用最佳适应算法实现主存的分配与回收. 通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分 ...

最新文章

  1. SpringBoot 深度调优,让你的项目飞起来!
  2. 本周测试服务器角色转移系统仅开放转入,5月24日维护公告 角色转移系统全服放出...
  3. 基于DeepConvLSTM的传感器信号分类
  4. falsk 请求没有返回值报错
  5. excel 时间戳_用Excel实战数据分析,WPS真的可以!
  6. GridView控件与DataList控件DataKeyNames、DataKeysField、DataKeys用法
  7. ei指什么_SCI、EI、ISTP国际三大检索分别指的是什么-百度经验
  8. 以太坊 智能合约 代码 数据空间 存储在哪儿
  9. ant java任务_Ant War任务
  10. React+antd动态增加Table可编辑行
  11. 基于html5动画效果毕业论文,动画设计毕业论文15篇
  12. 语言模型(Language Modeling)”
  13. [保姆级教程] 从原理到应用,超级详细的MPU6050传感器整理,看完这一篇就够了
  14. 软件测试岗位具体是做什么的?
  15. oracle vs. SQL 同义词synonym 别名 alias
  16. Arduino整型字符串互转
  17. 解决windows10和ubuntu16.04双系统切换时Windows时间不对的问题
  18. 达索Abaqus 2022新功能介绍(三)
  19. Unity优化☀️渲染篇:CPU/GPU
  20. 总结 | 2018 年终总结

热门文章

  1. kafka单条消息太大引起的线上故障
  2. 一个前端报表设计器的设计分析
  3. Xshell“所选的用户密钥未在远程主机上注册”解决办法
  4. 三校生计算机教学计划,三校生高考英语教学计划.doc
  5. python 什么是鸭子类型
  6. 云服务器防火墙关闭 tomcat不能正常访问
  7. scp 给ipv6_scp传输常用命令
  8. 理财产品的收益率也抵不上通货膨胀
  9. Windows Server 2012 R2添加或删除角色和功能时提示无法打开匿名级安全令牌
  10. git pull git push 报spawn ssh错误,vscode更换默认终端