Projeto 2: Gerenciamento de processos :::

Objetivo:

Implementar um núcleo gerenciador de processos, usando threads, aproveitando a interface produzida para o projeto anterior. Assim, o núcleo usará a função que le arquivos contendo instruções de programas sintéticos (exemplo), devendo agora retornar um inteiro que representa a ação definida pela instrução lida. Antes de fazer isso, deve tratar o sinal retornado pela função interruptControl, que retorna um inteiro identificando o tipo de interrupção que demandou a sua ação (retorna 0 se não houve interrupção).

Já o tratamento das instruções identificadas a partir do programa sintético é determinado por uma função chamada sysCall, a ser implementada por vocês, que é chamada quando o retorno da interruptControl é 0.

A partir do inteiro obtido de uma dessas funções o núcleo ativa o thread correspondente, bem como aloca o próximo processo na CPU usando o algoritmo de escalonamento definido ao final deste texto. As origens possíveis para os eventos a serem tratados pelo núcleo (com cada inteiro que as identificam) são:
 
ATENÇÃO: Para este projeto precisam ser implementados apenas os threads números 2, 3, 10 e 11. Os demais serão funções vazias.

  1. processInterrupt (1) -- interrupção gerada pelo final do quantum-time de um processo
  2. semaphoreP (10) -- tratamento de bloqueio de processo
  3. semaphoreV (11) -- tratamento de desbloqueio de processo
  4. ioRequest (4) -- chamada de operação de entrada/saída
  5. ioFinish (5) -- sinalização de final de E/S
  6. memLoadReq (6) -- chamada de operação de carregamento na memória
  7. memLoadFinish (7) -- sinalização de final de carregamento
  8. fsRequest (8) -- chamada para operação no sistema de arquivos
  9. fsFinish (9) -- sinalização de final de operação no sistema de arquivos
  10. processCreate (2) -- chamada para iniciar a criação de um processo no BCP
  11. processFinish (3) -- chamada para terminar a existência de um processo no BCP


Nesse momento é preciso escrever os códigos correspondentes às threads de semáforos, criação, término e interrupção de processos e escalonamento. As demais funcionalidades devem ser implementadas como funções vazias.

ALGORITMO DE ESCALONAMENTO:

Prioridade com quantum-time, em que o processo escolhido para executar será aquele com menor valor de prioridade (lida do programa sintético) e irá executar pelo tempo equivalente a 2000 ut, ou até ocorrer uma chamada de semáforo, E/S, ou término de processo.




Para melhor entendimento de como programar usando threads veja esse documento.


Para a implementação desse núcleo faça uso das bibliotecas "semaphore.h" e "pthreads.h" presentes no UNIX para o uso de semáforos e de threads.


PRAZO PARA ENTREGA: 03/11/2015, até 24h00 (data e horário do recebimento do e-mail para aleardo at sjrp dot unesp dot br)

 
 
DISCLAIMER
 
 
O conteúdo desta página é de minha total responsabilidade, não representando o pensamento ou posições da UNESP.