页面置换算法的Java实现

你的算法或许比我更好



不说废话,直接放GuyHub链接:PageReplacement

FIFO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package cn.yodes.OS.Algorithm;
public class FIFO {

public void start(int []page , int []block){
int index_old = 0 , pre = 0 , current = 0;
boolean flag = false;

for(int i = 0; i < block.length; i++){
block[i] = -1;
}
for(int i = 0; i < page.length; i++){
flag = false;
for(int j : block){
if(page[i] == j){
flag = true;
break;
}
}
if(!flag){
if(pre < block.length){
current = pre++;
}else{
current = index_old++ % block.length;
}
block[current] = page[i];
}
for(int k : block){
System.out.print(k + "\t");
}
System.out.println();
}
}

public static void main(String[] args) {
FIFO test = new FIFO();
int sum_page = 20;
int []page = new int[sum_page];

int sum_block = 5;
int[] block = new int[sum_block];
for(int i = 0; i < page.length; i++){
page[i] = (int) (Math.random()*10);
System.out.print(page[i] + " ");
}
System.out.println();
// test.addEle(page, block);
test.start(page, block);
}
}

LRU

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package cn.yodes.OS.Algorithm;
public class LRU {

public void start(int[] page , int[] block){
int[] temp = new int[block.length];
int current = 0;
boolean flag = false;
for(int i = 0; i < temp.length; i++){
temp[i] = i;
block[i] = -1;
}

for(int i = 0; i < page.length; i++){
flag = false;
for(int j = 0; j < block.length; j++){
if(page[i] == block[j]){ flag = true; current = j; break;}
}

if(!flag){
for(int j = 0; j < temp.length; j++){
if( temp[j] == 0 ) { current = j; break;}
}
block[current] = page[i];

for(int j = 0; j < temp.length; j++){
if(temp[j] > temp[current]) { temp[j] = (temp[j] - 1) % 4;}
}
temp[current] = temp.length - 1;
}
for(int k : block)
System.out.print(k + "\t");
System.out.println();
}
}

public static void main(String[] args) {
LRU test = new LRU();
int sum_page = 20;
int []page = new int[sum_page];

int sum_block = 5;
int[] block = new int[sum_block];
for(int i = 0; i < page.length; i++){
page[i] = (int) (Math.random()*10);
System.out.print(page[i] + " ");
}
System.out.println();

test.start(page, block);
}
}

Optimal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cn.yodes.OS.Algorithm;

public class Optimal {

public void start(int[] page , int[] block){
int[] temp = new int[block.length];
int current = 0;
boolean flag = false;
for(int i = 0; i < block.length; i++){
block[i] = -1;
}
for(int i = 0; i < page.length; i++){
flag = false;
for(int j : block){
if(j == page[i]) { flag = true; }
}
if(!flag){
if(current < block.length){
block[current++] = page[i];
}else{
temp = new int[block.length];
for(int k = 0; k < temp.length; k++)
for(int j = i; j < page.length ; j++)
if(page[j] != block[k]) {
temp[k]++;
} else{
break;
}
current = getIndexOfMaxVal(temp);
// System.out.print("m:");
// for(int m : temp){
// System.out.print(m + "\t");
// }
block[current] = page[i];
}
}
// for(int l : block){
// System.out.print(l + "\t");
// }
System.out.println();
}
}

public int getIndexOfMaxVal(int[] data){
int maxVal = data[0];
int maxInd = 0;
for(int i = 1; i < data.length; i++){
if(data[i] > maxVal){
maxVal = data[i];
maxInd = i;
}
}
// System.out.println("maxInd=" + maxInd);
return maxInd;
}
public static void main(String[] args) {
Optimal Test = new Optimal();
int sum_page = 20;
int []page = new int[sum_page];

int sum_block = 5;
int[] block = new int[sum_block];
for(int i = 0; i < page.length; i++){
page[i] = (int) (Math.random()*10);
System.out.print(page[i] + " ");
}
System.out.println();
Test.start(page, block);
}
}

原理来源:http://c.biancheng.net/cpp/html/2614.html

Yodes Yang wechat
扫描二维码与我联系

------ 本文结束 ------
  • 本文作者: Yodes Yang
  • 文章标题: 页面置换算法的Java实现
  • 发布时间: 2017年3月11日 - 12时03分
  • 本文链接: http://blog.yodes.cn/post/6596.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!
扫二维码
扫一扫,用手机访问本站

扫一扫,用手机访问本站