Skip to content
This repository was archived by the owner on Jun 24, 2026. It is now read-only.

Repository files navigation

SO

Este projeto foi desenvolvido no âmbito da cadeira de Sistemas Operativos.

Estrutura do Projeto

  • bin/: Binários resultantes da compilação.
  • src/: Código fonte do projeto.
    • controller/: Lógica do servidor central que gere a fila de tarefas.
    • runner/: Cliente que submete tarefas e as executa após autorização.
  • include/: Ficheiros de cabeçalho (.h).
  • obj/: Ficheiros objeto (.o).
  • tmp/: Localização dos FIFOs e ficheiros temporários.

Compilação

Para compilar o projeto, basta executar o comando make na raíz do repositório:

make

Isto irá criar os diretórios necessários (bin, obj, tmp) e compilar os binários controller e runner.

Para limpar os ficheiros gerados:

make clean

Instruções de Execução

O sistema baseia-se num modelo cliente-servidor onde o controller deve estar a correr para que o runner possa submeter tarefas.

1. Controller

O controller é responsável por receber pedidos de execução, geri-los numa fila de espera e autorizar a execução com base numa política de escalonamento e num limite de paralelismo.

Uso:

./bin/controller <max_parallel><policy>
  • <max_parallel>: Número máximo de tarefas a correr em simultâneo.
  • <policy>: Política de escalonamento a utilizar. Opções:
    • fcfs: First-Come, First-Served (por ordem de chegada).
    • rr: Round Robin (atualmente implementado como alternância simples).
    • random: Escolha aleatória da próxima tarefa.

Exemplo:

./bin/controller 3 fcfs

2. Runner

O runner é a interface do utilizador para interagir com o sistema. Permite submeter comandos para execução, listar o estado atual ou desligar o sistema.

Submeter uma tarefa

Executa um comando (com os seus argumentos) sob um determinado ID de utilizador.

Uso:

./bin/runner -e <user_id>"<comando> <argumentos>"

Exemplo:

./bin/runner -e 1001 "ls -l /tmp"
./bin/runner -e 1001 "sleep 10"

Listar estado do sistema

Mostra as tarefas que estão atualmente em execução ou em fila de espera.

Uso:

./bin/runner -c

Desligar o Controller

Envia um sinal ao controller para terminar a sua execução de forma segura. O controller apenas desligará após concluir todas as tarefas em execução e em fila.

Uso:

./bin/runner -s

Logs

Todas as tarefas concluídas são registadas no ficheiro logs/log.txt (criado automaticamente se o diretório existir). O registo inclui o ID do utilizador, o ID do comando (PID do runner que o submeteu) e a duração da execução em milissegundos.

Exemplo de log: user-id 1001 | command-id 12345 | duration 10005 ms

About

Multi-runner command scheduling system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages