模拟操作系统FIFO置换算法
来源:互联网 发布:mac哑光唇釉色号 编辑:程序博客网 时间:2024/06/04 00:30
1.简介
写的时候数据结构用了链表而不是数组,所以才有了这么麻烦的一个程序,有的地方比较多余
2.源码
//命中率=1-页面失效次数/页地址流长度。/*地址按下述原则生成:①50%的指令是顺序执行的;②25%的指令是均匀分布在(跳转到)前地址部分;③25%的指令是均匀分布在(跳转到)后地址部分;#具体的实施方法是:A.在[0,119]的指令地址之间随机选取一起点M;B.顺序执行一条指令,即执行地址为M+1的指令;C.在前地址[0,M+1]中随机选取一条指令(跳转到)并执行,该指令的地址为M’;D.顺序执行一条指令,其地址为M’+1;E.在后地址[M’+2,119]中随机选取一条指令(跳转到)并执行;F.重复A—E,直到执行150次指令。*/#include <iostream>using namespace std;#include <stdlib.h>#include <time.h>typedef struct PAGE {int page;PAGE* next;}PAGE;class List {public:PAGE* head, *tail, *temp, *table;int m;List() { m = 0;table = new(PAGE);head = table;tail = table;temp = table; }void InitList();int setm(int m);};void List::InitList() {table = new (PAGE);head = table;table->page = -1;temp = table;for (int i = 2;i <= m;i++) {table = new(PAGE);table->page = -1;temp->next = table;temp = table;if (i == m)table->next = NULL;}tail = table;}int List::setm(int m) {List::m = m;return List::m;}class AddrStream {public:int count, pageNum[150], pageN, i, addr;AddrStream() { count = 0;i = 0;addr = 0;pageN = 0;for (i;i<150;i++) pageNum[i] = 0; };void Generate();void outStream();};void AddrStream::Generate() {srand((unsigned)time(NULL));count = 0;i = 0;while (i<150) {if (count == 0){addr = (int)(120 * rand() / (RAND_MAX + 1));addr = (addr + 1) % 120;pageN = (int)addr / 10;}if (count == 1){addr = (int)((addr + 1)*rand() / (RAND_MAX + 1));pageN = (int)addr / 10;}if (count == 2){addr = (addr + 1) % 120;pageN = (int)addr / 10;}if (count == 3){addr = (int)(/*120 - ((120 - (addr + 2))*rand() / (RAND_MAX + 1))*/ rand() % (120 - (addr + 2)) + addr + 2);addr = addr % 120;pageN = (int)addr / 10;}++count;pageNum[i] = pageN;if (count == 4) { count = 0; }i++;}}void AddrStream::outStream() {for (i = 0;i<150;i++) { cout << pageNum[i] << " "; }cout << endl;}int main() {int False, answer, m, flag;int hit;int a;PAGE* tail, *output, *temp, *table, *t;False = 0;List list;AddrStream address;cout << "请输入用户页面数:";cin >> a;m = list.setm(a);list.InitList();address.Generate();address.outStream();for (int i = 0;i<150;i++){hit = 0;flag = 0;answer = 1; //answer置1代表队满tail = list.tail;temp = list.head;t = list.head;table = list.head;output = list.head;while (table != NULL){if (table->page == -1) { answer = 0; }//answer=0代表队未满table = table->next;}if (answer == 0){while (temp != NULL) // 遍历{if (temp->page == address.pageNum[i]){hit = 1; //命中则置一}temp = temp->next;}if (hit == 0) //hit为0则缺页{False++;int flag2 = 0;do {if (t->page == -1){t->page = address.pageNum[i]; flag2 = 1;}t = t->next;} while (flag2 != 1);}}if (answer == 1){while (temp != NULL){if (temp->page == address.pageNum[i]){flag = 1;//flag置1代表有命中,置0代表没有命中}temp = temp->next;}if (flag == 0){False++; //没有命中则缺页加一while (t != NULL){if(t->next!=NULL)t->page = t->next->page; //队列每个元素都前移t = t->next;}tail->page = address.pageNum[i]; //插入缺的页}}for (output;output != NULL;output = output->next)cout << output->page << " ";cout << endl;}double sum = 1.0 - False / 120.0;cout << "FIFO算法的命中率为:" << sum << " " << endl;return 0;}
0 0
- 模拟操作系统FIFO置换算法
- 模拟FIFO页面置换算法
- 操作系统页面置换算法之FIFO,LRU
- 操作系统——页置换算法(FIFO,OPT,LRU)
- 转载:操作系统页面置换算法(opt,lru,fifo,clock)实现
- 操作系统页面置换FIFO算法中的Belady现象
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
- FIFO页面置换算法
- FIFO页面置换算法
- 页面置换算法(FIFO,LRU,OPT)c模拟
- 操作系统模拟置换页面的算法
- 操作系统实验四 页面置换算法(fifo 算法代码------页面置换代码集合)
- 操作系统实验(2)-- 模拟操作系统的页面置换 LRU OPT FIFO
- FIFO页面置换算法实现
- FIFO,LRU,OPT置换算法
- 操作系统页面置换算法之先进先出(FIFO)算法
- 操作系统页面置换fifo lru方式
- 虚存管理页面置换算法 — FIFO和RUL算法模拟实现
- 快速安装Jupyter Notebook
- 解决报错:java.util.UnknownFormatConversionException: Conversion = 'p'
- Java学习笔记——注解
- 机器学习及python实现——朴素贝叶斯分类器
- 第二节:环境安装配置
- 模拟操作系统FIFO置换算法
- 深入分析synchronized的实现原理
- 第三节:scala-基础语法
- webstorm破解激活
- Line in和Mic in的区别及使用
- Latex \bibliographystyle
- Maven制作alipay-sdk-java包到本地仓库
- 1062. 最简分数
- 推荐比较常用的一些Android开源项目