Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo usar Java para implementar la programación de CPU? ¿Qué clases se deben usar?

¿Cómo usar Java para implementar la programación de CPU? ¿Qué clases se deben usar?

Algoritmo de programación de CPU y asignación de memoria

Escrito en un experimento del sistema operativo. Por razones de espacio, solo se proporciona el código de reciclaje y asignación de memoria.

/**

Unidad: Clase 0501, Escuela de Software, Universidad Central Sur

Archivo: CpuScheduler.java

Proyecto: Programa de simulación de algoritmo de programación de CPU del sistema operativo

Autor: Liu Xin

Hora de creación: 14 de mayo de 2007

**/

público static void InitMem(){

MemTable = nueva memoria();

MemTable.Setmem_beg(0);

MemTable.Setmem_size(100);

MemTable.Setmem_state(0);

}

InitMemory pública booleana (temperatura de PCB){

memoria mem_temp,último,ahora;

último = MemTable;

mem_temp = nueva memoria(temp.GetName(),temp.Getmem_size());

indicador booleano = verdadero;

if(mem_temp.Getmem_size() > 100 ){

c.tcpuinfo.setText(mem_temp.GetPcd_name()+"es demasiado grande");

bandera = falso;

}

if(MemTable == null){

indicador de retorno;

}

if( mem_temp.Getmem_size() + nowsize > 100){

c.tcpuinfo.setText("la memoria ha estado llena, espere");

flag = false;

}

if(MemTable.Getmem_state() == 0){// si el primero está vacío;

if(MemTable.Getmem_size() > mem_temp.Getmem_size () ){

mem_temp.next = MemTable;

mem_temp.Setmem_beg( last.Getmem_beg() );

mem_temp.Setmem_state(1);

MemTable.Setmem_beg(mem_temp.Getmem_beg() + mem_temp.Getmem_size());

MemTable.Setmem_size( MemTable.Getmem_size()-mem_temp.Getmem_size() );

MemTable = mem_temp;

nowsize += mem_temp.Getmem_size();

bandera de retorno;

}

si (MemTable .Getmem_size() == mem_temp.Getmem_size()){

// MemTable.SetPcd_name(yo

m_temp.GetPcd_name());

mem_temp = MemTable;

mem_temp.Setmem_state(1);

mem_temp.next = MemTable

nowsize += mem_temp.Getmem_size();

return flag;

}

}

// comenzar a obtener el otro ;

if(last != null){

now = last.next;

while(now != null){// busca en la tabla memoria compatible;

if(now.Getmem_state() == 0){// si la primera está vacía;

if(now.Getmem_size() > mem_temp.Getmem_size() ){

mem_temp.next = ahora;

mem_temp.Setmem_beg( ahora.Getmem_beg() );

mem_temp.Setmem_state(1);

now.Setmem_beg(mem_temp.Getmem_beg() + mem_temp.Getmem_size());

now.Setmem_size( now.Getmem_size()-mem_temp.Getmem_size() );

last.next = mem_temp;

nowsize += mem_temp.Getmem_size();

devolver bandera;

}

else if (now.Getmem_size() == mem_temp.Getmem_size()){

now.SetPcd_name(mem_temp.GetPcd_name());

mem_temp = ahora;

mem_temp.Setmem_state(1);

last.next = mem_temp;

nowsize += mem_temp.Getmem_size();

devolver bandera; p>

}

}

último = ahora;

//if(último != nulo){

ahora = ahora.next;

//}

}

}

devolver bandera;

}

public void ReleaseMem(Pcb Temp){

memoria mem_temp,last,now;

mem_temp = nueva memoria(Temp.GetName(),Temp. Getmem_size( ));

if(MemTable == null){

c.tcpuinfo.setText("No hay memoria para liberar");

// return false ;

}

último = MemTable;

ahora = último.siguiente;

si (Yo

mTable.GetPcd_name() == mem_temp.GetPcd_name()){//Si la primera es la partición a liberar;

MemTable.Setmem_state(0);

MemTable. SetPcd_name (null);

if(now != null && now.Getmem_state() == 0 ){//Si la partición adyacente posterior también está libre;

MemTable.Setmem_size (MemTable .Getmem_size() + now.Getmem_size());

MemTable.SetPcd_name(null);

nowsize -= mem_temp.Getmem_size();

MemTable .next = null;

// return true;

}

}

mientras (ahora! = null){ // Encuentra la partición que se liberará en la lista vinculada;

if(now.GetPcd_name() == mem_temp.GetPcd_name()){//Find;

nowsize -= mem_temp.Getmem_size( );

now.Setmem_state(0);

if(now.next != null && now.next.Getmem_state() == 0){// Vea lo siguiente adyacente Si el nodo está libre;

last.next = now.next;

now.next.Setmem_beg(now.Getmem_beg());

now.next.Setmem_size(now.Getmem_size() + now.next.Getmem_size());

ahora = last.next;

now.SetPcd_name(null);

}

if(last.Getmem_state() == 0){//Compruebe si el nodo adyacente anterior está libre;

last.next = ahora .siguiente;

last.Setmem_size(last.Getmem_size() + ahora.Getmem_size());

last.SetPcd_name(null);

ahora = último.siguiente ;

// ahora.SetPcd_name(null);

}

}

último = ahora;

ahora = ahora.siguiente;

}

}