📄 memory.java
字号:
package com.os.lyc;
import java.util.LinkedList;
public class Memory {
public static int maxsize;
public int memory[];
public int bsmi; //循环首次适应的开始指针
public int left;
private SubMemory fsm;
public LinkedList<SubMemory> list ; //空闲内存块链表
private int lists1;
private int lists2;
public Memory(){
maxsize=214;
left=214;
memory = new int[maxsize];
for(int i =0;i<214;i++){
memory[i]=0;
}
list = new LinkedList<SubMemory>();
fsm = new SubMemory();
fsm.setSize(maxsize);
list.add(fsm);
bsmi=0;
lists1=lists2=0;
}
public int apply_first(int size){
if(size>left)
return -1;
else{
int begin=0;
SubMemory tsm = new SubMemory();
for(int i =0;i<list.size();i++){
tsm = (SubMemory)list.get(i);
if(tsm.getSize()>=size){
for(int j=tsm.getBegin();j<=tsm.getBegin()+size-1;j++)
memory[j]=1;
begin = tsm.getBegin();
tsm.setBegin(tsm.getBegin()+size);
tsm.setSize(tsm.getSize()-size);
left-=size;
return begin;
}
}
return -2;
}
}
public int apply_circle(int size){
if(size>left)
return -1;
else{
int begin=0;
SubMemory tsm = new SubMemory();
for(int i =bsmi;i<list.size();i++){
tsm = (SubMemory)list.get(i);
if(tsm.getSize()>=size){
for(int j=tsm.getBegin();j<=tsm.getBegin()+size-1;j++)
memory[j]=1;
begin = tsm.getBegin();
tsm.setBegin(tsm.getBegin()+size);
tsm.setSize(tsm.getSize()-size);
bsmi=i++;
left-=size;
return begin;
}
}
for(int i =0;i<bsmi;i++){
tsm = (SubMemory)list.get(i);
if(tsm.getSize()>=size){
for(int j=tsm.getBegin();j<=tsm.getBegin()+size-1;j++)
memory[j]=1;
begin = tsm.getBegin();
tsm.setBegin(tsm.getBegin()+size);
tsm.setSize(tsm.getSize()-size);
bsmi=i++;
left-=size;
return begin;
}
}
return -2;
}
}
public int apply_best(int size){
if(size>left)
return -1;
else{
int begin=0;
SubMemory tsm = new SubMemory();
for(int i =0;i<list.size();i++){
tsm = (SubMemory)list.get(i);
if(tsm.getSize()>=size){
for(int j=tsm.getBegin();j<=tsm.getBegin()+size-1;j++)
memory[j]=1;
begin = tsm.getBegin();
tsm.setBegin(tsm.getBegin()+size);
tsm.setSize(tsm.getSize()-size);
left-=size;
return begin;
}
}
return -2;
}
}
public void creatlink(){
int m=0;
for(int i=0;i<maxsize;i++){
if(memory[i]==0){
m++;
if(i<maxsize-1 && memory[i+1]==1){
SubMemory sm = new SubMemory();
sm.setBegin(i-m+1);
sm.setSize(m);
list.add(sm);
}
else if(i==maxsize-1){
SubMemory sm = new SubMemory();
sm.setBegin(i-m+1);
sm.setSize(m);
list.add(sm);
}
}
else
m=0;
}
if(Main.m_kind==3){
SubMemory tsm = new SubMemory();
SubMemory sm[] = new SubMemory[list.size()];
int size = list.size();
for(int i = 0;i<size;i++)
sm[i]=(SubMemory)list.get(i);
for(int i=0;i<size-1;i++)
for(int j=i+1;j<size;j++)
if(sm[i].getSize()>sm[j].getSize()){
tsm=sm[i];
sm[i]=sm[j];
sm[j]=tsm;
}
list.clear();
for(int i=0;i<size;i++)
list.add(sm[i]);
}
}
public void back(int begin,int size){
System.out.println("back");
for(int i=begin;i<=begin+size-1;i++){
memory[i]=0;
}
for(int i=0;i<214;i++)
System.out.print(memory[i]);
System.out.println();
//***************重构空闲内存链表
lists1=list.size();
list.clear();//
this.creatlink();//
lists2=list.size();
if(Main.m_kind==2)
bsmi-=(lists1-lists2);
left+=size;
}
public void unit(){
SubMemory presm = new SubMemory();
SubMemory nextsm = new SubMemory();
int sum = 0;
int m = Main.lm.size();
for(int i = 0;i<m;i++){
nextsm = (SubMemory)Main.lm.get(i);
if(i==0)
nextsm.setBegin(0);
else{
nextsm.setBegin(presm.getBegin()+presm.getSize());
}
sum+=nextsm.getSize();
presm = nextsm;
}
for(int j=0;j<maxsize;j++){
if(j<sum)
memory[j]=1;
else
memory[j]=0;
}
//*********空闲内存块重构
list.clear();
this.creatlink();
bsmi=0;
}
public void init(){
for(int i=0;i<maxsize;i++){
memory[i]=0;
left=maxsize;
list.clear();
fsm.setSize(maxsize);
fsm.setBegin(0);
list.add(fsm);
bsmi=0;
lists1=lists2=0;
Main.lm.clear();
Main.lp.clear();
}
}
public void test(){
SubMemory sm =(SubMemory)list.get(0);
System.out.println(sm.getSize());
sm.setSize(23);
SubMemory sm2 =(SubMemory)list.get(0);
System.out.println(sm2.getSize());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -