GARANTIR DESCONTO

Fórum Escalonamento de Processos Round-robin RR #444209

28/05/2013

0

eu ja tenho a base em fifo, mais nao consigo fazer o escolamento usando em quantum. que poder ajudar resolver esse problema..

package GerenciamentoDeProcessos;

import javax.swing.JOptionPane;

public class TestaProcesso {
public static void main (String[] args){
Fifo fifo = new Fifo();

fifo.rodar(Integer.parseInt(JOptionPane.showInputDialog(""+"Quantidade de processos: ")));
}

}


package GerenciamentoDeProcessos;

public class Processo {
private int numeroProcesso;
private int numCiclos;
private int tempoChegada;
private int tempoEspera;
private int tempoTermino;
private int tempoAcabar;


public int getNumeroProcesso() {
return numeroProcesso;
}

public void setNumeroProcesso(int numeroProcesso) {
this.numeroProcesso = numeroProcesso;
}

public int getNumCiclos() {
return numCiclos;
}

public void setNumCiclos(int numCiclos) {
this.numCiclos = numCiclos;
}

public int getTempoChegada() {
return tempoChegada;
}

public void setTempoChegada(int tempoChegada) {
this.tempoChegada = tempoChegada;
}

public int getTempoEspera() {
return tempoEspera;
}

public void setTempoEspera(int tempoEspera) {
this.tempoEspera = tempoEspera;
}

public int getTempoTermino() {
return tempoTermino;
}

public void setTempoTermino(int tempoTermino) {
this.tempoTermino = tempoTermino;
}

public int getTempoAcabar() {
return tempoAcabar;
}

public void setTempoAcabar(int tempoAcabar) {
this.tempoAcabar = tempoAcabar;
}

}



package GerenciamentoDeProcessos;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class Fifo {

private ArrayList<Processo> listaProcessos = new ArrayList<Processo>();
private int contProcessos;
private int contTempo;


void rodar(int quantProcessos) {
inicializarLista(quantProcessos);
processarLista();

}

void inicializarLista(int quantProcessos) {

for (int i = 1; i <= quantProcessos; i++) {
Processo p = new Processo();
// Atribui o numero de Processo (i)
p.setNumeroProcesso(i);
p.setNumCiclos(Integer.parseInt(JOptionPane
.showInputDialog("Numero de Ciclos de Processo: " + i)));

p.setTempoChegada(Integer.parseInt(JOptionPane
.showInputDialog("Tempo de chegada de Processo: " + i)));
listaProcessos.add(p);

}

}

void processarLista() {
Processo p = new Processo();
String saida = "Proc NC TC TE TT TA";
for (int i = 0; i < listaProcessos.size(); i++) {
p = listaProcessos.get(i);
contTempo = contTempo + p.getNumCiclos();
p.setTempoTermino(contTempo);
p.setTempoAcabar(contTempo - p.getTempoChegada());
p.setTempoEspera(contTempo - p.getNumCiclos() - p.getTempoChegada());



saida += "\n " + p.getNumeroProcesso() + " "
+ p.getNumCiclos() + " " + p.getTempoChegada()
+ " " + p.getTempoEspera() + " "
+ p.getTempoTermino() + " " + p.getTempoAcabar();

}

JOptionPane.showMessageDialog(null, saida);
}
}
Rafha

Rafha

Responder

Posts

29/05/2013

João Victor..

Bom dia!

Eu não entendi bem esse método "processarLista", mas enfim se fosse comigo eu ia usar o seguinte:

1º Eu ia deixar em um laço infinito e só ia dar um "break" quando verificar que todos os processos estão finalizados, e a cada ciclo do laço eu incrementaria aquela variável "contTempo" que pelo que entendi é o tempo que se passa

2º Ia fazer um código para retirar o processo que já existe na fila(já que existem chegadas é necessário distinguir quem já chegou), eu retiro o processo da lista através do método "remove" que te retorna o objeto Processo armazenando numa variável e decrementando seu tempo de execução através do quantum (determine um quantum fixo e ele afeta no incremento do "contTempo" se o quantum for 2 ele aumenta de 2 em 2 o "contTempo") depois usa método "addLast" para jogar o processo de volta na lista, só que no final(o "addLast" não existe no ArrayList tem no LinkedList)

3º Depois de jogar de volta na lista cria um laço no final para um incremento (que vale o mesmo número do quantum) em cada tempo de vida dos processos.

Aí o resto é contigo, se ficou meio ruim de entender alguma coisa, pode perguntar.

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar