Trabalho Semaforo - DEINFO - Universidade Estadual de Ponta

Propaganda
UNIVERSIDADE ESTADUAL DE PONTA GROSSA
SETOR DE CIÊNCIAS AGRÁRIAS E TECNOLOGIA
DEPARTAMENTO DE INFORMÁTICA
LEONARDO DE OLIVEIRA SOUZA
MATHEUS MORESCO
MECANISMO DE IPC: SEMÁFOROS
PONTA GROSSA
2017
LEONARDO DE OLIVEIRA SOUZA
MATHEUS MORESCO
MECANISMO DE IPC: SEMÁFORO
Trabalho
apresentado
para
a
obtenção de créditos parciais na disciplina
de Sistemas Operacionais.
Orientador: Prof. Dierone César
Foltran Júnior.
PONTA GROSSA
2017
Sumário
1
INTRODUÇÃO......................................................................................... 3
2
DESENVOLVIMENTO ............................................................................. 3
3
2.1
Problemas de compartilhamento de recursos ................................... 3
2.2
Exclusão mútua................................................................................. 3
2.3
Semáforo........................................................................................... 4
CONCLUSÃO .......................................................................................... 4
REFERENCIAS .............................................................................................. 5
3
1
INTRODUÇÃO
Em um sistema multiprogramado (concorrente) os processos alternam sua
execução segundo critérios de escalonamento estabelecidos pelo sistema
operacional. Processos concorrentes compartilham diversos recursos do sistema,
como arquivos, registros, dispositivos de Entrada/Saída e áreas da memória.
O compartilhamento de recursos entre processos pode ocasionar situações
indesejáveis, tal como o processamento incorreto de programas. Para evitar situações
como esta, os processos concorrentes devem ter suas execuções sincronizadas a
partir de mecanismos oferecidos pelo sistema operacional. Estes mecanismos são
chamados de Inter-Process Communication (IPC) e são divididos em seis categorias:
memória compartilhada, semáforos, memória mapeada, pipe, fifo e socket. Neste
trabalho iremos abordar o método Semáforos.
2
DESENVOLVIMENTO
2.1 Problemas de compartilhamento de recursos
Os sistemas operacionais multiprogramáveis executam diversos processos
concorrentemente, e cada processo por sua vez, pode executar diversas partes do
seu código concorrentemente também, ou seja, cada processo pode ter diversas
threads. (NETO). Como processos executando concorrentemente ou em paralelo
compartilham recursos do sistema, isso pode ocasionar alguns problemas.
O compartilhamento de recursos pode gerar dois grandes problemas. A
primeira situação envolve o compartilhamento de um arquivo em disco, dois processos
modificam uma variável ao mesmo tempo. A segunda apresenta uma variável na
memória principal sendo compartilhada, dois processos concorrentes podem tentar
gravar, ao mesmo tempo, um determinado valor em uma variável que está na
memória.
2.2 Exclusão mútua
É a propriedade que garante apenas uma unidade de execução (thread) na
região crítica de memória por vez. (FACOL). Ela que nos garante o tratamento de
4
concorrências, pois só haverá uma thread na região de memória compartilhada.
Entretanto a exclusão mútua deve garantir que não haja starvation ou busy wait, que
são situações onde o processo necessita acessar a região de memória, porém não
consegue devido a implementação da exclusão mútua. Logo, ela deve garantir que
todo processo que tenta acessar a região crítica de memória consiga realizar esse
acesso em um determinado momento. (TOSCANI; CARISSIMI, 2003).
2.3 Semáforo
O conceito de semáforo foi proposto por Dijkstra em 1965, sendo apresentado
como um mecanismo de sincronização que permite implementar, de forma simples, a
exclusão mútua e sincronização condicional entre processos. (FACOL)
Um semáforo é uma variável especial protegida, que só pode ser manipulada
por duas instruções: DOWN e UP, que tem como função o controle de acesso a
recursos compartilhados.
Os semáforos podem ser classificados como binários ou contadores. Os
semáforos binários só podem assumir os valores 0 e 1, enquanto os semáforos
contadores podem assumir qualquer valor inteiro positivo, além do 0.
A implementação da exclusão mútua em uma região crítica de memória é feita
através de um semáforo binário, onde o semáforo é a porta de entrada para a região
crítica. Ao tentar acessar a região de memória, o processo executa a função DOWN,
se o valor do semáforo for 1, então ele é decrementado para 0 e o processo acessa a
região de memória. Caso o valor do semáforo já seja igual a 0, então o processo entra
na fila de espera e acessa a região tão logo o semáforo esteja com status igual a 1.
Ao terminar o acesso a região crítica, o processo executa a função UP que incrementa
o valor do semáforo para 1, de forma a ficar disponível para outros processos.
(FACOL).
3
CONCLUSÃO
Através do uso de semáforos é possível garantir a execução de todos os
processos sem que haja conflito de memória entre eles. A sua forma de controle de
acesso a memória garante que todos os processos serão executados até o final,
5
acessado todos os dados necessários, diferente de outros métodos que não tratam a
fila de espera dos processos ocasionando o bloqueio do processo, pois este fica na
fila de espera e não consegue acessar a região crítica de memória, impedindo o
término do processo.
REFERENCIAS
FACOL. Sincronização e Comunicação entre Processos. Disponível em: <
http://www.facol.br/sophia/2741/apostila09_sincronizacao_comunicacao_entre_proc
essos.pdf >. Acesso em: 18 de abr. de 2017.
NETO, A. de M. Sincronização e Comunicação entre Processos. Disponível em:
<https://www.ime.usp.br/~adao/SCEP.pdf>. Acesso em: 16 de abr. de 2017.
TOSCANI, S. S.; CARISSIMI, A. da. S. Sistemas operacionais e programação
concorrente.
Sagra
Luzzatto,
2003.
Disponível
<http://www.inf.ufrgs.br/~asc/livro/cap4-14.pdf>. Acesso em: 16 de abr. de 2017.
em:
Download