📄 sys_memory.java
字号:
package design;
import design.*;
import java.util.*;
/**
* <p>Title: 操作系统课程设计</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 胡波
* @version 1.0
*/
public class Sys_memory {//暂时不能整理内存空间
LinkedList listMemory=new LinkedList();
Memory all=new Memory();
int freeMemorySize;
public Sys_memory(int s) {
all=new Memory(s);
freeMemorySize=s;
all.setStartPose(0);
listMemory.addFirst(all);
}
public boolean canBeDistribute(int s){
for(int i=0;i<=listMemory.size()-1;i++){
Memory temp = new Memory( (Memory) listMemory.get(i));
if (temp.state == 0 && temp.getSize() >= s)
return true;
}
return false;
}
public int distrubiteMemory(int a){//分配内存,返回起始地址
//if(a>freeMemorySize)
// return -1;//分配失败
int aa=0;
for(int i=0;i<=listMemory.size()-1;i++){
Memory temp=(Memory)listMemory.get(i);
if(temp.state==0&&temp.getSize()>=a){
aa=temp.getStartPose();
Memory temp2=new Memory();
temp2.setStartPose(aa+a);
temp2.setSize(temp.getSize()-a);
temp2.state=0;
temp.setSize(a);
temp.useMemory();
temp.state=1;
listMemory.add(i+1,temp2);
listMemory.set(i,temp);
freeMemorySize-=a;
return aa;
}
}
return -1;
}
public void free(int start){//释放内存
boolean end=false;
for(int i=0;i<=listMemory.size()-1;i++){
Memory temp =(Memory) listMemory.get(i);
if(temp.getStartPose()==start){
temp.state = 0;
end=true;
freeMemorySize += temp.getSize();
listMemory.set(i, temp);
}
if(i<listMemory.size()-1){
Memory tempNext=(Memory)listMemory.get(i+1);
if(tempNext.state==0){
temp.setSize(temp.getSize()+tempNext.getSize());
listMemory.set(i,temp);
listMemory.remove(i+1);
}
}
if(i>=1){
Memory tempPre=(Memory) listMemory.get(i-1);
if(tempPre.state==0){
tempPre.setSize(tempPre.getSize()+temp.getSize());
listMemory.set(i-1,tempPre);
listMemory.remove(i);
}
}
if(end)
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -