三种页面置换算法的分析及C语言代码

详细word文档已经上传到百度网盘了,这是链接

链接:https://pan.baidu.com/s/13lEZBX_VJAHZbhN22MvyMQ 

密码:1etj,

更新于2018年04月16日。。

坑爹的csdn竟然不允许上传免费资源!!真过分。。

1. FIFO,Optimal,LRU这三种置换算法的优劣?

  • 优点:

    ①     FIFO页面置换算法实现简单,要求的硬件支持较少。

    ②     Optimal页面置换算法可保证获得最低的缺页率,并且可以用来评价其他算法。

    ③     LRU页面置换算法利用“最近的过去”代替“最近的将来”,以此模拟Optimal算法,是实际应用中缺页率最低的算法。

  • 缺点:

    ①     FIFO算法所依据的条件是各个页面调入内存的时间,而页面调入内存的先后并不能反映页面的使用情况。

    ②     Optimal算法是理论上的算法,目前该算法是无法实现的。

    ③     LRU算法是根据各页以前的使用情况,来代替各页面将来的使用情况,进而判断要替换出去的页面,而页面过去和将来的走向之间并无必然的联系;其实际应用时要求较多的硬件支持,因而多采用近似算法。

2. 在什么情况下采用哪种置换算法更有利?

  • FIFO算法在按线性顺序访问地址空间时使用;当硬件水平不足时,FIFO算法也可作为首选。
  • OPT算法可以进行模拟实验分析或理论分析。
  • 当系统有寄存器或栈的硬件支持时,利用LRU算法可以获得最低缺页率。

3. 三种算法的C语言实现及运行截屏。

#include "stdio.h"
#include "stdlib.h"

typedef struct item
{
	int num;		//页号
	int time;		//等待时间,LRU算法会用到这个属性
}Pro;

int pageNum;		//系统分配给作业的主存中的页面数
int memoryNum;		//可用内存页面数

void print(Pro *page1);		//打印当前主存中的页面
int  Search(int num1, Pro *memory1);	//在页面集memory1中查找num1,如果找到,返回其在memory1中的下标,否则返回-1

int main(void)
{
	int i;
	int curmemory;		//调入内存中的页面个数
	int missNum;		//缺页次数
	float missRate;		//缺页率
	char c;				//得到用户的输入字符,来选择相应的置换算法

	Pro *page;			//作业页面集
	Pro *memory;		//内存页面集

	printf("输入系统分配给作业的主存中的页面数:");
	scanf("%d", &pageNum);
	printf("输入内存页面数:");
	scanf("%d", &memoryNum);

	page = (Pro*)malloc(sizeof(Pro)*pageNum);
	memory = (Pro*)malloc(sizeof(Pro)*memoryNum);

	for (i = 0; i opt)
								{
									opt = tem;
									curmemory = k;
								}
								break;
							}
							else tem++;
						}
						if (j == pageNum)
						{
							opt = tem;
							curmemory = k;
						}
					}

					missNum++;
					memory[curmemory].num = page[i].num;
					print(memory);
				}
			}//end for
			missRate = (float)missNum / pageNum;
				printf("缺页次数:%d   缺页率:  %f\n", missNum, missRate);

		}//end if

		if (c == 'l')			//LRU页面置换算法
		{
			missNum = 0;
			curmemory = 0;

			printf("LRU页面置换情况:   \n");
			for (i = 0; i memory[curmemory].time)
							curmemory = j;

					memory[curmemory].num = page[i].num;
					memory[curmemory].time = 0;
					print(memory);

				}
				else memory[rec].time = 0;

				for (int j = 0; j


三种页面置换算法的分析及C语言代码_第1张图片
三种页面置换算法的分析及C语言代码_第2张图片
三种页面置换算法的分析及C语言代码_第3张图片
三种页面置换算法的分析及C语言代码_第4张图片


你可能感兴趣的:(Operating,System)