⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_memory.java

📁 一个整体操作系统的主要功能的计算机模拟实现(含进程、内存与设备管理)
💻 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 + -