资源简介
模拟计算机主存储器空间的分配和回收,设计一个在可变分区管理方式下的最先适应分配算法的的分配与回收程序。
代码片段和文件信息
import java.util.Scanner;
class MemoryUnit{
public boolean state = false;//内存单元的状态(0表示已使用 1表示未使用)
}
class Memory{
public MemoryUnit[] memories;//表示内存大小
Memory(int n){
//初始化内存大小
memories = new MemoryUnit[n];
for (int i = 0; i < n; i++){
memories[i] = new MemoryUnit();
}
}
}
class FirstFit{//采用最先使用算法对内存进行分配
public Memory memory;
public int mSize;//表示内存大小
public Job[] jobs;
public FirstFit(int mSize Memory memory Job[] jobs){
this.mSize = mSize;
this.memory = memory;
this.jobs = jobs;
}
public void alloc(int jOrder){//为job分配内存
int i j k count;
for (i = 0; i < mSize; i++){
//先遍历整个内存寻找最先适应的内存区域,将job装载进内存
if(memory.memories[i].state == false){
//找到未被占用的第一个内存地址,并计算从这个地址开始连续单元长度
//判断大小是否可以装载进job
count = 0;
for (j = i; j < mSize; j++){
if(memory.memories[j].state == true){
break;
}
count++;
}
if(count >= jobs[jOrder].len){
System.out.println(“~~~~第“ + jOrder + “个job分配成功!~~~~“);
System.out.println();
jobs[jOrder].state = true;
jobs[jOrder].start = i;//设置job在内存中的起始单元
//连续的内存单元长度大于job长度 可以装载进去
for(k = i; k < i + jobs[jOrder].len; k++){
memory.memories[k].state = true;
}
emptyMemory();
}
//i从j的地址开始继续循环
i = j;
}
}
if (jobs[jOrder].state == false){
System.out.println(jOrder + “~~~~分配失败!~~~~“);
}
}
public void back(int jOrder){//释放job所占用的内存
int i j endLocation = 0;
boolean flag = false;//用来标记是否找到了下一个job
//回收的时候只能回收到下一个job的起始位置
for(i = jobs[jOrder].start + 1; i < mSize; i++){
endLocation = 0;
for (j = 0; j < jobs.length; j++){
//遍历每一个job 寻找在内存中当前job的下一个job
if (jobs[j].start == i && j != jOrder){
endLocation = jobs[j].start--;
flag = true;
break;//跳出内循环
}
}
if(flag == true){//如果找到了下一个job
i = mSize;
}
}
//判断endlocation是否超出当前job的地址范围
if(endLocation > jobs[jOrder].start + jobs[jOrder].len - 1){
endLocation = jobs[jOrder].start + jobs[jOrder].len;
}
for (i = jobs[jOrder].start; i < endLocation; i++){
memory.memories[i].state = false;
}
System.out.println(“~~~~回收成功~~~~“);
emptyMemory();
}
public void emptyMemory(){//打印出当前空闲的内存单元区域
int i j k count;
System.out.println(“<======空闲的内存区域======>“);
相关资源
- nachos-java及project1完整代码
- 操作系统-动态分区分配算法-JAVA版
- 多道批处理作业调度模拟程序
- 操作系统课程设计——生产者消
- 操作系统调度算法java源代码
- 操作系统调度模拟
- 内存分配算法课程设计Eclipse+Java
- 页面置换算法动画演示程序
- 操作系统模拟内存管理实验
- 进程管理JAVA
- 同步问题之红客黑客问题
- 操作系统实验 作业调度 先来先服务算
- 进程调度中优先级调度算法模拟
- 操作系统动态内存分配java
- 模拟哲学家进餐问题JAVA)
- java代码模拟CPU
- 请求分页存储管理系统
- 操作系统实验三文件管理
- 操作系统课程设计--作业调度
- JAVA (ATM系统)
- 操作系统课程设计-用java模拟首次适应
评论
共有 条评论