iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言怎么实现页面置换算法
  • 286
分享到

C语言怎么实现页面置换算法

2023-06-25 21:06:55 286人浏览 八月长安
摘要

本篇内容主要讲解“C语言怎么实现页面置换算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现页面置换算法”吧!1.实现效果2.实现源代码 #include<iOStr

本篇内容主要讲解“C语言怎么实现页面置换算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现页面置换算法”吧!

1.实现效果

C语言怎么实现页面置换算法

C语言怎么实现页面置换算法

2.实现源代码 

#include<iOStream>#include<process.h>#include<stdlib.h>#include<ctime>#include<coNIO.h>#include<stdio.h>#include<string.h>using namespace std;#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n")#define bsize 4 //物理块大小#define psize 16 //进程大小 void chushihua();//初始化函数 void ymzh(); void yemianzhihuan (); void changeaddr(struct Page p[], int logaddr); void dizhizhuanhuan(); void menu(); int wang(); int yemianliu[32]={0};//全局变量数组,地址流 int p; struct Page  {     int pno;//页号     int flag;//标志位     int cno;//主存号     int modf;//修改位     int addr;//外存地址}Page;  //全局变量p是一共有多少地址流 typedef struct pagel {     int num;      int time;   }Pagel;   Pagel b[bsize];  int c[bsize][psize]; int queue[100]; int k; int phb[bsize]={0};//物理块标号 int pro[psize]={0};//进程序列号 int flag[bsize]={0};//进程等待次数(存放最久未被使用的进程标志)*/ int i=0,j=0;//i表示进程序列号,j表示物理块号*/ int m =-1,n =-1;//物理块空闲和进程是否相同判断标志*/ int mmax=-1, maxflag=0;//标记替换物理块进程下标*/ int count =0; //统计页面缺页次数 void chushihua() //初始化函数{     int t;     srand(time(0));//随机产生指令序列         p=12+rand()%32;     cout<<"地址流序列:";     cout<<endl;     for(i=0; i<p; i++)     {         t=1+rand()%9;         yemianliu[i]=t;//将随机产生的指令数存入页面流    }    for (i=p-1;i>=0;i--)    {        cout<<yemianliu[i]<<" ";    }    cout<<endl;}void ymzh(){    chushihua();     yemianzhihuan();} void yemianzhihuan() {      int a;     printf("----------------------------------\n");     printf("☆☆欢迎使用分页模拟实验系统☆☆\n");     printf("----------------------------------");     printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("☆☆1.进入硬件地址变换算法  ☆☆\n");     printf("☆☆------------------------☆☆\n");     printf("☆☆2.进入页面置换算法      ☆☆\n");     printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("请输入您的选择:"); switch(a) {     case 1:         ymzh();         break;     case 2:         wang();         break;     default:     cout<<"输入有误,请重新输入!"<<endl;     break; }} void changeaddr(struct Page p[], int logaddr){//地址变换     int j=logaddr/64;//对应的块号     int k=logaddr%64; //对应的偏移量     int flag=0;     int addr;     for(int i=0;i<8;i++)     {        if(p[i].pno==j)//找到对应的页号        {            if(p[i].flag==1)//页面标志为1            {             addr=p[i].cno*64+k;             cout<<"物理地址为:"<<addr<<endl;             cout<<"详细信息:"<<"\t页面号:"<<p[i].pno<<"\t 主存号:"<<p[i].cno<<"\t偏移量:"<<k<<endl;             flag=1;             break;            }        }    }        if(flag==0)            cout<<"该页不在主存,产生缺页中断"<<endl;    } void dizhizhuanhuan() {     int a;     int ins;//指令逻辑地址     struct Page p[8];    p[0].pno=0;p[0].flag=1;p[0].cno=5;p[0].modf=1;p[0].addr=011;    p[1].pno=1;p[1].flag=1;p[1].cno=8;p[1].modf=1;p[1].addr=012;    p[2].pno=2;p[2].flag=1;p[2].cno=9;p[2].modf=0;p[2].addr=013;    p[3].pno=3;p[3].flag=1;p[3].cno=10;p[3].modf=0;p[3].addr=015;    p[4].pno=4;p[4].flag=0;p[4].addr=017;    p[5].pno=5;p[5].flag=0;p[5].addr=025;    p[6].pno=6;p[6].flag=0;p[6].addr=212;    p[7].pno=7;p[7].flag=0;p[7].addr=213;     printf("\t\t\t--------------------------------\n");     printf("\t\t\t☆☆欢迎使用分页模拟实验系统☆☆\n");     printf("\t\t\t---------------------------------\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("\t\t\t☆☆1.输入指令              ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆2.进入页面置换算法      ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆0.EXIT                  ☆☆\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); while(a!=0) {    cout<<endl<<"请输入您的选择:";     cin>>a;    cout<<"页号"<<"标记位"<<"外存地址"<<"主存号"<<endl;     for(int i=0;i<8;i++)     {         cout<<p[i].pno<<"\t"<<p[i].flag<<"\t"<<p[i].addr<<"\t";         if(p[i].flag)         cout<<p[i].cno;         cout<<endl;    } switch(a) {     case 0:printf("\t\t\t再见!\t\t\t\n"); break;     case 1:         cout<<"请输入指令的逻辑地址:";         cin>>ins;         changeaddr(p, ins);break;     case 2: system("CLS"); a=wang();break;     default:cout<<"输入有误,请重新输入!"<<endl;break;    }}} void menu() { int a;     printf("\t\t\t--------------------------------\n");     printf("\t\t\t☆☆欢迎使用分页模拟实验系统☆☆\n");     printf("\t\t\t---------------------------------\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("\t\t\t☆☆1.输入指令              ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆2.进入页面置换算法      ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆0.EXIT                  ☆☆\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("请选择所要执行的操作:");     scanf("%d",&a);     switch(a)     {     case 0: printf("\t\t\t-再见!-\t\t\t\n");break;     case 1: dizhizhuanhuan (); break;     case 2: wang (); break;     default:cout<<"输入有误,请重新输入!"<<endl;break;    }}int main() {     menu();}/ void Init(Pagel *b,int c[bsize][psize]) {     int i,j;     for (i=0;i<psize;i++)     {         b[i].num=-1;         b[i].time=psize-i-1;} for(i=0;i<bsize;i++)     for(j=0;j<psize;j++)        c[i][j]=-1;} int GetMax(Pagel *b) {     int i;     int max=-1;     int tag=0;     for(i=0;i<bsize;i++)     {         if(b[i].time>max)         {             max=b[i].time;             tag= i;        }    }     return tag;} int Equation(int fold, Pagel *b) {     int i;    for(i=0;i<bsize;i++)    {         if(fold==b[i]. num)             return i;    }     return -1;} void Lruu(int fold, Pagel *b) {     int i;     int val;     val=Equation(fold, b);     if (val>=0)     {         b[val].time=0;         for(i=0;i<bsize;i++)             if (i!=val)                 b[i].time++;    }     else     {         queue[++k]=fold;         val=GetMax(b);         b[val].num=fold;         b[val].time=0;         for (i=0;i<bsize;i++){//         URLcount++;             if (i!=val)                 b[i].time++;        }    }} void LRU() {     int i,j;     k=0;     Init(b, c);     for(i=0; i<psize; i++)     {         Lruu(pro[i],b);         c[0][i]=pro[i];                 for(j=0;j<bsize;j++)            c[j][i]=b[j].num;    }         printf("内存状态为:\n");     Myprintf;    for(j=0;j<psize;j++)         printf("|%2d", pro[j]);     printf("|\n");     Myprintf;     for(i=0;i<bsize;i++)     {         for(j=0; j<psize; j++)         {             if(c[i][j]==-1)                 printf("|%2c",32);              else                 printf("|%2d",c[i][j]);        }         printf("|\n");    }     Myprintf;//     printf("\n调入队列为:");//    for(i=0;i<k;i++)//        printf("%3D", queue[i]);    printf("\n缺页次数为:%6d\n   缺页率 :%16. 6f", k+1,(float)(k+1)/psize);}//********主函数 int wang() {     int sel;     do{     printf("\t\t\t--------------------------------\n");     printf("\t\t\t☆☆欢迎使用分页模拟实验系统☆☆\n");     printf("\t\t\t---------------------------------\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("\t\t\t☆☆       虚拟内存         ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆1.产生随机序列          ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆2.最近最久未使用        ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆3.先进先出              ☆☆\n");     printf("\t\t\t☆☆------------------------☆☆\n");     printf("\t\t\t☆☆0.退出                  ☆☆\n");     printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");     printf("请选择所要执行的操作:");     scanf("%d",&sel);     switch(sel)    {         case 0: printf("\t\t\t再见!t\t\t\n"); break;         case 1: build(); break;         case 2: printf("最近最久未使用\n"); LRU();empty(); printf("\n");break;         case 3: printf("先进先出算法\n"); FIFO();empty();printf("\n");break;         default:printf("请输入正确的选项号!");printf("\n\n");break;    }}while(sel !=0 );     return sel;}

到此,相信大家对“C语言怎么实现页面置换算法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C语言怎么实现页面置换算法

本文链接: https://www.lsjlt.com/news/306356.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言怎么实现页面置换算法
    本篇内容主要讲解“C语言怎么实现页面置换算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现页面置换算法”吧!1.实现效果2.实现源代码 #include<iostr...
    99+
    2023-06-25
  • C语言实现页面置换算法(FIFO、LRU)
    目录1.实现效果2.实现源代码 1.实现效果 2.实现源代码  #include<iostream> #include<process.h> #inc...
    99+
    2024-04-02
  • Java实现FIFO、LRU、LFU、OPT页面置换算法
    目录题目要求具体代码题目要求 采用多道程序思想设计一个程序,模拟页存储管理地址变换的过程,可采用FIFO、LRU、LFU、OPT四页面置换算法。基本要求如下: 需要建立访问页表线程、...
    99+
    2023-02-07
    Java 页面置换算法 JAVA FIFO LRU LFU OPT
  • C语言怎么实现扫雷算法
    这篇文章主要讲解了“C语言怎么实现扫雷算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么实现扫雷算法”吧!扫雷分析从小到大你或许没玩过但一定听过的游戏——扫雷首先我们来分一下“扫雷...
    99+
    2023-06-20
  • C语言如何实现交换排序算法
    这篇文章主要介绍了C语言如何实现交换排序算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现交换排序算法文章都会有所收获,下面我们一起来看看吧。一、冒泡排序1.基本思想对于很多同学来说冒泡排序是再熟...
    99+
    2023-07-02
  • C语言怎么实现三子棋算法
    这篇文章主要介绍“C语言怎么实现三子棋算法”,在日常操作中,相信很多人在C语言怎么实现三子棋算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现三子棋算法”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • c语言pid控制算法怎么实现
    C语言中,可以通过使用fork函数来创建子进程,然后使用exec函数族中的一个函数来在子进程中执行另一个程序。这样可以实现简单的pi...
    99+
    2023-09-21
    c语言
  • c语言全排列算法怎么实现
    以下是一个用C语言实现全排列的算法示例: #include <stdio.h> #include <string....
    99+
    2024-04-02
  • 页面置换算法有哪些
    页面置换算法有:1、FIFO算法,通过维护一个页面队列,将最早进入内存的页面置换出去;2、LRU算法,根据页面的访问历史来进行页面置换;3、LFU算法,根据页面的访问次数来进行页面置换;4、Clock算法,通过使用一个时钟指针来遍历页面队列...
    99+
    2023-08-14
  • C语言怎么实现radon变换
    C语言实现Radon变换的步骤如下: 首先,你需要定义一个输入图像的二维数组,并初始化图像的像素值。 创建一个与输入图像等大...
    99+
    2023-10-23
    C语言
  • c语言排列组合算法怎么实现
    C语言排列组合算法可以通过递归实现。下面是一个示例代码: #include <stdio.h> void combin...
    99+
    2024-02-29
    c语言
  • C语言怎么实现12种排序算法
    这篇文章主要介绍了C语言怎么实现12种排序算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现12种排序算法文章都会有所收获,下面我们一起来看看吧。1.冒泡排序思路:比较相邻的两个数字,如果前一个数...
    99+
    2023-06-30
  • c语言图像识别算法怎么实现
    要实现图像识别算法,可以使用以下步骤: 数据预处理:首先,将图像转换为数字矩阵表示。可以使用图像处理库(例如OpenCV)读取图...
    99+
    2023-10-24
    c语言
  • c语言环形加密算法怎么实现
    C语言环形加密算法的实现可以基于以下思路: 输入待加密的字符串和密钥。 将字符串存储在一个字符数组中。 定义一个循环变量i,初始化...
    99+
    2024-02-29
    c语言
  • 银行家算法 C语言实现
    以下是银行家算法在C语言中的实现:```c#include // 资源数量#define M 3// 进程数量#define N 5...
    99+
    2023-09-28
    C语言
  • C语言回文字符串算法怎么实现
    实现回文字符串算法的一种常见方法是通过比较字符串的首尾字符来判断是否为回文。具体步骤如下: 定义两个指针,一个指向字符串的首字符,...
    99+
    2024-02-29
    C语言
  • c语言怎么算除法
    c 语言中,除法运算符 / 的行为取决于操作数的数据类型:整数除法:操作数为整数时,进行整数除法,结果向下取整。浮点数除法:操作数为浮点数时,进行浮点数除法,结果为浮点数。类型转换:一个...
    99+
    2024-04-13
    c语言 隐式转换
  • c语言怎么实现float和int转换
    在C语言中,可以通过强制类型转换将float类型转换为int类型,也可以通过类型转换函数将int类型转换为float类型。1. 将f...
    99+
    2023-10-10
    c语言
  • c语言斐波那契数列算法怎么实现
    斐波那契数列是指每个数都是前两个数之和的数列,即F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n...
    99+
    2023-10-30
    c语言
  • C语言算法积累分离数位怎么实现
    今天小编给大家分享一下C语言算法积累分离数位怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目:输出一个三位整数的个...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作