博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c模拟 页式管理页面置换算法之FIFO
阅读量:5036 次
发布时间:2019-06-12

本文共 2139 字,大约阅读时间需要 7 分钟。

写的操作系统作业。。。。

放上来给需要的小伙伴

需要注意的地方:

1.该算法只涉及单进程

2.只是用c模拟FIFO的思想

FIFO思想:选择在内存中存活时间最久的页面淘汰

关于该算法我的理解:

一个进程可以分为多个页面,页面大小一致,每个页面需要占用一个相同大小的内存块,在进程的页面较多而内存块较少的情况下,比如5个页面,3个内存块,这种情况内存块肯定是不够用的,当前面三个页面都有了自己的内存块之后,现在已经没有空的内存块了,第四个页面想要进入内存块中,就要从占用内存块的页面中淘汰一个,那么就需要定义一个淘汰的规则:我们这里使用的淘汰规则:FIFO规则,选择在内存中存活时间最久的页面淘汰

代码分析:

假设一共有一个进程,该进程可以分为5个不同的页面

假设有3个内存块

 

一共三个表

第一个表:页面执行顺序数组表(表中存放的是页面的编号,意思是先执行2号页面,然后执行4号页面,再执行3号页面...........................最后又执行4号页面)(重复执行某个页面是因为代码需要重用,比如函数多次调用)

 

2 4 3 0 1 2 4

第二个表:页表(页表中的页号和上面的页面顺序执行表中的存的页号是对应的)

页号 页面在内存块中的地址 页面在内存中存活的时间
0 -1(最开始默认-1) 0(最开始默认0)
1 -1 0
2 0 3
3 2 1
4 1 2

第三个表:内存块信息表(存放的是占用该内存块的页号)

2 4 3

现在执行顺序数组中的前面3个页面都有了内存块(2号页面,4号页面,3号页面)且内存块中已经没有了空闲的内存块,当页面执行顺序表中的0号页面要进入内存块的时候,就必须淘汰一个占用内存块的页面,按照FIFO的淘汰规则,存活时间最长的2号页面将被淘汰(2号页面存活时间为3秒)所以现在表回产生变化:

页号 页面在内存块中的地址 页面在内存中存活的时间
0 0 1
1 -1 0
2 -1 0
3 2 2(时间滚动,增加1秒)
4 1 3

 

 

0(此时0号页面占用该内存块) 4(此时还是4号页面占用该内存块) 3此时还是3号页面占用该内存块)

根据我们FIFO的淘汰规则:淘汰了2号页面,将2号页面占用的内存块交给了0号页面使用,现在页面执行顺序数组执行到了第4个,后面的依次类推,按照FIFO淘汰规则进行淘汰

代码如下:

#include 
#include
//数据结构 页式管理 FIFO 先进先出 单进程#define MEMORY_MAX_BLOCKS 10//定义物理块最大数量#define PROGRESS_MAX_PAGE 20 //定义虚拟页面的最大数量#define PROGRESS_MAX_LENGTH 30 //定义进程的最大长度//当前进程的相关信息int curProPages;//当前进程虚拟页int curMemoryBlocks;//当前进程物理块int proLength;// 进程执行长度int proSort[PROGRESS_MAX_LENGTH];//虚拟页执行顺序数组typedef struct PageItem{ int vpage;//虚拟页的编号 int mblock;//对应的物理号 默认不存在对应的内存块-1 int loadTime;//该页面在内存中存在的时间} PageItem;PageItem pageList[PROGRESS_MAX_PAGE];//页表:int memoryAllocInfo[MEMORY_MAX_BLOCKS];//内存物理块分配信息,某个内存块放某个页面//初始化函数void init(){ int i=0; curProPages=5;//虚拟页面数量 curMemoryBlocks=3;//内存块数量 proLength=7;//虚拟页执行顺序数组长度 proSort[0]=2;//存放的是虚拟页的编号 proSort[1]=4; proSort[2]=3; proSort[3]=0; proSort[4]=1; proSort[5]=2; proSort[6]=4; for(i=0; i
maxTime) { maxTime=pageList[i].loadTime; vpage=i; } } return vpage;}void fifo(){ //开始程序执行,调用虚拟机 int index; int vpage; int fpage; int freeIndex; for(index=0; index

运行结果如下:

 

 

 

运行结果符合预期

希望能给看到此博文的你一点小小的帮助!

 

转载于:https://www.cnblogs.com/yinbiao/p/9084213.html

你可能感兴趣的文章
一.go语言 struct json相互转换
查看>>
什么是架构设计
查看>>
程序员学习能力提升三要素
查看>>
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>
SqlServer 遍历修改字段长度
查看>>
Eclipse快捷键:同时显示两个一模一样的代码窗口
查看>>
《架构之美》阅读笔记05
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)
查看>>
关于React中props与state的一知半解
查看>>
java中Hashtable和HashMap的区别(转)
查看>>
关闭数据库
查看>>
webStrom智能提示忽略首字母大小写问题
查看>>
层叠加的五条叠加法则(一)
查看>>