TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Implementação De Monitores No MINIX 2.0

Trabalho Universitário: Implementação De Monitores No MINIX 2.0. Pesquise 859.000+ trabalhos acadêmicos

Por:   •  30/8/2013  •  1.295 Palavras (6 Páginas)  •  761 Visualizações

Página 1 de 6

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,

...

Baixar como (para membros premium)  txt (8.3 Kb)  
Continuar por mais 5 páginas »
Disponível apenas no TrabalhosGratuitos.com