#include <stdio.h>
#include <time.h>
#include<stdlib.h>
#define randomize() srand((unsigned)time(NULL)) //定义一个宏用来产生随机数的
#define N 10 //调动的次数
#define RealPage 4
struct Page
{
int pn; //虚页号
int pfn; //实页号
int times;
//struct Page *next; //指向下一个页面
};
int count,k,i,j,flag,call[N];
struct Page MemPage[RealPage];
void output()
{
printf("\n\n-------------内存页面情况为-------------------\n");
printf("调度顺序为:");
int p;
for(p=0;p<N;p++)
printf("%d ",call[p]);
printf("\n");
for(k=0;k<RealPage;k++)
printf("序号:%d 虚页号:%d 实页号:%d Time:%d count:%d\n",k,MemPage[k].pn,MemPage[k].pfn,MemPage[k].times,count);
}
int main()
{
count = 0; //替换计数器
int init_t;
for(init_t=0;init_t<RealPage;init_t++)
//MemPage[init_t].pfn = -1;
randomize();
printf("调度顺序为:");
for(i=0;i<N;i++)
{
call[i] = rand()%10;
printf("%d ",call[i]);
}
//开始调度了
for(i=0;i<N;i++)
{
flag = 1;
int m;
for(m=0;m<RealPage && MemPage[m].pn!=call[i];m++)
{
if(MemPage[m].pfn == 0)
{
MemPage[m].pfn = 3478 - m*79;
MemPage[m].times = 1;
MemPage[m].pn = call[i];
count ++;
break;
}
}
//output();
for(j=0;j<4 && flag!=0;j++)
{
if(call[i] == MemPage[j].pn)
{
flag = 0;
break;
}
//在实页中找不到此页,用LRU算法进行替换
else
{
if(j == RealPage-1) //表示全都比较一遍了,还是没找到相同的页,进行替换
{
int t1,t2,temp;
for(t1=0;t1<RealPage;t1++) //算出在内存中时间最长者,将其替出来
{
for(t2=t1+1;t2<RealPage;t2++)
if(MemPage[t1].times > MemPage[t2].times)
temp = t1;
else
temp = t2;
}
MemPage[temp].pn = call[i]; //替换
MemPage[temp].times = 1; //时间重新开始计时
count ++;
}
}
}
int r;
for(r=0;r<RealPage;r++)
MemPage[r].times ++;
int n = 755599998;
while(n--);
output();
}
printf("\n 缺页率为:%f\n\n",(float)count/10);
return 0;
}
分享到:
相关推荐
c语言,运行成功,比较基础,模拟存储管理(页面调度),页面淘汰算法采用先进先出(FIFO)
C语言编写的请求分页调度的源代码。 首先输入页号和辅存地址;例如: 0 2 1 5 2 10 3 15 4 20 等等,辅存地址不要重复,输入 -1 0即可终止输入; 然后输入主存块号,-1结束。例如:3 8 10即意味着3个主存块。 然后...
总之,FIFO页面调度算法是操作系统内存管理的基础内容,通过C语言实现有助于加深对这一核心概念的理解。实际操作不仅可以提升编程技能,也有助于培养分析和解决问题的能力。在课程设计中,这样的项目是一个极好的...
本项目通过C语言实现了这些调度算法,旨在帮助理解其工作原理并提供实践操作的机会。 首先,我们关注的是**进程调度**。进程调度主要负责在就绪队列中选择一个进程投入运行。这里涉及到三种常见的调度算法: 1. **...
本项目旨在通过模拟实现两种常见的页面调度算法——FIFO(先进先出)和LRU(最近最少使用)——来深入理解它们的工作原理及其对系统性能的影响。 首先,FIFO算法是最简单的页面替换策略。按照进入内存的顺序,当...
本篇文章将深入探讨四种常见的页面置换算法:OPT(最佳页面置换算法)、FIFO(先进先出算法)、LRU(最近最久未使用算法)和LFU(最不经常使用算法)的C语言实现。 **1. OPT(最佳页面置换算法)** OPT算法被认为是...
在上述的描述中提到,这个资料可能包含了一个C语言实现的页面调度模拟项目,这通常会涉及以下内容: 1. **数据结构设计**:实现页面和进程的抽象数据类型,包括页表、队列或链表等数据结构。 2. **算法实现**:编写...
在实验环境中,如Visual Studio中实现页面调度算法,通常会用C++或C语言编写模拟程序,通过设计数据结构来表示内存状态和页面使用情况,然后实现不同算法的决策逻辑。这样的实验有助于理解算法的工作原理,并通过...
它允许用户以可视化的方式探索和理解复杂的内存调度过程,这对于学习和教学都是非常有益的。通过实际操作,不仅可以增强理论知识,也能培养解决问题的能力,这对于IT专业人士来说是非常重要的技能。
实现功能: 1、模拟分页式存储管理中硬件的士转换和产生缺页中断 2、用先进先出(FIFO)页面调度算法处理缺页中断 3、用最近最少用(LRU)页面调度算法处理缺页中断
实验过程包括输入程序指令数,生成指令地址序列,根据页面大小确定页号序列,然后针对每个页面置换算法进行模拟。在Java源代码中,可以看到实验者定义了必要的全局变量,如页面大小、指令序列、页号序列和内存块数。...
在C语言实现这些算法时,通常需要创建数据结构来表示页面、页表、内存状态等,并编写函数来模拟页面的访问、替换和内存调度过程。控制台输出是观察和验证算法效果的重要途径,通过整齐明了的输出,可以直观地看到每...
在本实验中,我们将深入探讨操作系统中的分页式虚拟存储管理,包括硬件的地址转换机制和缺页中断的处理,以及如何应用先进先出(FIFO)页面调度算法来解决这些问题。此外,我们还将实践构建一个简单的文件系统,以便...
进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码 本文将对操作系统中进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码进行详细的解释和分析。 一、进程...
实验环境要求使用PC兼容机和Windows2000/XP系统,实验内容包括设计程序来模拟页面调度,并比较FIFO和LRU算法的性能。实验结果显示,无论输入的作业序号是什么,两种算法的缺页中断次数和缺页中断率都是相同的,这...
**实验4 - 模拟先进先出(FIFO)页面置换算法** 在计算机系统中,页面置换算法是虚拟存储管理的重要组成部分,用于处理由于物理内存不足而需要替换内存中某些页面的情况。FIFO(First In First Out)页面置换算法是最...
学生需要模拟资源分配过程,根据资源申请和系统状态判断安全性,避免资源的循环等待。 5. **可变分区存储管理**: 在实验六中,学生将模拟可变分区存储管理,这是一种动态调整内存分区大小的内存管理策略。这涉及...
通过理解FIFO页面置换算法的原理,并用C语言实现这一过程,我们可以更好地掌握内存管理和页面调度的基础知识,为理解和优化其他更复杂的算法奠定基础。在实践中,不断优化这些算法可以显著提高操作系统的性能和资源...
- 时钟(Clock)算法:也称为最近未使用(Not Recently Used,NRU)算法,它模拟了一个时钟,所有页面围成一个圈,当需要替换页面时,指针移动至下一个页面,并检查访问位,如果访问位为1,则将其清零并继续移动...
通过C语言编写页面置换算法模拟,可以帮助我们深入理解这些算法的工作原理和性能差异。 其次,多道批处理作业调度模拟是另一个重要的话题。在批处理系统中,许多作业被提交给系统,操作系统负责决定哪个作业应该...