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

📄 memory.java

📁 JAVA实现的页面调度管理
💻 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 + -