操作系统-LRU页面置换算法模拟

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广东海洋大学学生实验报告书(学生用表)

实验名称 LRU页面之后算法模拟课程名称操作系统课程号

学院(系)专业班级

学生姓名学号实验地点实验日期

LRU页面置换算法模拟

一.实验目的

(1)掌握页式管理基本原理

(2)掌握LRU页面置换算法

二.实验内容

(1)按照最近最久未使用页面置换算法(LRU)设计页面置换模拟程序。

(2)对于给定的页面访问序列,输出其访问过程中的页面置换序列,并记录缺页次数。

70120304230321201701页面访

问序列

页面0 77722224440001111111页面10000000033333300000页面2111333222222222777缺页Y Y Y Y Y Y Y Y Y Y Y Y

置换7 1 2 3 0 4 0 3 2 (3)输出内容参考

三.相关数据结构

(1)页表结构数组

页号块号状态

(2)页面访问序列数组:保存进程执行过程中的页面访问序列。

(3)寄存器数组:每个物理块对应一个16bit的寄存器。

(4)物理块分配表(bool数组):标识每个物理块是否已经分配

四.实现流程

(1)主线程:实现页面访问过程中的物理块分配和页面置换(假设每间隔80ms访问一个页面)。

(2)寄存器周期性移位线程:周期性(每隔100ms)将所有寄存器右移一位。

(3)主线程参考流程图:

详细代码:

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class LRU {

int blockCount;

int seriaCount;

static int num=0;

int[] address;

int[] stack;

BufferedReader br;

public static void main(String[] args) {

int address[] = { 7, 0,1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};

LRU lru = new LRU();

lru.init();

lru.display();

}

public void init() {

try {

br = new BufferedReader(new InputStreamReader(System.in));

}catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

blockCount = 3;

stack = new int[blockCount];

System.out.println("请输入访问内存的块序列的个数为3:");

seriaCount = readInt();

System.out.println("读入的访问序列是:");

address = readIntArray();

}

public void display() {

boolean flag;

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

System.out.print("最近最久未使用页面置换算法(LRU)页面置换序列:");

for (int i = 0; i< address.length; i++) {

int j =0;

flag =false;

int t, temp =address[i];

while(stack[j] != address[i]) {

t= stack[j];

stack[j]= temp;

temp= t;

j++;

if(temp == 0 || j == stack.length)

break;

}

if (j< stack.length)

stack[j]= temp;

if (temp != 0&& j != stack.length)

flag= true;

try {

ng.Thread.sleep(500);

} catch(InterruptedException e) {

e.printStackTrace();

}

for (int m= 0; m < i - blockCount + 1; m++) System.out.print(" ");

for (int m =0; m < stack.length; m++)

System.out.print(stack[m]+ " ");

System.out.print(",");

if(flag){

num=num;

}

else{

num++;

}

}

System.out.println("");

System.out.println("总缺页数:"+num); }

public int readInt() {

try {

String s =br.readLine();

return Integer.parseInt(s);

} catch (Exception e) {

return 3;

}

}

public int[] readIntArray() {

try {

String s =br.readLine();

System.out.println(s);

String tmp[]= s.split(" ");

相关文档
最新文档