`
yunchow
  • 浏览: 328083 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C语言模拟页面调度过程

阅读更多
#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;
}
分享到:
评论
1 楼 mikeandmore 2009-05-05  
有点土。。。
用lru/arc吧。。。。

相关推荐

    操作系统c语言模拟页面调度实验(存储管理实验)

    c语言,运行成功,比较基础,模拟存储管理(页面调度),页面淘汰算法采用先进先出(FIFO)

    请求分页调度C语言模拟实现源代码

    C语言编写的请求分页调度的源代码。 首先输入页号和辅存地址;例如: 0 2 1 5 2 10 3 15 4 20 等等,辅存地址不要重复,输入 -1 0即可终止输入; 然后输入主存块号,-1结束。例如:3 8 10即意味着3个主存块。 然后...

    页面调度算法 fifo 操作系统的源码

    总之,FIFO页面调度算法是操作系统内存管理的基础内容,通过C语言实现有助于加深对这一核心概念的理解。实际操作不仅可以提升编程技能,也有助于培养分析和解决问题的能力。在课程设计中,这样的项目是一个极好的...

    进程调度和作业调度算法C语言实现

    本项目通过C语言实现了这些调度算法,旨在帮助理解其工作原理并提供实践操作的机会。 首先,我们关注的是**进程调度**。进程调度主要负责在就绪队列中选择一个进程投入运行。这里涉及到三种常见的调度算法: 1. **...

    模拟实现页面调度算法--操作系统课设(含源码和设计文档)

    本项目旨在通过模拟实现两种常见的页面调度算法——FIFO(先进先出)和LRU(最近最少使用)——来深入理解它们的工作原理及其对系统性能的影响。 首先,FIFO算法是最简单的页面替换策略。按照进入内存的顺序,当...

    存储管理页面置换算法C语言实现

    本篇文章将深入探讨四种常见的页面置换算法:OPT(最佳页面置换算法)、FIFO(先进先出算法)、LRU(最近最久未使用算法)和LFU(最不经常使用算法)的C语言实现。 **1. OPT(最佳页面置换算法)** OPT算法被认为是...

    操作系统页面调度

    在上述的描述中提到,这个资料可能包含了一个C语言实现的页面调度模拟项目,这通常会涉及以下内容: 1. **数据结构设计**:实现页面和进程的抽象数据类型,包括页表、队列或链表等数据结构。 2. **算法实现**:编写...

    页面调度算法.rar

    在实验环境中,如Visual Studio中实现页面调度算法,通常会用C++或C语言编写模拟程序,通过设计数据结构来表示内存状态和页面使用情况,然后实现不同算法的决策逻辑。这样的实验有助于理解算法的工作原理,并通过...

    基于visual C++的页面置换算法模拟(C语言)

    它允许用户以可视化的方式探索和理解复杂的内存调度过程,这对于学习和教学都是非常有益的。通过实际操作,不仅可以增强理论知识,也能培养解决问题的能力,这对于IT专业人士来说是非常重要的技能。

    用FIFO和LRU算法处理缺页中断(C语言)

    实现功能: 1、模拟分页式存储管理中硬件的士转换和产生缺页中断 2、用先进先出(FIFO)页面调度算法处理缺页中断 3、用最近最少用(LRU)页面调度算法处理缺页中断

    实验报告3页面置换算法演示.doc

    实验过程包括输入程序指令数,生成指令地址序列,根据页面大小确定页号序列,然后针对每个页面置换算法进行模拟。在Java源代码中,可以看到实验者定义了必要的全局变量,如页面大小、指令序列、页号序列和内存块数。...

    操作系统中c语言实现页面置换算法.rar

    在C语言实现这些算法时,通常需要创建数据结构来表示页面、页表、内存状态等,并编写函数来模拟页面的访问、替换和内存调度过程。控制台输出是观察和验证算法效果的重要途径,通过整齐明了的输出,可以直观地看到每...

    操作系统 实验 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断

    在本实验中,我们将深入探讨操作系统中的分页式虚拟存储管理,包括硬件的地址转换机制和缺页中断的处理,以及如何应用先进先出(FIFO)页面调度算法来解决这些问题。此外,我们还将实践构建一个简单的文件系统,以便...

    进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法代码

    进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码 本文将对操作系统中进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码进行详细的解释和分析。 一、进程...

    操作系统页面调度算法.pdf

    实验环境要求使用PC兼容机和Windows2000/XP系统,实验内容包括设计程序来模拟页面调度,并比较FIFO和LRU算法的性能。实验结果显示,无论输入的作业序号是什么,两种算法的缺页中断次数和缺页中断率都是相同的,这...

    第4章-实验4-模拟先进先出(FIFO)页面置换算法1

    **实验4 - 模拟先进先出(FIFO)页面置换算法** 在计算机系统中,页面置换算法是虚拟存储管理的重要组成部分,用于处理由于物理内存不足而需要替换内存中某些页面的情况。FIFO(First In First Out)页面置换算法是最...

    操作系统实验指导书(用c语言实现了操作系统里的几个经典算法!)

    学生需要模拟资源分配过程,根据资源申请和系统状态判断安全性,避免资源的循环等待。 5. **可变分区存储管理**: 在实验六中,学生将模拟可变分区存储管理,这是一种动态调整内存分区大小的内存管理策略。这涉及...

    模拟FIFO页面置换算法

    通过理解FIFO页面置换算法的原理,并用C语言实现这一过程,我们可以更好地掌握内存管理和页面调度的基础知识,为理解和优化其他更复杂的算法奠定基础。在实践中,不断优化这些算法可以显著提高操作系统的性能和资源...

    操作系统课程设计-页面置换算法C语言.pdf

    - 时钟(Clock)算法:也称为最近未使用(Not Recently Used,NRU)算法,它模拟了一个时钟,所有页面围成一个圈,当需要替换页面时,指针移动至下一个页面,并检查访问位,如果访问位为1,则将其清零并继续移动...

    计算机操作系统 c语言编写

    通过C语言编写页面置换算法模拟,可以帮助我们深入理解这些算法的工作原理和性能差异。 其次,多道批处理作业调度模拟是另一个重要的话题。在批处理系统中,许多作业被提交给系统,操作系统负责决定哪个作业应该...

Global site tag (gtag.js) - Google Analytics