[Música] todo mundo lá bem vindo ao lado 10 na hora dessa gente vai então falar sobre as soluções de dormir acordar e falou na aula passada sobre as soluções de espera ocupado e da espera ocupar a gente viu o grande problema de desperdiçar os ciclos de processamento e já tínhamos falado que haveria então uma outra forma de evitar que esse ciclo de processamento fossem utilizados pra verificar se uma determinada região crítica uma região crítica está ocupada ou não e essa sobre uma das soluções para aí seria o que seriam as soluções de dormir acordar comumente
é chamado na computação de primitivas de niterói cap cap um processo ele é colocado para dormir para simplificar em já resumir um processo é colocada para dormir quando uma região crítica encontra se ocupado então aquela analogia do banheiro ocupado que a gente faz é o banheiro encontra se ocupado o cliente então do restaurante é colocada então pra dormir por meio dos seguintes entidade pede que fique desativado momento em que o banheiro então ocupado esse mesmo cliente está acordado ou seja é solicitado informado pra ele que o banheiro encontra se ocupada e que ele pode então
proceder pra ir pro vanir então essencialmente é essa a solução de sleep wake up como é comumente chamado essas soluções distribui cap então ocorre através de primitivas de chamados sistemas não existe uma chamada para dormir existe também uma chamada então para acordar o processo de forma que o processo então entre na região crítica mas antes de falar sobre esse último foi capitão vamos só voltar aqui não sou falar sobre a exclusão muito tornar então existem várias soluções para excluir mutualmente revisar um pouco tanto que seria sua exclusão muito né exclusão mútuo é fazer com que
apenas tentava desenhar de novo então tem um processo um aqui existe um processo que o processo é um recurso compartilhado aqui que seria o que seria a mesma região crítica se o processo entra na região crítica então o processo não deverá entrar exclusão mútuo o processo já está na região critica qualquer outro processo é vetado essa entrada seria essa exclusão existem várias soluções pra efetiva ou para realizar a exclusão mútuo uma delas é espera o culpado que desperdiçara os ciclos de processamento hoje a gente vai ver então as primitivas muito e cap depois semáforos monitores
ea passagem mensal conversando com as soluções de dormir acordar para solucionar como falei da à espera ocupada da aula anterior a gente viu utilizando então essas duas chamadas do sistema que seria chamado de sistema de som sistema são chamadas para realizar o bloqueio desbloqueio do processo o processo é um processo que tenta entrar na região critica o bloqueio desbloqueio e verificando se existe um outro processo na região crítica ou não verificando se essa região crítica encontra se ocupada constantemente invés de realizar essa consulta constantemente esse mesmo processo é colocado pra quê colocado então dormir e
esse dormir então é o que esse dormir então é o que chama de uns escola chamado de tempo então coloca esse processo produzir então esse processo ele fica desativado enquanto na desativada entre aspas enquanto que em conta a região crítica tiver ocupa a região crítica desbloqueado o processo eo volta da chamada de sistema de voip cap volta à ativa de forma que esse processo então ele possa entrar na região crítica então seriam essencialmente em resumo né seria essa a situação das primitivas de strip oitavo oi cap acorda e os limp ponham um processo então pra
durmir e assim como eu estou dizendo aqui é importante evitando assim essa espero que essa espera ocupado antes de explicar para vocês vou mostrar um problema do produtor e consumidor pra que então a gente posta é para que esse problema então possa motivar o porquê de existir soluções a id de dormir acordar o seguinte existe um um processo consumidor existe um processo é produtor e consumidor do produtor o que ele faz é colocar os dados no bairro o processo o produtor eo processo consumidor retira os dados do bofe e vai consumir um exemplo clássico é
disso aqui seria o que o exemplo clássico é a web som então a internet seria o que a internet seria a existência de 22 processos esse processo pode ser vamos dizer se um servidor web e o servidor web então coloca os dados no buffet do consumidor e esse consumidor então pode ser o que pode ser um processo que pode ser nesse cenário aqui um browser então esse brozek ele tal consumindo os dados do servidor web que se encontram no outro lado não é esse o cenário que existe o produtor ele vai colocar os 12 itens
os itens aqui de dados no boxe e o consumidor vai retirar só que tem um cenário importante que é por isso que a gente tem essas duas primitiva distrito e cap é um bosta que a gente chama aquele é o que é limitado limitado então tenho que tem um tamanho é limitar o tamanho aqui o que tamanho limitado então ele não pode afogar uma quantidade grande de se bastar uma vez que os sintomas desse bosta da história por outro lado o consumidor ele vai ele necessita consumir esse bosta e m só que ele tem com
quem tem um time b o time dele que vai fazer com que os dados possam consumir no tempo dele esse consumidor normalmente se tornou uma máquina diferente e ele precisa o que ele precisa processar esses dados mas antes de processar a entidade precisa consumir estados a ler esses dados para o consumidor dom o buffer desculpa produtor ele tem que ser colocada para domingo o cenário é isso o produtor tem que ser colocado para dormir no momento em que o buffet deixei se o bota tiver vazio o consumidor não pode ficar inativo em ação é o
que tem que fazer ele tem que ser posto para dormir então esse é o cenário do problema do produtor e consumidor existe um produtor e um consumidor deste um boxer no meio que vai realizar então é esse intermédio entre esses dois processos um bufê cheio o pai dormir boff é não tá cheio que o seu produto está dormindo em colocar esse produtor para acordar e continuar produzindo as botas do consumidor buffer fasil consumidor tem que dormir entre o dado no boxe consumidor tem que ter acordado para continuar o que para continuar com o consumo de
dados é essencialmente este seria o que esse seria o cenário do problema do produtor e consumidor a solução não é cortar escrito aqui então colocar os processos para dormir até que eles possam ser executados não é o processo o consumidor é não possui nenhum dados para ler então o processo o consumidor vai ser posto pra dormir o produtor quando basta cheio produto o consumidor quando bota tiver vagas junto com essas primitiva sair de dubai cup então basta possui o que bota e possui uma variável chamada county e essa variável vai contar a quantidade de bola
de dados presente no boxe o produtor antes de colocar o estado no bosque tem que checar o que ele tem que checar se o bota se encontra cheio não se tiver cheio então ele é posto para que possa dormir e como é que ele verifica isso com a mesma variável county buffer cheio o produtor é colocado para dormir caso contrário o produto então coloca os dados não basta aí vai o que vai incrementando os dados nesse banco bom consumidor antes de retirar os dados no bairro consumidor vai checar o que vai checar se calmamente está
com zero se tiver com 10 né então ele vai ser posto para dormir senão ele continuou que continua retirando os dados na e de creme entando então a variável county de forma que cause então vai contar a quantidade de dados que se encontram no no bossa sempre vai testar para ver se o outro está acordado acordando é um outro processo se porque se for o caso então esse é o cenário do produtor e do consumidor entretanto a gente tem é a implementação a gente vai mostrar aqui que nem sempre vai funcionar mas antes de incentivar
e mostra aqui uma implementação desse produtor e consumidor na forma de uma implementação aqui em linguagem c a gente tem um um processo é um programa do produtor ea quente tenta o pro programa do consumidor que a variável continua valendo zero e o eniac valendo 100 que seria o que seria o tamanho máximo aí dodô buffer que encontra-se o que encontra se no meio do produtor e do consumidor nesse nesse código então o item vai ser representada através desta variável item o produtor então vai produzir cada um dos itens é através desse dessa função é
produzir aí tem e notem que o produtor então ele checa viu a variável do contador se encontra o que se encontra com valor igual a n quem é esse aqui e sim aqui seria o que teria o valor de 100 que seria o tamanho máximo é o tamanho máximo aqui do que do dólar ele sempre vai verificar se o buffer encontra se cheio ou não através dessa variável campos se ele tiver com a variável cante e conte na consciência implica dizer que o buffer se encontra o que ele se encontra cheio se encontra cheio tem
que chamar o que ele tem que chamar uma primitiva aqui uns skol né que seria o que se cobra dormir o próprio processo nesse caso o processo o produtor é caso contrário ele vem aqui na no próximo na próxima instrução com vocês estão vendo aqui a executa essa instrução incerti item que é o i é inserir desse item que foi produzido pelo pelo produtor nada esse processo e vai ouvir a mente incrementar aqui o valor do contador do contador vai ser igual a contador mais um é nesse cenário de um cenário de tensão que eles
têm outro teste aqui se o computador é igual a 1 ou seja é o primeiro dado no basta o que ele faz ele acorda quem acorda o consumidor anote nota aqui que a gente não tem o que permite vivas de espera ocupada onde um processo era ele consultava constantemente um determinado valor seja locke seja lá o torne tá pra saber se o a região crítica e se encontrava o culpado ou não aqui não tem desperdício de que ele não tem desperdício de processamento para saber o que pra saber se o cpu uma região crítica ele
se encontra ocupada por um outro processo não em vez disso a gente tem o que a gente tem essas primitivas de cap primitivas para saber ou melhor dizendo para efetivar a colocar o processo pra ser ativado e desativado o processo caso a região crítica encontra se ocupado nesse cenário aqui seria o que seria um teste para saber se o valor de kant é o um dizer que a variável a o buffer encontra-se com o primeiro valor e sem encontra se com o primeiro valor isso implica dizer o que isso implica dizer que o consumidor ele
precisa ser acordado no lado do consumidor aqui então a gente tem o county é valendo zero chicão provável é a valer 0 e implica dizer o que isso implica dizer que o nosso encontra se vazio e sem encontra se vazio ele preciso que ele precisa então se colocado para dormir a caso contrário vai ficar nessa espera ocupada para saber pra saber se o bota encontra se vazio não se ele não se encontra vazio ele vai ler o dado vai consumiu dado e vai de creme em ter essa variável county que seria o que seria variável
para contar a quantidade de bytes no banco se a bater se encontrava cheia e agora já tem um item a menos eu preciso fazer o que eu preciso então agora acordar o próprio produtor e aí se não for essa condição e vai consumir o item tal item então foi lido nesta primeira instrução de remover o item então essa implementação só que mesmo a implementação possui que ela possui algo mais alguns problemas e um problema seria justamente nessa são o contador seja igual quando ele verifica é igual a zero o corre-corre opção o processador é tirado
desse processo ao consumidor continuou e continua depositando item continua processando depois de realizar o várias linhas desse processo o produtor o processo volta de novo bom o quanto vale o computador em que a instrução edital estava nessa instrução aqui com a próxima instrução essa instrução aqui ora se ele sabe que na leitura anterior anterior contador estava valendo valendo zero que vale a 0 esse processo é o que posto pra dormir só que nosso pessoal não tá o bofe agora não está mais vazio ele já foi alguns dados já foram produzidas pelo produtor só que ele
é posto para dormir e aí o que acontece ocorre uma transição a uma mudança de contexto a esse processo o produtor volta de novo ativo continuar o que continua dormindo o que acontece com o produtor o produtor ele vai o que ele vai continuar o que vai para continuar produzindo os itens e produzindo os itens eu tenho que eu tenho que é que uma hora ou outra ele vai encher o bota quando enche o buffer o processo o produtor também é possível também nesse cenário que a gente vai ter a gente vai ter que ver
os dois processos então essa é uma falha que existe em função dessa variável aqui contador e existem soluções para tratar esse cenário e uma das soluções seria o que uma das soluções é uma das soluções seria justamente o uso que mostram o código ambos os processos dorme para sempre porque o processo consumidor e produtor vai dormir porque porque nem o consumidor está dormindo o processo vai consumir vai consumindo em uma hora o bairro vai encher e ele vai ser posto para dormir então o que o problema principal aqui o problema principal é que ele perdeu
esse cap no momento em que a indenização não se encontrava o que não se encontrava dormindo então aqui ocorre o que aqui ocorre um lei cap foi calma uma chamada de sistema de oitavo para o consumidor quando o consumidor na realidade ele não tava dormindo ainda então ele perdeu esse beach e também em função do que dessa interrupção ocorreu justamente nessa variável aqui contador esse problema aqui o que vai acontecer que os dois processos vão ser posto para dormir i é um blog é um bug que o que ocorre nesse código para isso a gente
tem uma solução qual seria a solução a solução é colocar um bicho legal pra um quando a gente é um processo é tentado é colocado para dormir então se você dá 119 processos consumidor mas o consumidor ainda encontra se acordado então esse bicho é o que esse beach acertado para a 1 quando esse bits quando o processo é posto de novo pra dormir o que ele faz ele verifica esse o que esse beach foi capa e estiver valendo o processo então não é posto pra dormir só que esse processo aí né esse procedimento essa solução
uma solução que é caro uma vez que todos os processos deverão ter o que deveriam ter-se bitway cap então uma solução que que é uma solução era muito do próprio sistema operacional uma vez que todos os processos que seria a forma existem formas melhores para tratar disso aí né e uma das formas melhores será estudada então na próxima aula que seria o que seria o assunto de hoje a gente a gente viu essas soluções de dormir e acordar está estudando os mecanismos de exclusão mútuo através de que é dessa solução de dormir acordar e existe
também uma outra solução que seria o que é uma solução usando esse mal que seria o assunto da próxima aula muito obrigado [Música] [Música] [Música] [Música]