Grupo: Adilson Medronha e Luís Lima
- O arquivo de entrada para o programa é o
input.json
e nele é possível colocar as configurações, como:- quantum: quantum do sistema
- memory: capacidade das filas de blocked e ready
- processes: lista contendo as informações do processo como:
- filename: path do arquivo que contém o código do processo
- priority: prioridade do processo
- DEVE SER NECESSÁRIAMENTE UMA DAS SEGUINTES (EM CAPSLOCK): HIGH, MEDIUM ou LOW
- arrival_time: tempo de chegada do processo (necessáriamente inteiro)
- O código já está configurado para receber o arquivo, portanto não é necessário fazer nenhuma alteração nele, apenas no arquivo de configuração.
- Após configurado o arquivo de entrada, basta executar o comando
python3 os.py
e o programa irá iniciar mostrando as filas.
- O programa inicia mostrando as filas com os processos passados por arquivo de configuração.
- A aparição do símbolo
>>
no terminal indica que o usuário deve apertarENTER
para seguir com a execução do programa- A cada iteração o programa irá imprimir as filas, qual instrução está sendo executada, o valor da variável acumulador e o tempo global da execução.
- Ao final da execução, o programa irá imprimir uma tabela contendo as seguintes informações de cada processo:
- ARRIVAL TIME
- START TIME
- END TIME
- PROCESS TIME
- WAITING TIME
- TURNAROUND TIME
- O trabalho, em geral, não trata todas as questões de fairness pois prioriza sempre processos com maior prioriodade, podendo ocorrer inclusive um monopólio de processador.
- O arquivo
process.py
contém a modelagem de um processo. Em seus atributos, há informações importantes para a execução do programa, como:- Informações do Processo
- PID
- Instruções
- Área de dados
- Prioridade
- Área de labels
- Estado
- Informações utilizadas para controle do bloco de processos (PCB) (salvamento e retomada de contexto)
- Último valor do acumulador
- Último valor de PC
- Último PC que aponta para uma label
- Detalhe de implementação para tratar os saltos condicionais
- Informações utilizadas para estatísticas
- Arrival time
- Process time
- Blocked time
- Aleatório entre 10 a 20 u.t
- Start time
- End time (foi para EXIT)
- Turnaround time
- Informações do Processo
- No arquivo
os.py
é onde de fato se encontra o escalonador de processos- Leitura do arquivo de entrada (configuração)
- Parsing da área de código e dados
- Escalonamento das filas (READY e BLOCKED)
- Feito no método
do_state_change
- O round-robin ocorre no método
handle_queues
, na linha 412, onde é feito um append (adiciona no final da fila) na fila (de blocked ou ready).- Entretando, logo na linha abaixo é feito um ordenamento da fila onde o de maior prioridade fica na cabeça da fila (aqui ocorre a injustiça).
- O round-robin ocorre no método
- Feito no método
- Execução dos processos
- Execução das intruções dos processos
- Leitura do arquivo de entrada (configuração)