UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA ANA CAROLINA ABREU BARBOSA LUAN BAHRI RIBEIRO PROBLEMAS CLÁSSICOS DE ESCALONAMENTO: BARBEIRO DORMINHOCO PONTA GROSSA 2017 ANA CAROLINA ABREU BARBOSA LUAN BAHRI RIBEIRO PROBLEMAS CLÁSSICOS DE ESCALONAMENTO: BARBEIRO DORMINHOCO Trabalho desenvolvido durante a disciplina de Sistemas Operacionais, como parte da avaliação, referente ao primeiro semestre, com a orientação do professor: Profº. Dierone César Foltran Júnior PONTA GROSSA 2017 LISTA DE FIGURAS Figura 1 - Processador ocioso: repousa. .......................................................................................... 6 Figura 2 - Processo chega e acorda processador em repouso para atendimento. ................... 6 Figura 3 - Processos só poderão aguardar atendimento se houver espaço para os mesmos.6 Figura 4 - Caso não haja espaço, processos não podem aguardar atendimento. .................... 7 Figura 5 - Processo atendido sai e processo aguardando deve ser atendido. .......................... 7 Figura 6 - Código parte 01. ................................................................................................................. 8 Figura 7 - Código parte 02. ................................................................................................................. 9 Sumário 1. O PROBLEMA ................................................................................................................................... 5 2. FUNCIONAMENTO........................................................................................................................... 5 3. CÓDIGO ........................................................................................................................................... 8 4. CONCLUSÃO .................................................................................................................................... 9 5. REFERÊNCIAS BIBLIOGRÁFICAS ..................................................................................................... 11 5 1. O PROBLEMA Em programação concorrente, conceito que engloba processos coexistindo em um mesmo dado momento, surgem problemas que devem ser tratados para que os fluxos entre essa relação – processador e processos – funcione de maneira correta. Isso porque quando existe um processo em execução, há a possibilidade de que uma mesma área compartilhada por vários processos seja acessada. Quando em programação concorrente, onde esse acesso pode ser requerido por vários processos ao mesmo tempo, conflitos podem surgir. Um deles é o chamado “Barbeiro Dorminhoco”, denominado assim pela analogia que faz de um barbeiro – o processador – com seus clientes – os processos. 2. FUNCIONAMENTO O funcionamento na barbearia (relação processador-processo) segue o seguinte fluxo: 1. Quando não há clientes na barbearia, o barbeiro pode dormir (figura 1); 2. Quando um cliente chegar, deve verificar se: a. O barbeiro está dormindo. Nessa situação, o cliente o acorda para ser atendido (figura 2); b. Se o barbeiro está acordado mas já está atendendo. Nessa situação, o cliente só pode esperar por atendimento se existirem cadeiras vagas na barbearia (figura 3), senão, deve deixar a barbearia (figura 4). 3. Após um cliente ser atendido, o mesmo deve deixar a barbearia (figura 5) e outro cliente, caso exista, deve ser atendido. Caso ele não exista, o item ‘a’ deve ser seguido. 6 Figura 1 - Processador ocioso: repousa. Fonte: Os autores. Figura 2 - Processo chega e acorda processador em repouso para atendimento. Fonte: Os autores. Figura 3 - Processos só poderão aguardar atendimento se houver espaço para os mesmos. Fonte: Os autores. 7 Figura 4 - Caso não haja espaço, processos não podem aguardar atendimento. Fonte: Os autores. Figura 5 - Processo atendido sai e processo aguardando deve ser atendido. Fonte: Os autores. Para que o fluxo de atendimento seja seguido sem conflitos, devemos garantir que: 1. Processador repouse apenas quando não existirem processos a serem atendidos e seja sempre acordado quando algum processo precisar de atendimento; 2. Processos não esperem por atendimento se não houver lugar disponível. Dessa maneira, esperas infinitas por atendimento (deadlock) e ociosidade de recursos serão evitados. Porém, para uma solução para programação concorrente ser considerada válida, ela deve cumprir os seguintes itens: a. Dois processos nunca podem estar simultaneamente em suas regiões críticas; 8 b. Nenhum processo executando fora de sua região crítica pode bloquear outros processos; c. Nenhum processo deve esperar eternamente para entrar em sua região crítica; d. Nada pode ser afirmado sobre a velocidade ou sobre o número de CPUs. 3. CÓDIGO Figura 6 - Código parte 01. Fonte: Tiago Porto, Maio 2009. 9 Figura 7 - Código parte 02. Fonte: Tiago Porto, Maio 2009. 4. CONCLUSÃO Com a análise, vemos que no exemplo do “Barbeiro Dorminhoco”, quanto aos itens: 10 a. Como o processador atende um processo por vez (cliente por cadeira), dois processos nunca estarão simultaneamente em suas regiões críticas (área compartilhada); b. Como o “Barbeiro Dorminhoco” é uma solução para programação concorrente, só entrará na barbearia processos que se encaixem no conceito da mesma. Os processos que entrarem devem sair logo que forem atendidos (figura 5), não bloqueando o atendimento de outros processos, como devemos garantir; c. Como os processos não devem aguardar atendimento se não houver lugar (figura 4), eles não esperarão infinitamente; d. Nada é dito sobre a quantidade de espaços disponíveis para os processos assim como a quantidade de processadores (barbeiros) na relação processador-processos (barbearia). Assim, é possível afirmar que a solução apresentada pelo exemplo do “Barbeiro Dorminhoco” é válida, resolvendo o problema clássico de escalonamento em programação concorrente. 11 5. REFERÊNCIAS BIBLIOGRÁFICAS COSTA, Celso Maciel da, Sistemas Operacionais Programação Concorrente com Pthreads, maio 2009. Disponível em: < https://books.google.com.br/books?id=KOdf-52KERMC&printsec=frontcover&dq=pro grama%C3%A7%C3%A3o+concorrente&hl=pt-BR&sa=X&ved=0ahUKEwj1g7OJoaf TAhUIPJAKHe--BeAQ6AEIJDAA#v=onepage&q&f=false>. Acesso em 15 de Abril de 2017. PORTO, Thiago, Barbeiro Sonolento., maio 2009. Disponível em: < http://ces33.wikidot.com/tiagoporto:barbeiro-sonolento>. Acesso em 18 de Abril de 2017.