操作系统-LRU页面置换算法模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(" ");