Programa para demonstrar paginação

0 respostas
rike91
Olá pessoal, estou tentando fazer um programa em java mostrando como funciona a paginação em memórias. Como estou começamdo mesmo com o java só sei o básico mesmo, mas o programa está dando um loop no metodo achaPaginaLivre() . Se alguem puder me ajudar, agradeço.
import javax.swing.JOptionPane;
public class Paginacao {
	static int memoria[]= new int[25];
	static String memoriaString[]= new String[25];
	public static void main (String args[]) {
		
		for(int i=0; i<25; i++)
		{
			memoria[i]=0;
		}
		int nprocesso;
		String nprocessoString;
		int numDePaginas=0;
		
	
		
	
		nprocessoString = JOptionPane.showInputDialog(null,"Quantos processos existirão?");
		
		nprocesso = Integer.parseInt(nprocessoString);
		int tamanhoDosProcessos[]= new int[nprocesso];
		int tamanhoprocesso;
		String tamanhoprocessoString;
		for (int i=0; i<nprocesso;i++)
		{
			tamanhoprocessoString = JOptionPane.showInputDialog(null,"Qual o tamanho do processo"+i+"?");
		    tamanhoprocesso = Integer.parseInt(tamanhoprocessoString);
		    tamanhoDosProcessos[i]=tamanhoprocesso;
		    
		}
		for (int i=0; i<nprocesso;i++)
		{
			
			if (tamanhoDosProcessos[i]%4==0)
			{ 
				numDePaginas = tamanhoDosProcessos[i]/4;
			}
			if (tamanhoDosProcessos[i]%4!=0)
			{
				numDePaginas = (tamanhoDosProcessos[i]/4)+1;
			}
			
			for (int j=0; j<numDePaginas ;j++)
			{
				int pagOcupadaAtual;	
			
				pagOcupadaAtual = achaPaginaLivre();
				memoriaString[pagOcupadaAtual]="---------------\n| P"+i+"  pagina "+j+ "|"  ;
			}
		}
		achaPaginaLivre();
		mostraMemoria();
		
	}
	
   static int achaPaginaLivre()
	{
		int paginasorteada;
		double paginasorteadatemporaria=Math.random()*24;
		paginasorteada=(int)paginasorteadatemporaria;
		if(memoria[paginasorteada]==0)
		{
			memoria[paginasorteada]=1;
			
		}
		if(memoria[paginasorteada]==1)
		{
			while(memoria[paginasorteada]==1)
			{
				paginasorteada++;
				if(paginasorteada>24)
				{
					paginasorteada=0;
				}
			System.out.print(".");	
			}
			memoria[paginasorteada]=1;
			
			
		}
		return paginasorteada;
	}
	static void mostraMemoria()
		{
			for(int i=0;i<25;i++)
			{
				System.out.println(memoriaString[i]);
			}
			
		}
}

Nessa área de vermelho o que era para estar acontecendo(em teoria) era que iria sortear um bloco vazio na memoria(0), se encontrasse, ocuparia ele(1). Caso o bloco sorteado esteja ocupado ele iria passar para o proximo bloco(paginasorteada++) e iria passando ate encontrar um vazio. E como a memoria tem so 25 blocos, se o nº sorteado ultrapassasse a pagina sorteada seria declarada como 0, e a partir dai iria começar a procura por blocos vazios novamente.
Agradeço por qualquer ajuda. :D

Criado 22 de novembro de 2007
Respostas 0
Participantes 1