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: