页面置换算法模拟实现-操作系统课程设计基于Java

这篇具有很好参考价值的文章主要介绍了页面置换算法模拟实现-操作系统课程设计基于Java。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、设计目的及意义

  • 存储管理的主要功能之一是合理的分配空间,请求页式存储管理是一种常用的虚拟存储管理技术。在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生中断,当发生中断时,系统必须在内存选择一个页面移出内存,调用页面置换算法,以便为调入新的页面让出空间。
  • 本次设计,使用JAVA语言对于置换算法进行模拟实现,通过对请求页式存储管理中页面置换算法的模拟设计 ,掌握请求页式存储管理页面置换算法,并进一步理解虚拟存储技术的原理及特点。

二、需求分析

(一)实现的功能

设计一个虚拟存储及内存工作区,使用先进先出算法(FIFO),最近最久未使用算法(LRU),理想型淘汰算法(OPT),计算不同内存容量下的缺页率,以图表的形式模拟表示出不同算法内存中页面的变化情况,并对不同内存容量下不同算法的缺页率进行比较分析。

1.虚拟内存初始化

根据用户的输入的“物理块数”和“序列数”,确定虚拟内存的大小为,随机生成随机数求余计算得到其所在的页数,并记录到页面访问序列串中;

2.页面置换算法实现

用户选择三种不同的算法进行模拟实现,根据不同的算法规则,以表格的形式表示出内存中页面的变化情况,(其中横坐标表示步数,纵坐标表示物理块数)。每一步,将进入内存的页面进行标记,便于用户观察页面的变化情况,同时计算出缺页次数。

3.缺页率的分析比较

根据缺页次数得到缺页率,从缺页率的角度对各个算法进行比较,得到不同的页面访问序列及不同的虚拟内存大小下的最优算法。

(二)算法分析

1.先进先出算法(FIFO)

优先淘汰最早进入内存的页面,亦即总是选择在内存中驻留时间最久的页面将其淘汰:使用replacepos对于最先进入的页面进行标记,初始化为0,当需要进行置换时,选择Memory[replacepos],即第一次页面置换替换Memory[0],然后replacepos = (replacepos + 1) % block,依次执行下去,保证每次都能替换出最先进入内存的页面。

2.最近最久未使用算法(LRU)

选择最近最长时间未访问过的页面予以淘汰:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间use。当需要淘汰一个页面时,选择现有页面中use值最大的进行置换,置换后对应的页面置为0。

3.理想型淘汰算法(OPT)

被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面:依次遍历后续所有的页面序列,将已经存在于内存中的序列号进行标记,不同页面出现的位置保存在数组use中,最后,替换use为0的页面,倘若,每个页面在后续页面中都调用,则选择use最大的页面进行替换。

三、详细设计与实现

(一)虚拟内存初始化

进入初始化界面,要求用户输入内存块数以及序列数,便于构造虚拟内存以及随机生成序列
页面置换算法模拟实现-操作系统课程设计基于Java
随机生成序列如下,同时将其记录到页面访问序列串中:
页面置换算法模拟实现-操作系统课程设计基于Java
关键代码实现如下:

       int[] randomSeq = new int[128]; // 随机序列
		int[] pageSeq = new int[128];// 页地址流
		String[] bcolumnNames = { "编号", "页地址流" }; // 列名
		Object[][] btableVales = new Object[128][2]; // 数据

  int count = 0;
	// 随机生成1到seq区间中的整数
	Random r = new Random();
for (count = 0; count < seqNum; count++) {
	  for (int i = 0; i < seqNum; i++) {// 给tab中的行列赋值
	     btableVales[i][0] = i;
	     randomSeq[i] = r.nextInt(100) + 1;
	     btableVales[i][1] = randomSeq[i] /10;
	     pageSeq[i] = randomSeq[i] / 10;// 求余,计算所在页数
	   }					
}
HitRate HitFrame = new HitRate(pageSeq, block,seqNum); // 将所在页数和物理块数传值

(二)页面置换模拟

1.FIFO

页面置换算法模拟实现-操作系统课程设计基于Java
关键代码实现如下:

boolean flag;
		int pos = -1;// 标记指令序列数组
		int memorynum = 0;
		int[] Memory = new int[block];// 内存物理块所含页面数组
		int[][] changecolor = new int[block][seqNum+1];
		int replacepos = 0;// 被替换页面所在的物理块
// FIFO算法
		if (comboBox.getSelectedItem().equals("FIFO")) {
		for (int a = 0; a < block; a++)
			Memory[a] = -1; // 初始化为-1
			for (int q = 0; q < seqNum; q++) {
				flag = false;
				pos++;
				int temp = seq[pos];// 中间变量暂时存放当前指令所在页地址
				// 查看是否已经存在内存中
				for (int i = 0; i < block; i++) {
				if (Memory[i] == temp) {// 如果命中,命中数+1,跳出循环
					flag = true;
					break;
            }
				// 如果未命中,考虑是否要替换
				if (!flag) {
					FIFOhit++;
					if (memorynum < block) {// 如果内存没满,则不用替换
						Memory[memorynum] = temp;
						changecolor[memorynum][pos + 1] = 1;
						memorynum++;
					} else {// 如果内存已满,选择最早调入的页面进行替换
						Memory[replacepos] = temp;// Memory[replacepos]为被替换的元素,第一次满即替换memory[0]
					changecolor[replacepos][pos + 1] = 1;// 标记待变颜色的表格框
					replacepos = (replacepos + 1) % block;// 按照block大小来循环替换
					}
				}
				for (int i = 0; i < block; i++)
					data1[i][pos + 1] = Memory[i];

2.LRU

页面置换算法模拟实现-操作系统课程设计基于Java
关键代码实现如下:

// 如果内存已满,选择最近最久未使用的页面进行替换
		 for (int i = 1; count < block; i++) {
			for (int j = 0; j < block; j++) {
			if (Memory[j] == seq[pos - i]) {// 在块中找到了指令序列所在页面
				if (use[j] == 0) {
				// System.out.println("第"+q+"次use["+j+"]为0,将变为"+i);
				count++;
				use[j] = i;
				}
				break;
			}
		}
			int max = 0;
			// use最大的即为待替换的页面
			for (int i = 0; i < block; i++) {
				if (max < use[i]) {
					max = use[i];
					replacepos = i;
				}
			}
			Memory[replacepos] = temp;// Memory[replacepos]为被替换的元素
			changecolor[replacepos][pos + 1] = 1;// 标记待变颜色的表格框
		}

3.OPT

页面置换算法模拟实现-操作系统课程设计基于Java
关键代码如下:

for (int x = pos; x < seqNum; x++) {
			for (int j = 0; j < block; j++) {
				if (Memory[j] == seq[x]) {// 在块中找到了指令序列所在页面
					if (use[j] == 0) {
						// System.out.println("第"+q+"次use["+j+"]为0,将变为"+i);
						count++;
						use[j] = x;
					}
					break;
			   }
}
			if (count == block)// 若块中页面在后续执行指令都调用了
					break;
				}
		boolean flag1 = false;
		for (int i = 0; i < block; i++) {
			if (use[i] == 0) {
				replacepos = i;
				
flag1 = true;
				break;
				}
			}
			if (!flag1) {// 如果每个块中页面在后续指令中都调用了
				int max = 0;
				// use最大的即为待替换的页面
				for (int i = 0; i < block; i++) {
						if (max < use[i]) {
							max = use[i];
							replacepos = i;
				}
			Memory[replacepos] = temp;// Memory[replacepos]为被替换的元素

(三)缺页率的分析比较

通过计算三种置换算法的缺页率得到最优算法:
页面置换算法模拟实现-操作系统课程设计基于Java文章来源地址https://www.toymoban.com/news/detail-471911.html

   实现代码如下:
int min = 128;
				String str = null;
				if (FIFOhit < min) {
					min = FIFOhit;  str = "FIFO";
				}
				if (LRUhit < min) {
					min = LRUhit; str = "LRU";
				}
				if (OPThit < min) {
					min = OPThit; str = "OPT";
				}
				 textbest.setText(str);

四、设计总结

  • 通过这次课程设计巩固了我平时在课堂上所学的知识,掌握请求页式存储管理页面置换算法,并进一步理解虚拟存储技术的原理,对于不同算法的具体实现也有了更加深刻的认识。
  • 在多次的测试运行过程中,可以得到,对同一种算法,对于不同的访问序列,其缺页率是不同,会有所变化,总的来看,最佳置换算法的缺页率是最低的;同时对比不同内存块数下的程序运行结果能够看出,算法的缺页率与分配的内存块数有关系,分配的内存块数越多,缺页率越低。

到了这里,关于页面置换算法模拟实现-操作系统课程设计基于Java的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【操作系统】FIFO先进先出页面置换算法(C语言实现)

    FIFO页面置换算法,计算缺页率,文末附代码,及例题解析 1、内容         在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为

    2024年02月11日
    浏览(36)
  • 操作系统 | 实验五 页面置换算法

    (1)加深对页面置换算法的理解。 (2)掌握几种页面置换算法的实现方法。 (3)通过实验比较各种置换算法的优劣。 参考用C语言实现的先进先出算法FIFO的代码,实现最佳置换算法OPT和最近最少使用算法LRU。使得随机给出一个页面执行序列,计算不同置换算法的缺页数,

    2024年02月04日
    浏览(44)
  • 虚拟内存页面置换算法(操作系统)

    通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。 问题描述: 设计程序模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物

    2024年02月04日
    浏览(50)
  • 计算机操作系统——页面置换算法

    声明 :本篇博客参考书籍《计算机操作系统》(西安电子科技大学出版社) 首先说说影响页面换进换出的效率的几个因素: (1)页面置换算法。该因素是影响页面换进换出效率的重要因素。一个好的页面置换算法可以使进程在运行过程中具有较低的缺页率,从而减少页面换

    2024年02月07日
    浏览(64)
  • 操作系统常见的十种页面置换算法

    OS常见页面置换算法整理 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页

    2024年02月02日
    浏览(46)
  • 【操作系统】抖动、缺页中断率、页面置换算法

    对于进程P的一个长度为A的页面访问序列,如果进程P在运行中发生缺页中断的次数为F,则f = F/A称为缺页中断率。 1、进程分得的主存页框数:页框数多则缺页中断率低,页框数少则缺页中断率高。 2、页面大小:页面大则缺页中断率低,页面小则缺页中断率高。 3、页面替换

    2024年01月20日
    浏览(51)
  • 【操作系统】虚拟内存相关&分段分页&页面置换算法

    【进程地址空间=虚拟地址空间=C/C++程序地址空间就是那个4G的空间】 虚拟内存是操作系统内核为了对进程地址空间进行管理,而设计的一个逻辑意义上的内存空间概念。在程序运行过程中,虚拟内存中需要被访问的部分会被映射到物理内存空间中, CPU 通过将虚拟地址翻译成

    2024年02月12日
    浏览(38)
  • 【操作系统--页面置换算法】C语言详解--大作业版(附代码)

    1设计和实现FIFO,LRU,OPT和CLOCK算法 2设计和实现一个完整的可供选择不同算法的程序 3通过页面访问序列随机发生器实现对上述算法的测试及性能比较 4领略页面置换背后的资源调配思想,并将其运用到其他的操作系统的知识,以及运用到生活中的资源调配策略以及解决措施 5理

    2024年02月06日
    浏览(40)
  • 【操作系统笔记04】操作系统之内存管理方式(分页、分段、段页式)、虚拟存储技术、页面置换算法

    这篇文章,主要介绍操作系统之内存管理方式(分页、分段、段页式)、虚拟存储技术、页面置换算法。 目录 一、操作系统 1.1、基地址变换机构 1.2、具有快表的地址变换机构

    2023年04月21日
    浏览(41)
  • 【操作系统】几种基本页面置换算法的基本思想和流程图

      在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包