Problemas com algoritmo de swapping (FIFO)

3 respostas
Moony

olá :)

preciso fazer um trabalho de sistemas operacionais em que o programa lê um arquivo .txt de referências e conta os acertos e faltas de acordo com cada algoritmo de troca de páginas (FIFO, Segunda chance, etc...). Já tentei de tudo quanto é jeito, e nada funciona :? o programa lê o arquivo e coloca as referências em um vetor de Strings, mas o método FIFO só está contando as faltas, e ainda assim não está contando certo.

esse é o código do fifo:

public class Nucleo {

    int i,j;
    Pagina pag, pagx;

public String fifo (int frame, Vector<String> arquivo) {
     int acertos = 0, faltas = 0, contFrame = 0;
     LinkedList <Pagina> paginas = new LinkedList <Pagina> ();
     LinkedList <Pagina> copiaPaginas = new LinkedList <Pagina> ();
     String obj;
    
    copiaPaginas.addAll(paginas);
    for (i=0;i<arquivo.size();i++) {
        pag = new Pagina(arquivo.elementAt(i).substring(0, arquivo.elementAt(i).length()-1));
        
    
       if(contFrame < frame) {

           //se a memória nao estiver cheia
            
            Iterator ite = copiaPaginas.iterator();
            if (ite.hasNext()) {
               obj = ite.next().toString();
               pagx = new Pagina (obj);
               if (pagx.getP().equals(pag.getP().toString()))   //verificar se a próxima página já existe na memória
                   acertos++;
               else {
                   faltas++;
                   contFrame++;
                   paginas.add(pag);
                   
                    }
                }
            else {
                faltas++;
                contFrame++;
                paginas.add(pag);
                
            }

            }
        
       
        else {           //se a memoria estiver cheia
            
            Iterator ite = copiaPaginas.iterator();
            while (ite.hasNext()) {
               obj = ite.next().toString();
               pagx = new Pagina (obj);
               if (pagx.getP().equals(pag.getP().toString()))  //verificar se a próxima página já existe na memória
                   acertos++;
               else
                faltas++;
                pag = paginas.remove();
                paginas.add(pag);
                                
            }
        }
    }

String res = ""+acertos;


    return res;
    
}

alguém poderia me ajudar a ver onde está o erro?

3 Respostas

E

O que o método getP retorna? Se não for uma string, equals sempre retornará false.

Moony

Ele retorna uma string. Eu já tentei comparar a string da pagx com a pag de vários jeitos, mas parece que nunca dá pra comparar por causa do método next() do iterator, que retorna um objeto. Se ele estivesse conseguindo comparar, retornaria os acertos ._. Tentei fazer também o mesmo algoritmo usando for e não o iterator, e ele executa, mas não retorna nada ..

E

Amigo, você tem de tomar cuidado com “next”. É que ele avança o iterador; pode ser que seja isso que está lhe dando problemas (por exemplo, next() nunca é igual a next() porque next() avança o iterador :slight_smile: ).
Guarde uma referência para next (não custa nada criar mais uma variável :slight_smile: em vez de usar o valor diretamente, para você não se embananar.

Criado 20 de junho de 2010
Ultima resposta 20 de jun. de 2010
Respostas 3
Participantes 2