操作系统课设——页面置换算法的模拟
来源:互联网 发布:大数据分析师怎么样 编辑:程序博客网 时间:2024/05/29 11:01
本课设主要实现FIFO算法和LRU算法,虽然实现了功能,但是个人感觉代码可以优化,而且采用的主存块数是3,如果主存块数修改了,那么代码也需要修改,这是我课设不足之处,望大神来指教!
下面是我的代码
#include <stdio.h>#include <stdlib.h>#define PAGE_NUM 3 //主存块数#define SERIAL_NUM 12 //访问序列的次数int serial[SERIAL_NUM] = {6,7,6,5,9,6,8,9,7,6,9,6}; //初始化访问序列int page_num[PAGE_NUM] = {-1,-1,-1}; //初始化主存块中的序列void FIFO(){ int serial_temp[SERIAL_NUM]; int page_temp[PAGE_NUM]; int i,j,k,m,a,c; int flag = 0; //记录有多少 int count = 0; //记录缺页次数 /*赋值给新的数组,防止原数据被改动*/ for(a = 0; a < SERIAL_NUM; a++) { serial_temp[a] = serial[a]; } for(a = 0; a < PAGE_NUM; a++) { page_temp[a] = page_num[a]; } /*算法模拟*/ for(i = 0; i < SERIAL_NUM; i++) { flag = 0; c = 10; //判断主存块有多少空 for(j = 0; j < PAGE_NUM; j++) { if(page_temp[j] == -1) { flag++; } } //三个主存块有空 while(flag != 0) { for(k = 0; k <= 3 - flag; k++) { if(page_temp[k] == serial_temp[i]) { c = k; break; } } if(page_temp[k] != serial_temp[i]) { c = 10; page_temp[3 - flag] = serial_temp[i]; } break; } //三个主存块都满 if(flag == 0) { for(k = 0; k < PAGE_NUM; k++) { if(page_temp[k] == serial_temp[i]) { c = 222; } } if(c != 222) { page_temp[0] = page_temp[1]; page_temp[1] = page_temp[2]; page_temp[2] = serial_temp[i]; } } for(m = 0; m < PAGE_NUM; m++) //输出 { printf(" %d",page_temp[m]); } if(c == 222 || c != 10) { printf(" 不缺页!"); } else { printf(" 缺页!"); count++; } printf(" 缺页次数为%d次!\n",count); } }void LRU(){ int serial_temp[SERIAL_NUM]; int page_temp[PAGE_NUM]; int a,k,i,c,j,m,cc; int flag; int count = 0; int count_1 = 0; /*赋值给新的数组,防止原数据被改动*/ for(a = 0; a < SERIAL_NUM; a++) { serial_temp[a] = serial[a]; } for(a = 0; a < PAGE_NUM; a++) { page_temp[a] = page_num[a]; } /*算法模拟*/ for(i = 0; i < SERIAL_NUM; i++) { flag = 0; c = 10; cc=10; for(j = 0; j < PAGE_NUM; j++) { if(page_temp[j] == -1) { flag++; } } //主存块有空位 while(flag != 0) { for(k = 0; k < 3 - flag; k++) { if(page_temp[k] == serial_temp[i]) { c = k; } } count_1= 3 - flag; if(10 == c && count_1 == 0) { page_temp[0] = serial_temp[i]; } if(10 == c && count_1 == 2) { page_temp[2] = page_temp[1]; page_temp[1] = page_temp[0]; page_temp[0] = serial_temp[i]; } if(10 == c && count_1 ==1) { page_temp[1] = page_temp[0]; page_temp[0] = serial_temp[i]; } if(c !=10) { if(count_1 == 1) { page_temp[0] = serial_temp[i]; } if(count_1 == 2) { if(1 == c) { page_temp[1] = page_temp[0]; page_temp[0] = serial_temp[i]; } } } break; } //满 if(0 == flag) { for(k = 0; k < PAGE_NUM; k++) { if(page_temp[k] == serial_temp[i]) { c = 222; cc = k; break; } } //无重复 if(c != 222) { page_temp[0] = serial_temp[i]; page_temp[1] = serial_temp[i - 1]; page_temp[2] = serial_temp[i - 2]; } //第一个重复 if(0 == cc) { page_temp[0] = serial_temp[i]; } //第2个重复 if(1 == cc) { page_temp[1] = page_temp[0]; page_temp[0] = serial_temp[i]; } //第三个重复 if(2 == cc) { page_temp[2] = page_temp[1]; page_temp[1] = page_temp[0]; page_temp[0] = serial_temp[i]; } } for(m = 0; m < PAGE_NUM; m++) //输出 { printf(" %d",page_temp[m]); } if(c == 222 || c != 10 || 1 == c || 2 == c) { printf(" 不缺页!"); } else { printf(" 缺页!"); count++; } printf("缺页次数为%d次!\n",count); }}void interface() //界面函数{ system("clear"); printf(" \n"); printf(" |------页面置换算法模拟------|\n"); printf(" |-------1.选FIFO算法-------|\n"); printf(" |-------2.选 LRU算法-------|\n"); printf(" |-------3. 退出 ---------|\n"); while(1) { int select; printf("请输入你想选择的数字!\n"); scanf("%d",&select); getchar(); switch(select) { case 1: { system("clear"); printf("FIFO算法结果如下:\n"); FIFO(); printf("按回车键返回!\n"); getchar(); interface(); break; } case 2: { system("clear"); printf("LRU算法结果如下:\n"); LRU(); printf("按回车键返回!\n"); getchar(); interface(); break; } case 3: { system("clear"); printf("谢谢使用!\n"); exit(1); break; } default: { printf("请输入正确的数字!\n"); printf("即将返回主界面!\n"); sleep(1); sleep(1); //延时 interface(); break; } } }}int main(){ interface(); return 0;}
0 0
- 操作系统课设——页面置换算法的模拟
- 操作系统模拟置换页面的算法
- 模拟操作系统的页面置换
- (操作系统)模拟操作系统的页面置换
- 操作系统——页面置换算法详解
- 操作系统——页面置换算法
- 操作系统课设——移动臂模拟调度算法
- 操作系统页面置换算法
- 操作系统页面置换算法
- 【操作系统】页面置换算法
- 操作系统页面置换算法
- 【操作系统】页面置换算法
- 【操作系统】页面置换算法
- 操作系统页面置换模拟系统
- 操作系统之——页面置换算法C语言实现
- 操作系统实验——内存管理之页面置换算法
- 操作系统-页面置换算法-最佳置换算法
- 模拟操作系统FIFO置换算法
- 求解acm里面需要用循环嵌套做的输出图形题,方法!
- 通信数字信号处理基本知识
- php开发工具
- 捕鱼游戏java源码
- 《你的名字》
- 操作系统课设——页面置换算法的模拟
- 6.15C循环控制语句for while
- 表单元素input、按钮、文字完美垂直居中对齐方法
- 内省 + 反射(简单应用实现原理)
- C++实现简单的日期类
- java 正则表达式Greedy、Reluctant、Possessive的理解
- 小鑫の日常系列故事(二)——石头剪子布
- php类文件的自动加载机制
- C 的__VAR_ARGS__宏