广东工业大学 操作系统实验

实验内容

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

置换算法:采用先进先出(FIFO)页面置换算法。

通过随机数产生一个指令序列,共320条指令:
1)指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分;
③ 25%的指令是均匀分布在后地址部分;
具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m;
② 顺序执行一条指令,即执行序号为m+1的指令;
③ 在前地址[0,m-1]中随机选取一条指令并执行,该指令的序号为m1;
④ 顺序执行一条指令,其序号为m1+1的指令;
⑤ 在后地址[m1+2,319]中随机选取一条指令并执行,该指令的序号为m2;
⑥ 顺序执行一条指令,其序号为m2+1的指令;
重复上述步骤①~⑥,直到执行320次指令。
2)将指令序列变换为页地址流
设页面大小为1K, 用户虚存容量为32K。在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
……
……
第310条~第319条指令为第31页(对应虚存地址为[310,319])。
按以上方式,用户指令可组成32页。

代码实现

#include <stdio.h>
#include <stdlib.h>float count = 0; //缺页次数typedef struct Data //数据域
{int pageNum; //装进的用户虚存页号int blockNum; //块号
} Data;typedef struct BlockNode //单向循环链表
{Data data;struct BlockNode *next;
} Block, *BlockList;//定义内存块
BlockList block1;
BlockList block2;
BlockList block3;
BlockList block4;
Block *p;void initialize() //初始化
{block1 = (BlockList)malloc(sizeof(Block));block2 = (BlockList)malloc(sizeof(Block));block3 = (BlockList)malloc(sizeof(Block));block4 = (BlockList)malloc(sizeof(Block));p = block1;block1->data.pageNum = -1;block2->data.pageNum = -1;block3->data.pageNum = -1;block4->data.pageNum = -1;block1->data.blockNum = 0;block2->data.blockNum = 1;block3->data.blockNum = 2;block4->data.blockNum = 3;block1->next = block2;block2->next = block3;block3->next = block4;block4->next = block1;
}int FIFO(int pageNum, int virAddr) //先进先出页面置换算法
{BlockList q = p; //存储p原来的位置for(int i = 0; i < 4; i++) //判断块中内存是否均已加载数据并且指令是否已在内存中{if(p->data.pageNum == -1) //块为空闲{p->data.pageNum = pageNum;count++; //缺页次数+1printf("指令未装入内存!页面置换完成!\n用户指令第%d页第%d条的物理地址为:第%d块第%d条 \n\n", pageNum, (virAddr % 10), p->data.blockNum, (virAddr % 10));p = block1; //指向最先被分配的块1;return 1;}if(p->data.pageNum == pageNum){printf("指令已在内存中!\n用户指令第%d页第%d条的物理地址为:第%d块第%d条 \n\n", pageNum, (virAddr % 10), p->data.blockNum, (virAddr % 10));p = q;//页面没有发生置换,指针指向原最老的页面return 1;}p = p->next;}p->data.pageNum = pageNum;count++;printf("指令未装入内存且内存块已满!页面置换完成!\n用户指令第%d页第%d条的物理地址为:第%d块第%d条 \n\n", pageNum, (virAddr % 10), p->data.blockNum, (virAddr % 10));p = p->next; //指向最老的页面return 1;
}void calculate() //生成页地址流并计算缺页率
{for(int i = 0; i < 320; ){int m = rand() % 320;printf("指令地址为:%d \n", (m + 1));FIFO(((m + 1) / 10), m + 1);i++;int m1 = rand() % (m - 1);printf("指令地址为:%d \n", m1);FIFO((m1 / 10), m1);i++;printf("指令地址为:%d \n", (m1 + 1));FIFO(((m1 + 1) / 10), m1 + 1);i++;int m2 = rand() % (319 - m1 - 1) + m1 + 2;printf("指令地址为:%d \n", m2);FIFO((m2 / 10), m2);i++;printf("指令地址为:%d \n", (m2 + 1));FIFO(((m2 + 1) / 10), m2 + 1);i++;}printf("\n");printf("缺页次数:%.0f\n", count);printf("计算得到的缺页率为:%.4f \n", count / 320);
}int main()
{printf("----------先进先出页面置换算法----------\n\n");initialize();calculate();return 0;
}

先进先出(FIFO)页面置换算法 C语言实现相关推荐

  1. 操作系统之虚拟存储管理 java python 实现 最优(Optimal)置换算法 先进先出(FIFO)页面置换算法 LRU(Least Recently Used)置换算法

    操作系统之虚拟存储管理 实验内容:模拟请求分页虚拟存器管理技术中的硬件地址变换.缺页中断以及页式淘汰算法,处理缺页中断. 实验目的:清楚认识请求分页管理. 最佳(Optimal)置换算法 其所选择的被 ...

  2. 操作系统页面置换算法之先进先出(FIFO)页面置换算法(C语言实现)

    先进先出(FIFO)页面置换算法 [注]本代码数据及思路方法参考自<计算机操作系统(第四版)>汤小丹等 编著的教材. #include <iostream>int access ...

  3. 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)

    Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...

  4. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  5. FIFO页面置换算法详解

    页面置换算法的基本思想: FIFO每次置换最先调入内存的页面,即将内存中等待时间最长的页面进行置换.此算法的适用范围是顺序结构程序. 实现过程 比如有下述页面走向:1, 2, 3, 4, 2, 1, ...

  6. OPT和LRU页面置换算法C语言代码,页面置换算法模拟——OPT、FIFO和LRU算法.doc

    实用标准文案 精彩文档 操作系统实验报告 页面置换算法模拟 --OFT.FIFO和LRU算法 班级:2013级软件工程1班 学号:X X X 姓名:萧氏一郎 数据结构说明: Memery[10]物理块 ...

  7. 虚拟存储页面置换算法c语言,虚拟存储器管理页面置换算法模拟实验.doc

    虚拟存储器管理页面置换算法模拟实验 淮海工学院计算机工程学院 实验报告书 课程名:< 操作系统原理A > 题 目: 虚拟存储器管理 页面置换算法模拟实验 班 级: 软件*** 学 号: 2 ...

  8. fifo页面置换算法设计思路_千万级并发!如何设计一个多级缓存系统?

    什么是一个多级缓存系统?它有什么用?我们又如何设计一个多级缓存系统? 图片来自 Pexels 所谓多级缓存系统,就是指在一个系统的不同的架构层级进行数据缓存,以提升访问效率. 我们都知道,一个缓存系统 ...

  9. fifo页面置换算法java_缓存算法(页面置换算法)-FIFO、LFU、LRU

    转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了 ...

最新文章

  1. 简析平衡树(三)——浅谈Splay
  2. (转) 共享个很棒的vim配置
  3. PLSQL的截取函数
  4. oracle两列合并成一列_POWER QUERY--一个工作簿内的多张工作表合并汇总
  5. Xcode命令行生成Bitcode静态库
  6. 眼儿媚·迟迟春日弄轻柔 [宋] 朱淑真
  7. 年总结(七):这半年的生活(2017.1—2017.7)
  8. 传感器数据 数据库_丰富的数据,不良的数据:充分利用传感器
  9. 西门子S7-200PLC基本入门编程
  10. 数字电视的格式(BT.601 BT.709 BT.2020)和接口(BT.656 BT.1120 BT.2077)
  11. 推荐10本大数据领域必读的经典好书(火速收藏)
  12. 求解一元二次方程c语言程序,一元二次方程求解程序完整代码
  13. 计算机如何连接wifi台式,无线网卡怎么连接台式电脑_台式机添加无线网的方法...
  14. 鼠标右键菜单打开慢的解决方式
  15. 信用卡诈骗罪16个有效辩点
  16. ESP32S3系列--代码执行速度优化(从PSRAM执行代码)
  17. CODE RO RW ZI的区别
  18. UNRAID挂载exFat格式的USB磁盘
  19. 微信小程序解包wxappUnpacker-master 样式解不出来 SyntaxError: Unexpected end of input 的解决方式
  20. 江苏小学计算机面试题目,2019下半年江苏省小学信息技术教师资格证面试试题(精选)(三)...

热门文章

  1. 三分钟学会数据库, replace() 替换
  2. 搞笑python代码_ZAKER搞机团
  3. photos怎么改成中文_picsart怎么设置中文?picsart怎么改成中文字体教程
  4. Java编程怎么打印输出第n项斐波拉契数
  5. 生成数字相加验证码图片并验证
  6. python 自动化测试基础
  7. cesium加载wms、wmts、tms、wfs服务
  8. 计算机音乐数字乐谱生僻字,《生僻字》歌曲简谱
  9. 在线问答系统--页面功能开发
  10. 绕过磊科路由器登录密码