Implementação De Monitores No MINIX 2.0
Trabalho Universitário: Implementação De Monitores No MINIX 2.0. Pesquise 861.000+ trabalhos acadêmicosPor: laabf • 30/8/2013 • 1.295 Palavras (6 Páginas) • 801 Visualizações
Implementação de Monitores no MINIX 2.0
Juliana Carpes Imperial
Departamento de Informática, PUC-Rio
Rua Marquês de São Vicente, 225, Gávea, Rio de Janeiro, RJ, Brazil
juliana@inf.puc-rio.br
1. Introdução
O MINIX [Tanenbaum 1997] é um sistema operacional de código aberto feito para ser
altamente estável, flexível, seguro e portável. Porser pequeno e modular, é muito usado para
propósitos educacionais, para que os alunos de cursos de sistemas operacionais possam
entender o funcionamento de um na prática.
Este trabalho descreve a implementação de monitores [Andrews 2000, Tanenbaum
1997, Toscani 2003] na versão 2.0 do MINIX. Monitores são um mecanismo de controle de
concorrência de mais alto nível do que semáforos. Por isso, com o uso de monitores é mais fácil
escrever programas concorrentes corretos, reduzindoos riscos de um pequeno erro fazer com
que haja um deadlock, condições de corrida ou outros comportamentos imprevisíveis e
irreproduzíveis.
Foram usadas chamadas de sistema para implementar esse mecanismo de concorrência
no sistema. Por ser um sistema operacional modular,tendo como módulos o gerenciamento de
memória, o sistema de arquivos e o núcleo, tais chamadas foram implementadas dentro do
gerenciamento de memória, pois nesse módulo estão as chamadas que lidam com processos.
2. Chamadas Implementadas
int mutex_create( ): Essa função cria uma estrutura correspondente a um monitor e
retorna seu identificador. Esse identificador é criado de forma a dificultar que um processo
qualquer "adivinhe" seu valor, usando para isso a hora do sistema e o índice do novo monitor
na lista de monitores. Se não for possível criar o novo monitor, a função retorna -1. Um
retorno de -1indica que um limite do sistema foi atingido (número máximo de monitores
suportados).
int mutex_lock( int monid ): Essa função indica que o processo que a chama
deseja "entrar" no monitor monid. Apenas um processo pode deter o lockde um monitor a
cada instante. Quando um processo chama mutex_lock( monid ), podem ocorrer duas
situações. Se o monitor estiver livre (nenhum outroprocesso detém o lock), o processo corrente
pode prosseguir sua execução. Caso contrário, se o monitor estiver ocupado (algum processo já
detém o lock), o processo corrente é bloqueado em uma fila associada ao monitor até que ele
possa obter o lock.
A implementação de mutex_lock( )registra que o monitor está ocupado e a
identidade do processo que detém o lock. Se o monitor indicado não existir ou o limite de
processos presos na fila do monitor for atingido, afunção retorna -1.
int mutex_unlock( int monid ): Essa função corresponde à "saída" do monitor. Ela
deve liberar o lockde monid. Caso exista algum processo na fila associada ao monitor, o
primeiro processo da fila é desbloqueado e recebe o lock. Caso o processo corrente não detenha
o lockde monidou monidnão exista, a função retorna -1.
int cond_create( int monid ): Essa função cria uma variável de condição associada
ao monitor monide retorna seu identificador. Esse identificador sótem sentido se associado
ao identificador do monitor. Caso não seja possívelcriar a nova variável de condição, a função
retorna -1. Um retorno de -1indica que um limite do sistema foi atingido (número máximo de
variáveis de condição por monitor suportadas) ou que o monitor monidnão existe.
int cond_wait( int monid, int condid ): Essa função bloqueia o processo
corrente na fila da variável de condição condiddo monitor monide libera o lockde monid.
O primeiro processo na fila de espera associada à entrada no monitor passa a deter o lockde
monid. Uma chamada cond_wait( monid, condid )só é válida se o processo
corrente detiver o lockdo monitor monid. Um retorno de -1indica erro (o processo não detém
o lock necessário, monitor ou variável de condição inexistentes, ou o limite de processos presos
na fila da variável de condição do monitor foi atingido).
int cond_notify( int monid, int condid ): Essa função desbloqueia o
primeiro processo na fila da variável de condição condiddo monitor monid, se houver
algum, e faz com que esse processo passe para a fila de espera associada à entrada nesse
monitor. Um retorno de -1indica erro (monitor ou variável de condição inexistentes, o
processo não detém o lock necessário ou o limite de processos presos na fila do monitor foi
atingido).
int mutex_destroy( int monid ): Essa função destrói o monitor monid, liberando
os recursos alocados para ele no sistema operacional. Um retorno de -1indica erro (monitor
inexistente,
...