当前位置:文档之家› 操作系统 虚拟内存页面置换算法 java版

操作系统 虚拟内存页面置换算法 java版

操作系统 虚拟内存页面置换算法 java版
操作系统 虚拟内存页面置换算法 java版

实验五虚拟内存页面置换算法

1、实验目的

通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。

2、试验内容

问题描述:

设计程序模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,P n,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。

3、程序要求:

1)利用先进先出FIFO、最佳置换OPI和最近最久未使用LRU 三种页面置换算法模拟页面访问过程。

2)模拟三种算法的页面置换过程,给出每个页面访问时的内存分配情况。

3)输入:最小物理块数m,页面个数n,页面访问序列P1, … ,P n,算法选择1-FIFO,2-OPI,3-LRU。

4)输出:每种算法的缺页次数和缺页率。

4、需求分析

(1) 输入的形式和输入值的范围算法选择

物理块数

页面个数

页面访问序列P1, …,Pn

(2) 输出的形式

每种算法的缺页次数和缺页率(3)测试用例

引用率

70 77

01

7

1

2

2

1

03

2

3

04

2

4

3

230321

2

1

2017

7

1

01

页框(物理块)2 0 3

引用率

70 77

01

7

1

2

2

1

03

2

3

1

04

4

3

230321

1

3

2017

7

2

01

页框2

3

4

2

4

2

3

2

3

1

2

7

1

2

7

1

1

引用率

70 77

01

7

1

2

2

1

03

2

3

04

4

3

230321

1

3

2

2017

1

7

01

页框4

2

4

3

2

3

2

1

2

5、调试分析

通过二次编程,又一次加深了对先进先出(FIFO)页面置换算法,最佳(OPI)置换算法,最近最久未使用(LRU)置换算法的理解。同时,也掌握了一些使界面输出看起来更工整的办法。

还有,在平时做作业的时候,总是默认为物理块数是3,其实只是比较常用而已,并不是每次都是3.这个在编程中有体现,在今后做题中会更注意。

6、测试结果

(1)先进先出FIFO页面置换算法

输入

输出

(2)最佳页面OPI置换算法

输入

输出

(3)最近最久未使用LRU置换算法

输入

输出

7、附录(java)

package experiment;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.util.Scanner;

public class E_PageDisplace {

private static int MaxNumber = 100;

// 页面序列P1, … ,Pn,

private static int PageOrder[] = new int[MaxNumber];

// 模拟页面置换过程

private static int Simulate[][] = new int[MaxNumber][MaxNumber];

//

private static int PageCount[] = new int[MaxNumber];

// 页面数

private static int PageNum;

// 缺页数

private static int LackNum;

// 缺页率

private static double LackPageRate;

private static boolean found;

// 物理块数量

private static int BlockNum;

// NULL的int标记

private static int NULL=-1;

// for循环用到变量

private static int i;

private static int j;

private static int k;

// 算法选择

// 1-先进先出FIFO页面置换算法

// 2-最佳页面OPI置换算法

// 3-最近最久未使用LRU置换算法

private static int option = 0;

private static Scanner stdin;

public static void main(String[] args) throws FileNotFoundException { // 输入数据

input();

// 算法选择

//算法选择\n FIFO: 输入'1'\n OPI: 输入'2'\n LRU: 输入'3'\n exit: 输入'4'\n";\

switch(option){

case 1:

System.out.println("先进先出FIFO页面置换算法:");

FIFO();

output();

break;

case 2:

System.out.println("最佳页面OPI置换算法:");

OPI();

output();

break;

case 3:

System.out.println("最近最久未使用LRU置换算法:");

LRU();

output();

break;

default:

System.out.println("你的输入有问题请重新输入!");

break;

}

}

// 输入数据

public static void input() throws FileNotFoundException {

BufferedInputStream in = new BufferedInputStream(new FileInputStream( "./file/05"));

System.setIn(in);

stdin = new Scanner(System.in);

// 算法选择

// 1-先进先出FIFO页面置换算法

// 2-最佳页面OPI置换算法

// 3-最近最久未使用LRU置换算法

option = stdin.nextInt();

// 物理块数

BlockNum = stdin.nextInt();

// 页面个数

PageNum = stdin.nextInt();

// 页面访问序列P1, … ,Pn

for (i = 0; i < PageNum; i++) {

PageOrder[i] = stdin.nextInt();

}

}

//???????????????/

public static void original(){

for(i=0;i

for(j=0;j

Simulate[i][j]=NULL;

}

}

LackNum=1;

}

//先进先出:最早出现的置换算法,总是淘汰最先进入内存的页面。

public static void FIFO(){

original();

Simulate[0][0]=PageOrder[0];

int temp=0,flag=0;

for(i=1;i

{

//判断该页面是否存在内存中

for(j=0;j

{

if(PageOrder[i]==Simulate[flag][j])

break;

}

if(j==BlockNum)

{//该页面不在内存中

for(k=0;k

{//模拟置换过程

if(Simulate[flag][k]==NULL)

break;

else

Simulate[i][k]=Simulate[flag][k];

}

//淘汰最先进入内存的页面

temp++;

temp=temp%BlockNum;

Simulate[i][temp]=PageOrder[i];

LackNum++;

flag=i;

}//该页面在内存中

else

continue;

}

}

//最佳置换:选择的被淘汰的页面都是以后永不使用或者在最长(未来)时间内不被访问的页面。

public static void OPI(){

original();

Simulate[0][0]=PageOrder[0];

int temp,flag=0;//flag表示上一个模拟内存的下标

for(i=1;i

{

//判断该页面是否存在内存中

for(j=0;j

{

if(PageOrder[i]==Simulate[flag][j])

break;

}

//j!=BlockNum表示该页面已经在内存中

if(j!=BlockNum)

continue;

//模拟置换过程

for(k=0;k

{

if(Simulate[flag][k]==NULL)

break;

else

Simulate[i][k]=Simulate[flag][k];

}

//内存中页面进行选择

//两种情况:内存已满和内存未满

for(j=0;j

{

if(Simulate[i][j]==NULL)

{

Simulate[i][j]=PageOrder[i];

LackNum++;

flag=i;

break;

}

}

if(j!=BlockNum)//内存未满

continue;

//内存已满

temp=0;//temp表示要置换的页面内存下标

for(j=0;j

{//选取要置换的页面内存下标

for(k=i+1;k

{//最长时间内不被访问的页面

if(Simulate[i][j]==PageOrder[k])

{

PageCount[j]=k;

break;

}

}

if(k==PageNum)//之后没有进行对该页面的访问

PageCount[j]=PageNum;

if(PageCount[temp]

{

temp=j;

}

}

Simulate[i][temp]=PageOrder[i];

LackNum++;

flag=i;

}

}

//最近最久未使用:LRU算法选择最近最久未使用的页面予以淘汰。public static void LRU(){

original();

Simulate[0][0]=PageOrder[0];

int temp,flag=0;//flag表示上一个模拟内存的下标

PageCount[0]=0;//最近的页面下标

for(i=1;i

{

//判断该页面是否存在内存中

for(j=0;j

{

if(PageOrder[i]==Simulate[flag][j])

{

PageCount[j]=i;

break;

}

}

//j!=BlockNum表示该页面已经在内存中

if(j!=BlockNum)

continue;

//模拟置换过程

for(k=0;k

{

if(Simulate[flag][k]==NULL)

break;

else

Simulate[i][k]=Simulate[flag][k];

}

//内存中页面进行选择

//两种情况:内存已满和内存未满

for(j=0;j

{

if(Simulate[i][j]==NULL)

{//内存未满

Simulate[i][j]=PageOrder[i];

PageCount[j]=i;

LackNum++;

flag=i;

break;

}

}

if(j!=BlockNum)

continue;

//内存已满

temp=0;//temp表示要置换的页面内存下标

for(j=0;j

{//最近最久时间内不被访问的页面

if(PageCount[temp]>PageCount[j])

temp=j;

}

Simulate[i][temp]=PageOrder[i];

PageCount[temp]=i;

LackNum++;

flag=i;

}

}

//模拟三种算法的页面置换过程,

//给出每个页面访问时的内存分配情况

//每种算法的缺页次数和缺页率。

public static void output(){

LackPageRate=(double)LackNum/PageNum;

for(i=0;i

System.out.print("----");

System.out.println("");

for(i=0;i

System.out.print(PageOrder[i]+" ");

System.out.println("");

for(i=0;i

System.out.print("----");

System.out.println("");

for(j=0;j

{

//for(i=0;i

//cout<

for(i=0;i

if(Simulate[i][j]==NULL)

System.out.print(' '+" ");

else

System.out.print(Simulate[i][j]+" ");

}

System.out.println("");

}

//cout<

System.out.println("缺页次数:"+LackNum+"\n"+"缺页率:"+LackPageRate*100+"%\n");

}

}

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

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

5、根据方案使算法得以模拟实现。 6、锻炼知识的运用能力和实践能力。 三、设计要求 1、编写算法,实现页面置换算法FIFO、LRU; 2、针对内存地址引用串,运行页面置换算法进行页面置换; 3、算法所需的各种参数由输入产生(手工输入或者随机数产生); 4、输出内存驻留的页面集合,页错误次数以及页错误率; 四.相关知识: 1.虚拟存储器的引入: 局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:时间局限性和空间局限性。 2.虚拟存储器的定义: 虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。 3.虚拟存储器的实现方式: 分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。

请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。 4.页面分配: 平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。 按比例分配算法,根据进程的大小按比例分配物理块。 考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份额后,分配给各进程。 5.页面置换算法: 常用的页面置换算法有OPT、FIFO、LRU、Clock、LFU、PBA等。 五、设计说明 1、采用数组页面的页号 2、FIFO算法,选择在内存中驻留时间最久的页 面予以淘汰; 分配n个物理块给进程,运行时先把前n个不同页面一起装入内存,然后再从后面逐一比较,输出页面及页错误数和页错误率。3、LRU算法,根据页面调入内存后的使用情况 进行决策; 同样分配n个物理块给进程,前n个不同页面一起装入内存,后面步骤与前一算法类似。 选择置换算法,先输入所有页面号,为系统分

最佳置换算法

/*-------------最佳置换算法(OPtimal Replacement Algorithm,ORA)-------------*/ /*算法描述:所选择的淘汰页,是以后永不使用,或最长时间内不使用的页面*/ /*---------------------------------writen by Xu Zhuozhuo-----------------------------------*/ C++代码示例: #include #define MaxSize 20 #define Num_Block 3 using namespace std; int max(int a,int b,int c) //返回三者的最大值 { if(a>num_ref; //输入引用字符串的数目 }while(num_ref>MaxSize); cout <<"Please input the queue of reference chars:" <>ref_arr[i]; for(int j=0;j

页面置换算法实验报告

一、实验目的 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 二、实验内容 基于一个虚拟存储区和内存工作区,设计下述算法并计算访问命中率。 1、最佳淘汰算法(OPT) 2、先进先出的算法(FIFO) 3、最近最久未使用算法(LRU) 4、简单时钟(钟表)算法(CLOCK) 命中率=1-页面失效次数/页地址流(序列)长度 三、实验原理 UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。 当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向CPU发出缺中断),由系统将其所需页面调入内存。这种页面调入方式叫请求调页。为实现请求调页,核心配置了四种数据结构:页表、页帧(框)号、访问位、修改位、有效位、保护位等。 当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。 四、算法描述 本实验的程序设计基本上按照实验内容进行。即使用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。 (1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的 B:25%的指令是均匀分布在前地址部分 C:25%的指令是均匀分布在后地址部分 具体的实施方法是: A:在[0,319]的指令地址之间随机选取一起点m B:顺序执行一条指令,即执行地址为m+1的指令 C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’ D:顺序执行一条指令,其地址为m’+1

(流程图)页面置换算法课程设计

操作系统课程设计报告题目:页面置换算法模拟程序 学院名称: 专业班级: 学生姓名: 指导教师: 成绩:

目录 一、设计目的 (3) 二、设计题目 (3) 2.1设计内容 (3) 2.2设计要求 (3) 三、设计过程 (4) 3.1 FIFO(先进先出) (4) 3.2 LRU(最近最久未使用) (5) 3.3 OPT(最佳置换算法) (6) 3.4 随机数发生器 (7) 四、完整代码 (7) 五、运行结果演示 (13) 六、设计心得 (16) 七、参考文献 (16)

操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。 本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。 熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。 二、设计题目:页面置换算法模拟程序 2.1设计内容 编制页面置换算法的模拟程序。 2.2设计要求 1).用随机数方法产生页面走向,页面走向长度为L(15<=L<=20),L由控制台输入。 2).根据页面走向,分别采用Optinal、FIFO、LRU算法进行页面置换,统计缺页率。 3).假定可用内存块为m(3<=m<=5),m由控制台输入,初始时,作业页面都不在内存。 4).要求写出一份详细的设计报告。课程设计报告内容包括:设计目的、设计内容、设计原理、算法实现、流程图、源程序、运行示例及结果分析、心得体会、参考资料等。

页面置换算法代码实现(完整版)

实验原理: 在内存运行过程中,若其所要访问的页面不在内存而需要把他们调入内存,但内存已经没有空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。但应将那个页面调出,需根据一定的算法来确定。通常,把选择换出页面的算法成为页面置换算法。置换算法的好坏,将直接影响到系统的性能。 一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面置换出,或者把那些在较长时间内不会在访问的页面调出。目前存在着许多种置换算法(如FIFO,OPT,LRU),他们都试图更接近理论上的目标。 实验目的: 1.熟悉FIFO,OPT和LRU算法 2.比较三种算法的性能优劣 实验内容: 写出FIFO,OPT和LRU算法的程序代码,并比较它们的算法性能。 实验步骤: 代码如下: #include #define M 4 //物理页数 #define N 20 //需要调入的页数 typedef struct page { int num; int time; }Page; //物理页项,包括调入的页号和时间 Page mm[M]; //4个物理页

int queue1[20],queue2[20],queue3[20]; //记录置换的页int K=0,S=0,T=0; //置换页数组的标识 int pos=0;//记录存在最长时间项 //初始化内存页表项及存储内存情况的空间 void INIT(){ int i; for(i=0;i max){ max=mm[i].time ; pos=i; } } return pos; } //检查最长时间不使用页面 int longesttime(int fold)

《操作系统》实验五页面置换算法模拟

实验五. 请求页式存储管理的模拟 [实验内容]: 熟悉虚拟存储管理的各种页面置换算法,并编写模拟程序实现请求页式存储管理的页面置换算法----最近最久未使用算法(LRU),要求在每次产生置换时显示页面分配状态和缺页率。 [实验要求]: 1、运行给出的实验程序,查看执行情况,进而分析算法的执行过程,在理解FIFO页面置换算法和最近最久未使 用算法(LRU)置换算法后,给出最佳置换算法的模拟程序实现,并集成到参考程序中。 2、执行2个页面置换模拟程序,分析缺页率的情况。最好页框数和访问序列长度可调节,在使用同一组访问序 列数据的情况下,改变页框数并执行2个页面置换模拟程序,查看缺页率的变化。 3、在每次产生置换时要求显示分配状态和缺页率。程序的地址访问序列通过随机数产生,要求具有足够的长度。 最好页框数和访问序列长度可调节。 实验的执行结果如下图所示(左下图为FIFO执行结果,右下图为LRU执行结果):

程序源代码: #include #include "windows.h" #include #include #include #include #include #include void initialize(); //初始化相关数据结构 void createps(); //随机生成访问序列 void displayinfo(); //显示当前状态及缺页情况 void fifo(); //先进先出算法 int findpage(); //查找页面是否在内存 void lru(); //最近最久未使用算法 int invalidcount = 0; // 缺页次数 int vpoint; //页面访问指针 int pageframe[10]; // 分配的页框 int pagehistory[10]; //记录页框中数据的访问历史 int rpoint; //页面替换指针 int inpflag; //缺页标志,0为不缺页,1为缺页 struct PageInfo //页面信息结构 { int serial[100]; // 模拟的最大访问页面数,实际控制在20以上 int flag; // 标志位,0表示无页面访问数据 int diseffect; // 缺页次数 int total_pf; // 分配的页框数 int total_pn; // 访问页面序列长度 } pf_info; //////////////////////////////////////////////////////////////////////// //初始化相关数据结构 void initialize() { int i,pf; inpflag=0; //缺页标志,0为不缺页,1为缺页 pf_info.diseffect =0; // 缺页次数 pf_info.flag =0; // 标志位,0表示无页面访问数据 printf("\n请输入要分配的页框数:"); // 自定义分配的页框数 scanf("%d",&pf); pf_info.total_pf =pf; for(i=0;i<100;i++) // 清空页面序列 { pf_info.serial[i]=-1; }

操作系统实验4(虚拟内存页面置换算法)

操作系统实验报告四 【实验题目】 虚拟内存页面置换算法 【实验目的】 通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。 【实验内容】 问题描述: 设计程序模拟先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, …,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。 程序要求如下: 1)利用先进先出FIFO,最佳置换OPI和最近最久未使用LRU三种页面置换算法模拟页面访问过程。 2)模拟三种算法的页面置换过程,给出每个页面访问时的内存分配情况。 3)输入:最小物理块数m,页面个数n,页面访问序列P1, … ,Pn,算法选择1-FIFO,2-OPI,3-LRU。 4)输出:每种算法的缺页次数和缺页率。 【实验要求】 1) 上机前认真复习页面置换算法,熟悉FIFO,OPI,LRU三种页面分配和置换算法的过程; 2) 上机时独立编程、调试程序; 3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。 【源代码】 //--------------- YeMianZhiHuan.cpp ----------------- #include "iostream.h" const int DataMax=100; const int BlockNum = 10; int DataShow[BlockNum][DataMax]; // 用于存储要显示的数组 bool DataShowEnable[BlockNum][DataMax]; // 用于存储数组中的数据是否需要显示

页面置换算法作业

页面置换算法的演示 一.实验要求: 设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率: 要求设计主界面以灵活选择某算法,且以下算法都要实现 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再 被访问的页面换出。 2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留 时间最久的页面予以淘汰。 3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。 4) 最不经常使用算法(LFU) 二.实验目的: 1、用C语言编写OPT、FIFO、LRU,LFU四种置换算法。 2、熟悉内存分页管理策略。 3、了解页面置换的算法。 4、掌握一般常用的调度算法。 5、根据方案使算法得以模拟实现。 6、锻炼知识的运用能力和实践能力。 三.相关知识: 1.虚拟存储器的引入: 局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:时间局限性和空间局限性。 2.虚拟存储器的定义: 虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。 3.虚拟存储器的实现方式: 分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。 请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。 4.页面分配: 平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。 按比例分配算法,根据进程的大小按比例分配物理块。 考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份额后,分配给各进程。 5.页面置换算法: 常用的页面置换算法有OPT、FIFO、LRU、Clock、LFU、PBA等。

操作系统常用页面置换算法课程设计

摘要 在linux中,为了提高内存利用率,提供了内外存进程对换机制,内存空间的分配和回收均以页为单位进行,一个进程只需要将其一部分调入内存便可运行;当操作系统发生缺页中断时,必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。因而引入一种用来选择淘汰哪一页的算法——页面置换算法。页面置换算法是操作系统中虚拟存储管理的一个重要部分。页面置换算法在具有层次结构存储器的计算机中,为用户提供一个比主存储器容量大得多的可随机访问的地。常见的页面置换算法有先来先服务算法(FIFO),最近最久未使用算法(LRU)和最佳适应算法(OPT)。 关键字:操作系统;FIFO;LRU;OPT;Linux

目录 1 绪论?1 1.1设计任务 (1) 1.2设计思想?1 1.3设计特点?1 1.4基础知识 (2) 1.4.1 先进先出置换算法(FIFO)?2 1.4.2最近最久未使用算法(LRU) (3) 1.4.3最佳置换算法(OPT) (3) 2 各模块伪代码算法?4 2.1伪代码概念?4 2.2伪代码算法 (4) 2.2.1主函数伪代码算法.............................................. 错误!未定义书签。 2.2.2延迟时间函数伪代码算法?6 2.2.3 FIFO算法的伪代码?7 2.2.4LRU算法的伪代码 (7) 10 2.2.5 OPT算法的伪代码? 3 函数调用关系图................................................................................................... 12 3.1函数声明?12 3.1.1主要算法函数...................................................... 错误!未定义书签。

请求页式存储管理中常用页面置换算法模拟

信息工程学院实验报告 课程名称:操作系统Array实验项目名称:请求页式存储管理中常用页面置换算法模拟实验时间: 班级姓名:学号: 一、实验目的: 1.了解内存分页管理策略 2.掌握调页策略 3.掌握一般常用的调度算法 4.学会各种存储分配算法的实现方法。 5.了解页面大小和内存实际容量对命中率的影响。 二、实验环境: PC机、windows2000 操作系统、VC++6.0 三、实验要求: 本实验要求4学时完成。 1.采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的优劣,同时也考虑页面大 小及内存实际容量对命中率的影响; 2.实现OPT 算法 (最优置换算法)、LRU 算法 (Least Recently)、 FIFO 算法 (First IN First Out)的模拟; 3.会使用某种编程语言。 实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告,按时上交。 四、实验内容和步骤: 1.编写程序,实现请求页式存储管理中常用页面置换算法LRU算法的模拟。要求屏幕显示LRU算法 的性能分析表、缺页中断次数以及缺页率。 2.在上机环境中输入程序,调试,编译。 3.设计输入数据,写出程序的执行结果。 4.根据具体实验要求,填写好实验报告。 五、实验结果及分析: 实验结果截图如下:

利用一个特殊的栈来保存当前使用的各个页面的页面号。当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,栈底是最近最久未被使用的页面号。当访问第5个数据“5”时发生了缺页,此时1是最近最久未被访问的页,应将它置换出去。同理可得,调入队列为:1 2 3 4 5 6 7 1 3 2 0 5,缺页次数为12次,缺页率为80%。 六、实验心得: 本次实验实现了对请求页式存储管理中常用页面置换算法LRU算法的模拟。通过实验,我对内存分页管理策略有了更多的了解。 最近最久未使用(LRU)置换算法的替换规则:是根据页面调入内存后的使用情况来进行决策的。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。 最佳置换算法的替换规则:其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。 先进先出(FIFO)页面置换算法的替换规则:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。 三种替换算法的命中率由高到底排列OPT>LRU>FIFO。 本次的程序是在网上查找的相关代码然后自己进行修改,先自己仔细地研读了这段代码,在这过程中我对C++代码编写有了更深的了解。总之,本次实验使我明白要学会把课堂上的理论应用到实际操作中。我需要在今后熟练掌握课堂上的理论基础,只有坚实的基础,才能在实际操作中更得心应手。 附录: #include "iostream.h" #include const int DataMax=100; const int BlockNum = 10;

(完整版)页面置换算法C语言

页面置换算法的演示 一.题目要求: 设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率: 要求设计主界面以灵活选择某算法,且以下算法都要实现 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再 被访问的页面换出。 2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留 时间最久的页面予以淘汰。 3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。 4) 最不经常使用算法(LFU) 二.实验目的: 1、用C语言编写OPT、FIFO、LRU,LFU四种置换算法。 2、熟悉内存分页管理策略。 3、了解页面置换的算法。 4、掌握一般常用的调度算法。 5、根据方案使算法得以模拟实现。 6、锻炼知识的运用能力和实践能力。 三.相关知识: 1.虚拟存储器的引入: 局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:时间局限性和空间局限性。 2.虚拟存储器的定义: 虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。 3.虚拟存储器的实现方式: 分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。 请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。 4.页面分配: 平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。 按比例分配算法,根据进程的大小按比例分配物理块。

考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份额后,分配给各进程。 5.页面置换算法: 常用的页面置换算法有OPT、FIFO、LRU、Clock、LFU、PBA等。 四.设计思想: 选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换:OPT基本思想: 是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组next[mSIZE]记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。 【特别声明】 若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。 FIFO基本思想: 是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。 LRU基本思想: 是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组flag[10]标记页面的访问时间。每当使用页面时,刷新访问时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。 五.流程图: 如下页所示

操作系统实验三(页面置换算法)实验报告剖析

实验三实验报告 实验源码: #include "stdio.h" #include #include #define DataMax 100 // 常量DataMax #define BlockNum 10 // 常量BlockNum int DataShow[BlockNum][DataMax]; // 用于存储要显示的数组 bool DataShowEnable[BlockNum][DataMax]; // 用于存储数组中的数据是否需要显示int Data[DataMax]; // 保存数据 int Block[BlockNum]; // 物理块 int count[BlockNum]; // 计数器 int N; // 页面个数 int M; // 最小物理块数 int ChangeTimes; // 缺页次数 void DataInput(); // 输入数据的函数 void DataOutput(); // 输出数据的函数 void FIFO(); // FIFO 函数 void Optimal(); // Optimal函数 void LRU(); // LRU函数 int main(int argc, char* argv[]) { DataInput(); int menu; while(true) { printf("\n* 菜单选择*\n"); printf("*******************************************************\n"); printf("* 1-Optimal *\n"); printf("* 2-FIFO *\n"); printf("* 3-LRU *\n"); printf("* 4-返回上一级*\n"); printf("* 0-EXIT *\n"); printf("*******************************************************\n"); scanf("%d",&menu);

页面置换算法实验报告

页面置换算法实验报告

一、实验目的: 设计和实现最佳置换算法、随机置换算法、先进先出置换算法、最近最久未使用置换算法、简单Clock置换算法及改进型Clock置换算法;通过支持页面访问序列随机发生实现有关算法的测试及性能比较。 二、实验内容: ●虚拟内存页面总数为N,页号从0到N-1 ●物理内存由M个物理块组成 ●页面访问序列串是一个整数序列,整数的取值范围为0到N - 1。页面访问序 列串中的每个元素p表示对页面p的一次访问 ●页表用整数数组或结构数组来表示 ?符合局部访问特性的随机生成算法 1.确定虚拟内存的尺寸N,工作集的起始位置p,工作集中包含的页 数e,工作集移动率m(每处理m个页面访问则将起始位置p +1), 以及一个范围在0和1之间的值t; 2.生成m个取值范围在p和p + e间的随机数,并记录到页面访问序 列串中; 3.生成一个随机数r,0 ≤r ≤1; 4.如果r < t,则为p生成一个新值,否则p = (p + 1) mod N; 5.如果想继续加大页面访问序列串的长度,请返回第2步,否则结束。 三、实验环境: 操作系统:Windows 7 软件:VC++6.0 四、实验设计: 本实验包含六种算法,基本内容相差不太,在实现方面并没有用统一的数据结构实现,而是根据不同算法的特点用不同的数据结构来实现: 1、最佳置换和随机置换所需操作不多,用整数数组模拟内存实现; 2、先进先出置换和最近最久未使用置换具有队列的特性,故用队列模拟内 存来实现; 3、CLOCK置换和改进的CLOCK置换具有循环队列的特性,故用循环队 列模拟内存实现; 4、所有算法都是采用整数数组来模拟页面访问序列。

操作系统第5章作业答案

赵盈盈 93 第五章作业 1. 存储管理的功能及目的是什么 答:存储管理功能: 内存分配与管理。(1)记住每个存储区域的状态。(2)实施分配。分配方式有两种:静态 分配与动态分配(3)回收。 内存共享。共享的信息包括:代码共享(纯代码),数据共享 存储保护。存储保护内容有:保护系统程序区不受用户有意无意的侵犯;不允许用户程序写不属于自己地址空间的数据。(1)以防止地址越界;(2)以防止操作越权“扩充”内存容量。具体实现是在硬件支持下,软件硬件相互协作,将内存与外存结合起来统一使用。 地址映射。也称作重定位。将逻辑地址转换成物理地址。有两种方法:静态地址映射,动态地址映射。 存储管理目的: 充分利用内存,为多道程序并发执行提供存储基础; 尽可能方便用户使用; 解决程序空间比实际内存空间大的问题; 程序在执行时可以动态伸缩; 内存存取速度快; 存储保护与安全; 共享与通信; 了解有关资源的使用状况; 实现的性能和代价; 2. 什么是逻辑地址什么是物理地址为什么要进行二者的转换工作 答:逻辑地址:就是cpu逻辑段管理内存而形成的地址。 物理地址:就是程序或数据在内存中的实际地址,即内存单元的地址,也就是被装入内存的内存地址寄存器的地址。 转换原因:当程序装入内存时,操作系统要为之分配一个合适的内存空间,由于程序逻辑地址

与所分配到的内存物理地址编号不一致,而cpu 执行指令时是按物理地址进行的,所以要进行地址转换。 3. 什么是动态地址重定位试用图画出动态地址重定位的过程。 答: 动态地址重定位就是指动态地址映射。是地址映射的一种方式。它是在程序执行过程中要访 问数据时在进行地址映射,即逐条指令执行时完成地址映射。 4. 在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理 答:有四种:上邻,下邻,上下相邻,上下不相邻。 (1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。 (2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。 (3)回收分区的上、下邻分区都是空闲的,需要将三个空闲区合并成一个更大的空闲区,然后修改空闲区表、 (4)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。 5. 如图1所示,主存中有两个空白区。现有这样一个作业序列: 作业1 要求 50KB ; 有效地址 内存空间

操作系统页面置换算法代码

通达学院 课程设计I报告 (2018/2019学年第2学期) 题目:页面置换算法 专业计算机科学与技术 学生姓名 班级学号 指导教师 指导单位计算机学院 日期2019.5.13-5.23

指导教师成绩评定表

页面置换算法 一、课题内容和要求 通过实现页面置换的四种算法,理解虚拟存储器的概念、实现方法,页面分配的总体原则、进程运行时系统是怎样选择换出页面的,并分析四种不同的算法各自的优缺点是哪些。 以下算法都要实现: 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。 2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。 3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。 4) 最不经常使用算法(LFU) 设计要求: 1、编写算法,实现页面置换算法; 2、针对内存地址引用串,运行页面置换算法进行页面置换; 3、算法所需的各种参数由输入产生(手工输入或者随机数产生); 4、输出内存驻留的页面集合,缺页次数以及缺页率; 二、需求分析 通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法及最不经常使用算法LFU的实现方法。 通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储! (1) 输入的形式页面序列 物理块数、页面数、页面序列 (2) 输出的形式

驻留页面集合、缺页数、缺页率 注:如果命中用 * 表示,为空用 -1 表示 (3)程序所能达到的功能 模拟先进先出FIFO、最佳置换OPI、最近最久未使用LRU页面置换算法和最不经常使用算法LFU的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, …,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 三、概要设计 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 int mSIZE; /*物理块数*/ int pSIZE; /*页面号引用串个数*/ static int memery[10]={0}; /*物理块中的页号*/ static int page[100]={0}; /*页面号引用串*/ static int temp[100][10]={0}; /*辅助数组*/ /*置换算法函数*/ void FIFO(); void LRU(); void OPT(); void LFU(); /*输出格式控制函数*/ void print(unsigned int t); 流程图如下:

页面置换算法实验(内含完整代码)

实验二存储管理 一、实验目的 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 二、实验内容 基于一个虚拟存储区和内存工作区,设计下述算法并计算访问命中率。 1、最佳淘汰算法(OPT) 2、先进先出的算法(FIFO) 3、最近最久未使用算法(LRU) 4、简单时钟(钟表)算法(CLOCK) 命中率=1-页面失效次数/页地址流(序列)长度 三、实验原理简述 UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。 当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向CPU发出缺中断),由系统将其所需页面调入内存。这种页面调入方式叫请求调页。为实现请求调页,核心配置了四种数据结构:页表、页帧(框)号、访问位、修改位、有效位、保护位等。 当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。 四、算法描述 本实验的程序设计基本上按照实验内容进行。即使用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。 (1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的 B:25%的指令是均匀分布在前地址部分 C:25%的指令是均匀分布在后地址部分 具体的实施方法是: A:在[0,319]的指令地址之间随机选取一起点m B:顺序执行一条指令,即执行地址为m+1的指令

操作系统页面置换算法

操作系统 课程设计报告 院(系):信息与数学学院 专业:信息与计算科学 姓名:张三 班级:_信计11402 学号: 12 29 14 题目:页面置换算法 指导教师:孙庆生 2017年5月27日

一、课程设计目的 《Linux操作系统课程设计》是在学完《操作系统》课程之后的实践教学环节,是复习和检验所学课程的重要手段。通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。 二、课程设计的任务和要求 由于具体的操作系统相当复杂,不可能对所有管理系统进行详细地分析。因此,选择了操作系统中最重要的管理之一存储器管理,作为本设计的任务。页面置换算法是虚拟存储管理实现的关键,要求在充分理解内存页面调度机制的基础上,模拟实现OPT、FIFO、LRU几种经典页面置换算法,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。 具体任务如下: 1) 分析设计内容,给出解决方案 ①要说明设计实现的原理; ②采用的数据结构:定义为进程分配的物理块;定义进程运行所需访问的页面号;定义页的结构; 2)模拟三种页面置换算法; 3)比较各种算法的优劣。 4)对程序的每一部分要有详细的设计分析说明。 5)源代码格式要规范。 6)设计合适的测试用例,对得到的运行结果要有分析。 任务要求: Linux平台下实现(Windows+ VMware+ Ubuntu) 三、课程的详细设计 1)系统设计 在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪?个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法。?一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再

最佳页面置换算法

最佳页面置换算法(Optimal)(非常专业) 评价一个算法的优劣,可通过在一个特定的存储访问序列(页面走向)上运行它,并计算缺页数量来实现。1 先入先出法(FIFO) 最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。 这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。 FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使 缺页中断率增加了。当然,导致这种异常现象的页面走向实际上是很少见的。 现在来看下4块的情况: 0 1 2 3 2 1 3 2 5 2 3 6 2 1 4 2 【解答】 刚开始内存并没有这个作业,所以发生缺页中断一次。作业的0号页进入内存。(1次缺页中断) 而页1又不在内存,又发生缺页中断一次。作业页1进入内存。(2次缺页中断) 页2不在内存,发生缺页中断。页2进入内存。 (3次缺页中断) 页3不在内存,发生缺页中断。页3进入内存。 (4次缺页中断) 接下来调入页2,页1,页3,页2。由于都在内存中,并不发生缺页中断。 页5不在内存,发生缺页中断。页5进入内存,页5置换页0。 (5次缺页中断) 接下来调入页2,页3。由于都在内存中,并不发生缺页中断。 页6不在内存,发生缺页中断。页6进入内存。页6置换页1。 (6次缺页中断) 页2在内存,不发生缺页中断。 页1不在内存(在发生第6次缺页中断时被置换了),发生缺页中断。 页1进入内存,页2被置换。 (7次缺页中断) 页4置换页3,页4进入内存。 (8次缺页中断) 现在调入页2,但页2在发生第7次缺页中断时被置换掉了。 现在页2进入内存,其置换页5。(因为这个时候是页5最先进入内存。)(9次缺页中断) 2 最优置换算法(OPT) 最优置换(Optimal Replacement)是在理论上提出的一种算法。其实质是:当调入新的一页而必须预先置换某个老页时,所选择的老页应是将来不再被使用,或者是在最远的将来才被访问。采用这种页面置换算法,保证有最少的缺页率。但是最优页面置换算法的实现是困难的,因为它需要人们预先就知道一个进程整个运行过程中页面走向的全部情况。不过,这个算法可用来衡量(如通过模拟实

相关主题
文本预览
相关文档 最新文档