MECANISMOS DE SINCRONIZAÇÃO
São mecanismos que garantem a comunicação entre processos concorrentes e o acesso a recursos compartilhados, é fundamental sua implementação em projetos de SO multiprogramável para garantir a integridade e a confiabilidade na execução de Aplicações Concorrentes.
SINCRONIZAÇÃO CONDICIONAL
Sincronização condicional é uma situação onde o acesso ao recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso. Um recurso pode não se encontrar pronto para uso devido a uma condição específica. Nesse caso, o processo que deseja acessá-lo deverá permanecer bloqueado até que o recurso fique disponível.
Um exemplo clássico desse tipo de sincronização é a comunicação entre dois processos através de operações de gravação e leitura em um buffer, onde os processos que geram informações (processos produtores) utilizadas por outros processos (processos consumidores). Nessa comunicação, enquanto um processo grava dados em um buffer, o outro lê os dados, concorrentemente. Os processos envolvidos devem estar sincronizados a uma variável de condição, de forma que um processo não tente gravar dados em um buffer cheio ou realizar uma leitura em um buffer vazio.
Este problema sincronização é conhecido como problema do produtor/consumidor ou do buffer limitado.
APLICAÇÕES
CONCORRENTES
Na década de 1960, com o surgimento dos sistemas multiprogramáveis, passou a ser possível estruturar aplicações de maneira que partes diferentes do código do programa pudessem executar concorrentemente. Este tipo de aplicação, denominada aplicação concorrente, tem como base a execução cooperativa de múltiplos processos ou threads, que trabalham em uma mesma tarefa na busca de um resultado comum.
Em sistemas multiprogramável com um único processador, os processos alternam sua execução segundo critérios de escalonamento estabelecidos pelo Sistema Operacional, mesmo não havendo paralelismo na execução das instruções,