Sincronização de Redes
- Introdução
Há processos que trabalham juntos (concorrentes) e compartilham recursos do sistema, como arquivos, registros, dispositivos e áreas de memória. Não importa quais recursos são compartilhados, pois problemas causados por essa interação serão os mesmos e geralmente o compartilhamento entre processos podem gerar situações indesejáveis, capazes de comprometer o sistema. Os mecanismos que garantem a comunicação entre processos concorrentes e o acesso a recursos compartilhados são chamados mecanismos de sincronização.
- Especificação de Concorrência em Programas
Nos projetos de sistemas operacionais multiprogramáveis, é necessário a inclusão de mecanismos de sincronização que garantam sua integridade e confiabilidade. Sendo que, existem várias notações para especificar as partes de um programa que devem ser executadas concorrentemente. As técnicas mais recentes expressam uma forma mais estruturada e clara de se identificar, como os comandos FORK e JOIN, introduzidas por Conway_1 e Dennis_1, por exemplo:
PROGRAMA A; PROGRAMA B;
-
-
FORK B; -
-
-
JOIN B; END.
-
END.
O programa A começa a ser processado e, ao encontrar o comando FORK, faz com que seja criado um outro processo para a execução do programa B, concorrente ao A. O comando JOIN permite que o programa A, sincronize-se com o B, ou seja quando o programa A encontrar o comando JOIN, só continuará a ser processado após o término do B. Os comandos FORK e JOIN são bastante poderosos e práticos, sendo utilizados de forma semelhante no sistema operacional Unix, além de serem implementados em algumas linguagens de programação, como PL/I.
Uma maneira simples para expressar a concorrência em um programa é a utilização dos comandos PARBEGIN e PAREND de Dijkstra_1, por exemplo:
PARBEGIN Comando_1; Comando_2; - - - Comando_n;
PAREND
O comando PARBEGIN especifica que a seqüência de comandos seja executada