Arquitetura de sistemas operacionais
Aplicação concorrente
Com o surgimento dos sistemas multiprogramáveis passou a ser possível estruturar aplicações concorrentes que são múltiplos processos ou threads que fazem parte de uma mesma tarefa.
Mesmo não havendo paralelismo em um sistema multiprogramável com um único processador, uma aplicação concorrente pode obter desempenho melhor. O paralelismo em sistemas com múltiplos processadores aumenta as vantagens da aplicação concorrente.
Os processos de uma aplicação concorrente compartilham recursos do sistema, e muitas vezes necessitam se comunicar entre si, o que pode ocasionar problemas na execução. Com execuções sincronizadas a partir de mecanismos do sistema operacional, também chamados de mecanismos de sincronização, esse problema pode ser evitado.
Figura [ 1 ]. Sincronização e Comunicação entre Processos.
A figura acima mostra um exemplo onde dois processos concorrentes compartilham um buffer para trocar informações através de operações de gravação e leitura, cada processo só poderá gravar dados do buffer caso o mesmo não esteja cheio, e só poderá ler dados caso exista algum.
Em ambas as situações, gravação e leitura, os processos deverão aguardar até o buffer ficar pronto para a operação.
Especificação de Concorrência em programas
Existem várias notações utilizadas para especificar as partes de um programa que devem ser executadas concorrentemente. A primeira notação foram os comandos FORK e JOIN.
O comando FORK faz com que seja criado um outro processo para a execução concorrente. O comando JOIN permite a sincronização, ou seja, quando um primeiro programa encontrar o comando JOIN só continuará a ser processado após o término da execução de um segundo programa. Uma das formas mais simples de expressar concorrência é a utilização dos comandos PARBEGIN e PAREND, posteriormente chamados de COBEGIN e COEND.
O comando PARBEGIN especifica que a seqüência de comandos