广东海洋大学学生实验报告书(学生用表)
实验名称LRI•页而之后算法模拟课程名称操作系统课程号_______________ 学院(系)_______________________ 专业__________________ 班级 ____________________ 学生姓名_______ 学号 _________ 实验地点_________________ 实验日期 ________________
LRU页面置换算法模拟
一.实验目的
(1)掌握页式管理基本原理
(2)掌握LRU页而宜换算法
二.实验内容
(1)按照最近最久未使用页而置换算法(LRU)设计页而置换模拟程序。
(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=O;
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 Iru = new LRU();
lru.init();
lru.display();
}
public void init() {
try{
br = new BufferedReader(new InputStreamReader(System.in));
Jcatch (Exception e) {
e.printStackTrace();
System.exit(O);
}
blockCount = 3;
stack = new int[blockCount];
System.out.printlnC*请输入访问内存的块序列的个数为3门;
seriaCount = readlnt();
System.out.println(H i^入的访问序列是门;
address = readlntArray();
}
public void display!) {
boolean flag;
System.out.println(" --------------------------------------- ");
System.out.printC1^近最久未使用页面置换算法(LRU)页面豊换序列:") for (int i = 0; i< address.length; i++) {
intj=O;
flag =false;
int t, temp =addre^s[i];
while(stack[j] != address(i)) {
t= stack[j];
stack[j]= temp;
temp= t;
j++;
if(temp == 0 11 j == stack.length)
break;
}
if (j< stack.length) stack[j]= temp;
if (temp != 0&& j != stack.length)
flag= true;
try{ ng.Thread.sleep(SOO);
} catch(lnterruptedException e) { e.printStackTrace();
}
for (int m= 0; m < i - blockcount +1; m++) System.out.print(H”);
for (int m =0; m < stack length; m++) System.out.print(stack[m]+ " System.out.print(,7,);
if(flag){
num=num;
}
else{
num++;
}
}
System.out.printlnC'11);
System.out.printlnC'总缺页数:M+num); }
public int readlnt() {
try{
String s =br.readLine(); return Integer.parselnt(s);
} catch (Exception e) { return 3;
}
}
public int[] readlntArray() {
try{
String s =br.readLine(); System.out.println(s); String tmp(J= s.split(" ”);
int valued =new in t[tmp length];
for (int i =0; i < value.length; i++)
value(i]= lnteger.parselnt(tmp[i]);
return value;
} catch (Exception e) {
System.out.println(e);
return null;
}
}
}
五.实现结论
通过这次的实验,我对LRU页而置换算法有了更深的了解,LRU置换算法是理想性的算法,因为使用LRU苣换算法要花费很大的系统开销,所以在实际系统中并不会直接采用LRU算法。
本次实验通过java程序对LRU页面苣换算法的模拟,并没有设苣自动执行的功能,而且内存的块序列也得手动进行输入,在程序的设汁上没有完全达到实验的要求,但基本实现了实验要求的全部功能。