【操作系统实验/Golang】实验4:虚拟内存页面置换算法

1 实验问题描述

设计程序模拟先进先出FIFO,最佳置换OPT和最近最久未使用LRU页面置换算法的工作过程。
假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为$P_1,P_2,…,P_n$,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。

程序要求如下:

  1. 实现先进先出FIFO,最佳置换OPT和最近最久未使用LRU三种页面置换算法,模拟页面访问过程,并对三个算法进行评价。
  2. 输入:最小物理块数blockNum,页面个数pageNum,页面访问序列 ,输入算法模式mode(1-FIFO,2-OPT,3-LRU)。
  3. 输出:

a) 每种算法的页面内存分配情况,如图:

b) 每种算法的缺页次数lackNum和缺页率pageFaultRate。

2 测试数据

  1. 测试数据1
    blockNum=3, pageNum=12.
    pageSeq=[1 2 3 4 1 2 5 1 2 3 4 5]
    mode=1,2,3
  2. 测试数据2
    blockNum=3, pageNum=20.
    pageSeq=[4 3 2 1 4 3 5 4 3 2 1 5 6 2 3 7 1 2 6 1]
    mode=1,2,3

3 实验结果

  1. 测试数据1:

  1. 测试数据2:

4 实验代码

请见GitHub。

https://github.com/Jackkee27/OS-Experiments/tree/main/exp4
0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!
相关文章
  • 采用一致性hash算法将key分散到不同的节点,客户端可以连接到集群中任意一个节点 https://github.com/csgopher/go-redis 本文涉及以下文件: consistenth...

  • 官方资料 官方解释: https://pkg.go.dev/cmd/go#hdr-Build_constraints ,go help buildconstraint 也能看到描述 根据官方描述,go...

  • 学习Go快两年了,一些资料进行整理。 Go语言基础书籍 Go语言圣经——《Go程序设计语言》机械工业出版社作 【推荐】 在线版:Go 语言设计与实现 | Go 语言设计与实现 (dravenes...

  • 一 domain层介绍说明 domain层专注于数据库数据领域开发,我们把数据库相关操作全部写在domain层。 model层:数据表字段定义与开发 repository层:数据库数据CU...

  • 概述问题:Go 中 Map 的 key 可以是哪些数据类型呢? 我们来看看具体的规则。比较运算符 用来比较两个操作数并返回一个 bool 值,常见的比较运算符:== 等于 != 不等于 ...

  • 本文参与了思否技术征文,欢迎正在阅读的你也加入。前言这是Go常见错误系列的第15篇:interface使用的常见错误和最佳实践。素材来源于Go布道者,现Docker公司资深工程师Teiva Harsa...

  • 1. 简介 本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Cond 来实现 go...

  • Hello,Golang 一、开发环境搭建 1. 下载 SDK // Go官网下载地址 https://golang.org/dl/ // Go官方镜像站(推荐) https://go...

  • 服务端 package main import ( "errors" "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" "os" ) // ...

  • 本篇内容有点长,代码有点多。有兴趣的可以坚持看下去,并动手实践,没兴趣的可以划走。本文分两大块,一是搞清楚prometheus四种类型的指标Counter,Gauge,Histogram,Summar...

  • 概述Map 的遍历是无序的,这意味着不能依赖遍历的键值顺序。如果想实现 Map 遍历时顺序永远一致,一个折中的方案时预先给 Map 的 键 排序,然后根据排序后的键序列遍历 Map, 这样可以保证每次...

  • 往期回顾: Go语言开发小技巧&易错点100例(一) 本期看点(技巧类用【技】表示,易错点用【易】表示): (1)Go Module中对依赖库版本的升级与降级【技】 (2...

  • 概述Go 是强类型语言,因此不会进行隐式类型转换 (例如不能直接将一个 浮点型 转换为 整型)。任何不同类型之间的转换都必须显式说明。在类型转换时,要注意两边的值类型大小,可以将一个较小的值类型转换为...

  • 一、方法 1、方法是作用在指定的数据类型上,和指定的数据类型绑定,因此自定义类型都可以有方法,而不仅仅是struct; 2、方法的申明和格式调用: package main import ( ...

  • 对于无类型常量,可能大家是第一次听说,但这篇我就不放进拾遗系列里了。 因为虽然名字很陌生,但我们每天都在用,每天都有无数潜在的坑被埋下。包括我本人也犯过同样的错误,当时代码已经合并并发布了,当我意识到...

  • hello 大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第三篇,依旧分析 Http 模块。我们今天来看 Go内置的 RPC。说起 RPC 大家想到的一般是框架,Go 作为编程语言竟然还内置了 ...

  • dongle 是一个轻量级、语义化、对开发者友好的 Golang 编码解码和加密解密库Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧github.com/gol...

  • 一 jaeger链路追踪介绍 什么是链路追踪: 分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的...

  • 概述调用 log 包即可,包里面的方法输出日志时会自动加上日期时间前缀字符。例子输出到终端package main import ( "log" "os" ) func main(...

  • 概述建议先阅读 字符串, 切片 两个小节。由于字符串不可变,如果每次以 重新赋值 的方式改变字符串,效率会非常低,这时应该使用 []byte 类型,[]byte 元素可以被修改。因为 byte 类型是...