(分页模拟)简单模拟操作系统分页管理
2023-12-13 06:45:59
简单模拟一下内存分页,分配和回收。这里我就用最最最简化的方式没有技术含量。
每个进程维护一张页表,然后操作系统用位示图模拟内存分配情况(0: 未分配,1已经分配)
import java.util.*;
public class Main {
public static int PAGE_COUNT = 1024;
public static int reminder;//空闲
public static int[][] nums;
public static void main(String[] args) {
nums = new int[3][4];//方便测试,模拟页数
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
nums[i][j] = (int) (Math.random() * 2);
if (nums[i][j] == 0) {
reminder++;
}
}
}
System.out.println("\n------------------------分配前--------------------------");
print();
//分配
PCB p1 = new PCB("p1", 4);
allocate(p1, 4);
System.out.println("\n------------------------分配后--------------------------");
print();
setFree(p1);
System.out.println("\n------------------------回收后--------------------------");
print();
}
//打印内存分配情况
private static void print() {
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
System.out.print(nums[i][j] + " ");
}
System.out.println();
}
}
/**
* @param pcb 进程名
* @param size 需要的页数
*/
private static void allocate(PCB pcb, int size) {
if (reminder < size) {
System.out.println("可分配空间不足!");
}
int[] pageTable = pcb.pageTable;
int index = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
if (nums[i][j] == 0) {
nums[i][j] = 1;
//将其分配出去
pageTable[index] = i * nums[0].length + j;
reminder--;
if (++index == size) {
System.out.println("分配完成");
return;
}
}
}
}
}
/**
* 将为该进程分配的内存回收掉
*
* @param pcb 进程
*/
private static void setFree(PCB pcb) {
int[] pageTable = pcb.pageTable;
for (int i = 0; i < pageTable.length; i++) {
//定位位示图位置
int row = pageTable[i] / nums[0].length;
int col = pageTable[i] % nums[0].length;
//将空间回收
nums[row][col] = 0;
reminder++;
}
System.out.println("进程空间已释放!");
}
}
class PCB {
String name;
int[] pageTable;
public PCB() {
}
public PCB(String name, int size) {//size为占用的内存页数
this.name = name;
this.pageTable = new int[size];
Arrays.fill(this.pageTable, -1);
}
}
运行截图:
文章来源:https://blog.csdn.net/m0_59925573/article/details/134953093
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!