Relógio do sistema
0
Unidades de tempo decorridas
Processo na CPU
—
Processo atualmente despachado
Quantum restante
—
Fatia disponível no despacho atual
Estado da CPU
CPU livre
Tempo restante do processo—
Fila de prontos · FIFO circular
Fila não inicializada
Processos aguardando0
Linha do tempo · Gráfico de Gantt
Tempo total: 0A linha do tempo será preenchida durante a execução.
Tabela de ciclo de vida
Turnaround = execução + espera| Processo | Execução | Restante | Espera | Ciclo de vida |
|---|---|---|---|---|
| Nenhum processo cadastrado. | ||||
Saída final · Resultados da simulação
Fluxograma do algoritmo Round-Robin
Implementação Python para terminal
Implementação Round-Robin com collections.deque. A entrada segue a ordem N → CPU bursts → Quantum.
from collections import deque
def ler_inteiro(mensagem):
"""Lê um inteiro positivo, repetindo a pergunta se necessário."""
while True:
try:
valor = int(input(mensagem))
if valor > 0:
return valor
except ValueError:
pass
print("Digite um número inteiro maior que zero.")
def round_robin(tempos, quantum):
"""Executa Round-Robin. Todos os processos chegam no instante zero."""
restante = list(tempos)
fila = deque(range(len(tempos)))
relogio = 0
conclusao = [0] * len(tempos)
linha_do_tempo = []
while fila:
indice = fila.popleft()
inicio = relogio
fatia = min(restante[indice], quantum)
# Executa o processo durante sua fatia de CPU.
relogio += fatia
restante[indice] -= fatia
linha_do_tempo.append((indice, inicio, relogio))
if restante[indice] > 0:
# O processo não terminou: volta ao fim da fila.
fila.append(indice)
else:
# O processo terminou; registra seu instante de conclusão.
conclusao[indice] = relogio
espera = [conclusao[i] - tempos[i] for i in range(len(tempos))]
turnaround = conclusao[:] # Todos os processos chegam no tempo zero.
return turnaround, espera, linha_do_tempo
def main():
# 1. Quantidade de processos (N).
n = ler_inteiro("Quantidade de processos (N): ")
# 2. Tempo de execução (CPU burst) de cada processo.
tempos = []
for i in range(n):
tempo = ler_inteiro(
f"Tempo de execução do processo P{i + 1}: "
)
tempos.append(tempo)
# 3. Quantum.
quantum = ler_inteiro("Fatia de tempo (Quantum): ")
turnaround, espera, linha = round_robin(tempos, quantum)
print("\\n--- Resultado Round-Robin ---")
for i in range(n):
print(
f"P{i + 1}: ciclo de vida = {turnaround[i]} "
f"(execução = {tempos[i]} + espera = {espera[i]})"
)
media_turnaround = sum(turnaround) / n
media_espera = sum(espera) / n
print(f"\\nMédia do ciclo de vida: {media_turnaround:.2f}")
print(f"Média do tempo de espera: {media_espera:.2f}")
print("\\nLinha do tempo (Gantt):")
for indice, inicio, fim in linha:
print(f"P{indice + 1}: {inicio} -> {fim}")
if __name__ == "__main__":
main()