O objetivo desse trabalho é que você entenda parcialmente o funcionamento interno do sistema operacional Minix, em especial no que diz respeito ao controle de processos. Para atingir esse objetivo, proponho algumas alterações ao funcionamento do sistema. O trabalho é dividido em duas partes. Na primeira, a alteração em si é bastante simples. A dificuldade na execução dessa parte está em dominar o procedimento de criação de uma nova chamada de sistema e de recompilação do sistema. Esse conhecimento será necessário para a segunda parte do trabalho, onde proponho uma alteração, mais complexa, de comportamento do escalonador. Sugiro fortemente que a primeira parte seja concluída antes que se inicie a segunda...
Crie uma função getppid()
que retorne
o pid do progenitor (parent process) do
processo corrente.
Essa função deve ser implementada como uma
chamada ao gerenciador de memória (MM),
e o gerenciador de memória deve ser alterado para
tratar essa nova mensagem.
Observe que existe uma forma de se obter a informação solicitada (pid do processo progenitor) através de uma chamada já existente, mas não é isso que estou pedindo. A função deve ser implementada como descrito.
Para enviar uma mensagem para o processo gerenciador
de memória, utilize a função sendrec
,
definida em /usr/include/minix/lib.h
.
Altere o escalonamento do minix para incluir vários níveis de prioridade (por exemplo, três) de processos usuários. Ao ser criado, um novo processo deve sempre ter o nível mais alto de prioridade de usuário. Criar uma função
int nice(int prio)que permita alterar a prioridade de um processo. O parâmetro
prio
indica o novo
nível de prioridade.
O retorno da função deve indicar se a operação
foi efetuada com sucesso ou não.
Em geral, só deve ser permitido a um processo diminuir
seu nível de prioridade.
Se o processo pertence ao super-usuário (root), ele
pode também pedir para aumentar seu nível de prioridade.
Desenvolva uma aplicação exemplo, que demonstre todos os casos (sucesso e diferentes motivos de insucesso) da nova função. A aplicação também deve tornar clara a existência dos diversos níveis de prioridade (ou seja, deve ficar óbvio que alguns processos estão sendo preteridos em favor de outros).