Guido
Prof. Leonardo Botega, M.Sc.
Processos
2.2 Comunicação e Sincronização entre
Processos
2.2.1 Especificação de Execução Concorrente
Algumas formas de se expressar uma execução concorrente
(usadas em algumas linguagens e sistemas operacionais)
• Co-rotinas
• Declarações FORK/JOIN
• Declarações
COBEGIN/COEND
• Declarações de
Processos Concorrentes
Sistemas Operacionais
2
Processos
❚ Co-Rotinas
❙ As co-rotinas são parecidas com sub-rotinas (ou procedimentos), diferindo apenas na forma de transferência de controle, realizada na chamada e no retorno ❙ As co-rotinas possuem um ponto de entrada, mas pode representar diversos pontos intermediários de entrada e saída ❙ A transferência de controle entre eles é realizada através do endereçamento explícito e de livre escolha do programador (através de comandos do tipo
TRANSFER)
Sistemas Operacionais
3
Processos
Funcionamento das Sub-rotinas comuns
Programa P
...
...
Call A
...
...
End
Sub-Rotina A
...
...
Call B
...
...
Return
Guarda endereço da instrução após
Desempilha último o Call (pilha) endereço de retorno e desvia para sub-rotina Guarda endereço da instrução após o Call (pilha) e desvia para sub-rotina Sistemas Operacionais
Sub-Rotina B
...
...
...
...
...
Return
Desempilha último endereço de retorno
4
Processos
Funcionamento das Co-Rotinas
Co-Rotina P
...
...
Transfer(P,A)
...
...
End
Co-Rotina A
...
...
Transfer(A,C)
...
...
Transfer(A,C)
Co-Rotina B
...
...
Transfer(B,A)
...
...
Transfer(B,P)
Sistemas Operacionais
Co-Rotina C
...
...
Transfer(C,B)
...
...
Transfer(C,B)
5
Processos
❚ Declarações FORK/JOIN
❙ A declaração FORK determina o início de execução de um determinado programa, de forma concorrente com o programa sendo executado.
❙ Para sincronizar-se com o término do programa chamado, o programa chamador deve executar a
declaração