fifo.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2010-12-22 15:09
    上传日期
操作系统FIFO页面置换算法实现VC6.0源码
fifo.rar
  • fifo.cpp
    4.5KB
内容介绍
#include "windows.h" #include <conio.h> #include <stdlib.h> #include <fstream.h> #include <io.h> #include <string.h> #include <stdio.h> void initialize(); void createps(); void displayinfo(); void fifo(); int findpage(); int invalidcount = 0; // 缺页次数 int vpoint; //页面访问指针 int pageframe[10]; // 分配的页框,假定固定为6物理块, 编写时可以设置一个变量 // 来随时改变分配的页框数 int rpoint; //页面替换指针 int inpflag; //缺页标志,0为不缺页,1为缺页 //页面信息结构 struct PageInfo { int serial[100]; // 模拟的最大访问页面数,实际控制在20以上 int flag; // 标志位,0表示无页面访问数据 int diseffect; // 缺页次数 int total_pf; // 分配的页框数 int total_pn; // 访问页面序列长度 } pf_info; //////////////////////////////////////////////////////////////////////// /// 随机生成访问序列,这里作了简化,页面在16页以内 void createps(void ) { int s,i; srand(rand()); //初始化随机数队列的"种子" initialize(); s=((float) rand() / 32767) * 50 + 40; // 随机产生页面序列长度 pf_info.total_pn = s; for(i=0;i<s;i++) //产生随机访问序列 { pf_info.serial[i]=((float) rand() / 32767) * 16 ; } } //////////////////////////////////////////////////////////////////////// // 显示当前状态及缺页情况 void displayinfo(void) { int i,n; if(vpoint==0) { printf("\n=============页面访问序列=============\n"); for(i=0; i<pf_info.total_pn; i++) { printf("%4d",pf_info.serial[i]); if ((i+1) % 10 ==0) printf("\n"); } printf("\n======================================\n"); } printf("访问%3d : 内存<",pf_info.serial[vpoint]); for(n=0;n<6;n++) // 页框信息 if (pageframe[n] >=0) printf("%3d",pageframe[n]); else printf(" "); printf(" >"); if(inpflag==1) { printf(" ==>缺页 "); printf("缺页率%3.1f",(float)(pf_info.diseffect)*100.00/vpoint); } printf("\n"); } //////////////////////////////////////////////////////////////////////// // 查找页面是否在内存,1为在内存,0为不在即缺页 int findpage(int page) { int n; for(n=0;n<6;n++) if (pageframe[n]==page ) { inpflag=0 ; return 1;} //页面不存在,缺页 inpflag=1; return 0; } //////////////////////////////////////////////////////////////////////// // FIFO页面置换算法 void fifo(void) { int n,count,pstate; rpoint=0; // 页面替换指针 invalidcount = 0; // 缺页数初始化为0 createps(); // 随机生成访问序列 count=0; // 是否装满6个页框 //pstate for(n=0;n<6;n++) // 清除页框信息 pageframe[n]=-1; inpflag=0; for(vpoint=0;vpoint<pf_info.total_pn;vpoint++) // 执行算法 { pstate=findpage(pf_info.serial[vpoint]); if(count<6) // 开始时不计算缺页 { if(pstate==0)// 页不存在则装入页面 { pageframe[rpoint]=pf_info.serial[vpoint]; rpoint=(rpoint+1) % 6; count++; } } else // 正常缺页置换 { if(pstate==0)// 页不存在则置换页面 { pageframe[rpoint]=pf_info.serial[vpoint]; rpoint=(rpoint+1) % 6; pf_info.diseffect=pf_info.diseffect+1; // 缺页次数加1 } } Sleep(1000); displayinfo(); // 显示当前状态 } // 置换算法循环结束 _getch(); return; } /////////////////////////////////////////////////////////////////// //初始化相关数据结构 void initialize() { int i; inpflag=0; pf_info.diseffect =0; pf_info.flag =0; pf_info.total_pf =8; //可以使用随机数产生,这里简化为固定 for(i=0;i<100;i++) // 清空页面序列 { pf_info.serial[i]=-1; } } /////////////////////////////////////////////////////////////////// //主函数 int main(int argc, char* argv[]) { char ch; system("cls") ; while ( true ) { printf("***********************************\n"); printf(" 1: FIFO页面置算法 \n") ; printf(" 2: 退出\n") ; printf("***********************************\n"); printf( "Enter your choice (1 or 2): "); do{ //如果输入信息不正确,继续输入 ch = (char)_getch() ; } while(ch != '1' && ch != '2'); if(ch == '2') //选择3,退出 return 0; else //选择2,FIFO fifo(); system("cls") ; } //结束 printf("\nPress Any Key To Continue:"); _getch() ; return 0; }
评论
    相关推荐
    • vc6.0+ucosii.rar
      VC6.0 UCOsII可用, 直接可以运行,并且有一个任务非常适合学习
    • VC 6.0插件
      c++ 代码提示 VC开发 Visual Assist
    • vc6.0显示行号
      VC6.0显示行号的插件,很好很强大的显行号插件,使用VC6.0编程的朋友再也不用烦恼没有行号的编程环境了。 VC显示行号插件使用说明: 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\...
    • vc6.0
      小白无脑下载安装,非常简单的安装。。。。。。。。。。。
    • VC6.0 C++
      VC6.0经典记忆 , 大一课程使用的哈,工具用习惯就很不愿意迁移了!
    • vc6.0安装包
      vc++6.0是微软比较老的C++集成开发环境,是微软visual studio的一员,一般用于新手学习C++使用,也有人用习惯了vc6.0,只是将其做为一个编辑器,因为新版的visual studio真的是太卡了,如果是老手更建议使用gvim+...
    • vc 6.0 助手
      vc6.0助手,visual studio 2008 也可以用
    • vc6.0安装包
      vc6.0安装包,可能会出现缺少资源文件或其他bug,但是要解决这些问题是很简单的,网上一大把解决方法
    • vc6.0 openssl
      openssl vc6.0实现的test通信Demo
    • VC6.0 debug
      VC6.0的调试技巧汇总,其中总会有你需要的!!!!!