文章目录

  • 一、实验内容
  • 二、实验原理
  • 三、实验步骤
    • 1.画出每个页面置换算法流程图
      • OPT:
      • Ofar()流程图:
      • Lfar()流程图:
      • FIFO:
    • 2.对算法所用的数据结构进行说明:
    • 3. 测试数据随机产生。不可手工输入:
    • 4.多次测试程序,截屏输出实验结果:
      • OPT
      • LRU
      • FIFO
    • 5.根据实验结果与理论课讲述的原理进行实验分析
  • 五、实验数据及源代码
  • 总结

一、实验内容

1、模拟实现请求页式存储管理的几种基本页面置换算法
(1)最佳淘汰算法(OPT)
(2)先进先出的算法(FIFO)
(3)最近最久未使用算法(LRU))

二、实验原理

1、虚拟存储系统
UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。
当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向CPU发出缺中断),由系统将其所需页面调入内存。这种页面调入方式叫请求调页。
为实现请求调页,核心配置了四种数据结构:页表、页框号、访问位、修改位、有效位、保护位等。

2、页面置换算法
当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
(1)最佳淘汰算法(OPT):选择永不使用或在未来最长时间内不再被访问的页面予以替换。
(2)先进先出的算法(FIFO):选择在内存中驻留时间最久的页面予以替换。
(3)最近最久未使用算法(LRU):选择过去最长时间未被访问的页面予以替换。

3、首先用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
A:50%的指令是顺序执行的
B:25%的指令是均匀分布在前地址部分
C:25%的指令是均匀分布在后地址部分
具体的实施方法是:
A:在[0,319]的指令地址之间随机选取一起点m
B:顺序执行一条指令,即执行地址为m+1的指令
C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’
D:顺序执行一条指令,其地址为m’+1
E:在后地址[m’+2,319]中随机选取一条指令并执行
F:重复步骤A-E,直到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页。

因为是模拟程序,可以不使用系统调用函数

三、实验步骤

1.画出每个页面置换算法流程图

S=MAX(320)

OPT:


LRU也是这样的流程,不同的地方是Ofar函数不同

Ofar()流程图:

P=start(图写错了)
Far算法是变量内存数组,然后寻找距离最远的数,目的是更新或使最远页数在内存中的下标值,然后返回这个需要更改的下标值

Lfar()流程图:

Lfar的流程,只改变了distance计算方法和p的移动方向

FIFO:

2.对算法所用的数据结构进行说明:

数组说明:

随机生成320条指令函数:

cpage():

将随机指令转换成页地址流的函数


find():

判断页是否在内存中 其实是一个查找数num是否在参数数组内的一个函数


Ofar():

在OPT算法中寻找最久未使用或未来不使用的内存内的页号的下标


Lfar():

LRU算法中寻找最近最久未使用的内存内的页号的下标

这里加入LRU算法中的查找所需下标的函数,因为两个函数很像,只是查找方向相反


LRU算法实现


OPT算法实现

和上图一样,因为这部分函数主要是判断指针所指的页号是否在内存,并调用查找需要替换的内存下标并进行替换


FIFO算法实现

3. 测试数据随机产生。不可手工输入:

4.多次测试程序,截屏输出实验结果:

OPT

因为320,32,不易观察,下图数据暂时修改成150和15
只显示发生缺页中断时的页地址流和内存表

LRU

因为320,32,不易观察,下图数据暂时修改成150和15
只显示发生缺页中断时的页地址流和内存表

FIFO

出现该问题的原因: 首次构造链表算法写错了,改成后插法就可以了(为了记录问题所以没有更改)
第一次输出出问题原因在于我算法是先将内存表填满,FIFO算法内存表用了链表,在第一次构建链表的时候没有用后插法创建链表,有问题的算法为:

过程为先赋值p->data,在创建新结点,p后移,但是这样的问题是当最后一个数赋值后,后面还是会连着一个data为空的新结点,导致在print的时候p指向最后一个数据时p->next不为NULL(指向空结点,空结点next为NULL)
但是不影响后面的算法,因为last指向是正确的

5.根据实验结果与理论课讲述的原理进行实验分析

OPT算法页号命中率:

LRU算法页号命中率:

输出LRU命中率会出现只输出一部分从内存大小最小值开始的命中率的问题(如只输出内存4k到17k就停下来了)通过更改内存大小的区间(如设置18k-31k)才得到内存由4k-31k的命中率,所以上面的结果图是运行了两次然后截图的
( 另外两个就不会,我也不知道为什么

广州大学2022操作系统实验三——内存管理相关推荐

  1. java的内存管理_操作系统实验——java内存管理

    1.Test.java import java.util.Scanner; public class Test { public static void main(String[] args) { T ...

  2. 广州大学2020操作系统实验一:进程管理与进程通信

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

  3. 广州大学2020操作系统实验二:银行家算法

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

  4. 广州大学2020操作系统实验四:文件系统

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

  5. 操作系统实验三:进程管理

    实验三 进程管理 一.实验要求 (1)掌握操作系统中进程的基本概念: (2)掌握 Linux操作系统进程管理基本方法: (3)了解进程并发运行的过程. 二.实验内容 (1)验证实验: ① 启动vi编辑 ...

  6. 从零手写操作系统之RVOS内存管理模块简单实现-02

    从零手写操作系统之RVOS内存管理模块简单实现-02 内存管理分类 内存映射表(Memory Map) Linker Script 链接脚本 语法 基于符号定义获取程序运行时内存分布 基于 Page ...

  7. linux内存实验,LINUX编程-实验五 内存管理实验

    实验五内存管理实验 1.目的要求 (1)学习使用内存管理库函数. (2)学习分析.改正内存错误. 2.实验内容 (1)内存库函数实验 ●malloc函数 原型:extern void *malloc( ...

  8. linux中关于ssh实验,操作系统实验三linux的telnetftpssh的相关配置及验证

    操作系统实验三linux的telnetftpssh的相关配置及验证 -1-昆明理工大学信息工程与自动化学院学生实验报告( 2010 -2011 学年第 二 学期 )课程名称:操作系统 开课实验室:信自 ...

  9. 广州大学人工智能原理实验三:产生式系统推理

    相关资料 广州大学人工智能原理实验一:知识的表示与推理实验 广州大学人工智能原理实验二:八数码问题 广州大学人工智能原理实验三:产生式系统推理 广州大学人工智能原理实验四:TSP问题的遗传算法实现 广 ...

  10. 利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法

    利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法. 内存作为计算机系统的组成部分,跟开发人员的日常开发活动有着密切的联系,我们平时遇到的Segment Fault.OutOfMemory ...

最新文章

  1. 乌兰浩特市大数据平台助力就业脱贫
  2. matlab dll没有头文件,matlab调用dll没有头文件怎么办
  3. Python+matplotlib数据可视化设置图例3个精选案例
  4. 一个小型的中文文本分类系统(项目链接文末)——《ML算法原理和实践》学习笔记
  5. 用Hough投票做物体检测的3篇文献
  6. 海思平台35xx系列sensor不出图问题排查方法(新手来看)
  7. 【开发工具集】DLL依赖查看工具——Dependency Walker
  8. 计算机应用数值换算,单位换算计算器完整版
  9. 用C++可编程管线渲染obj模型
  10. Scipy安装遇到的问题
  11. 27岁转行学python_零基础想转行学python,过来人提醒大家几点
  12. PS制作gif表情包
  13. scratch好书推荐
  14. es自建搜索词库_ES——中文分词以及词库扩展
  15. Excel重命名工作表:一键修改为指定的表名
  16. 今日头条后台止步一面
  17. mw325r服务器无响应,水星(MERCURY)路由器MW325R上不了网/连不上网的解决方法
  18. 运维岗位面试被问到的问题
  19. attempt doing有吗_Attempt 的用法
  20. Tapdata 创始人唐建法:以秒级响应速度,为企业提供实时数据服务 | 阿里云云原生加速器特别报道

热门文章

  1. 参考文献标号字体_参考文献标号字体 参考文献标准格式字体
  2. 深海迷航坐标传送代码_深海迷航秘籍代码大全 美丽水世界秘籍代码使用教程...
  3. 解决jdk证书问题-生成jssecacerts PKIX path building failed
  4. 冲印常见问题杂锦(网上摘录)
  5. Linux之文件通配符
  6. c语言ctype函数,C语言函数--ctype.h库函数
  7. mysql5.6安装步骤详细_详解MySQL5.6安装步骤
  8. MC9S12G128模块化分层化软件架构之八_QAC静态代码分析
  9. matlab插值与拟合例题_[转载]MATLAB插值与拟合(1)
  10. 16/24点阵字库(经典)