LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTErogerio/.../CLP20132_ling_logicas_prog_concorr… ·...
Transcript of LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTErogerio/.../CLP20132_ling_logicas_prog_concorr… ·...
LINGUAGENS LÓGICAS E
PROGRAMAÇÃO CONCORRENTE
Adriana Nery
Programação lógica
Paradigma
Predicados
Dedutiva)
Exemplo:
Zé Carioca
baseado no Cálculo de
(Lógica Matemática
é um papagaio.
Todo papagaio é uma ave.
Logo, Zé Carioca é uma ave.
Programação lógica
Programas são declarativos:
especificam resultados desejados em
vez de procedimentos para produzi-los
Semelhança com paradigma funcional
Programação lógica
Separação de lógica e controle:
Lógica: definição do que deve ser solucionado
Controle: como a solução pode ser obtida
Programador escreve definições que permitam
a dedução da solução
Elementos de um programa
Proposições lógicas que formam
fatos conhecidos
uma base de
Regras que definem como deduzir novas
proposições a partir da base
Consultas à base (execução do programa)
Elementos de um programa: exemplo
Proposição (fato)
Zé Carioca é um papagaio.
Regra de inferência
Todo papagaio é uma ave.
Consulta
Zé Carioca é uma ave?
Solução/resposta/resultado Sim
Elementos de um programa: exemplo
Proposições (fatos)
João é pai
João é pai
Consulta
João é pai
de
de
José.
Maria.
de quem?
Solução/resposta/resultado
José
Maria
Elementos de um programa: exemplo
Proposição (fato)
O fatorial de 0 é 1.
Regra
O fatorial de um número
N*fatorial(N-1).
Consultas/Respostas:
O fatorial de 2 é 200?
Resposta: Não
N (N > 0) é igual a
Consulta: Quanto é o fatorial de
Resposta: 6
3?
Bases da programação lógica
Lógica matemática
Álgebra de Boole Descrição de proposições e verificação quanto à validade das mesmas
Cálculo de predicados
Lógica simbólica
Proposições envolvem
operadores lógicos
Cláusulas de Horn:
símbolos e
proposições com forma restrita, 2 partes
Significado Representação
p e q p q p ou q p q p implica q p q
p equivale a q p q
Origens da programação lógica
Lógica matemática, lógica
de predicados
Linguagem Prolog
simbólica e cálculo
Início da década de 70: colaboração entre universidades
Colmerauer e Roussel (Marseille):
processamento de linguagem natural
Kowalski (Edinburgh): prova automatizada de teoremas Desenvolvimento independente a partir de meados de 70
Algumas aplicações
Sistemas especialistas: emulação da habilidade
humana em algum domínio do conhecimento
(ex. medicina)
Sub-sistemas “inteligentes”, por exemplo: jogos: capacidade de derivar novos cenários, comportamentos, etc.
bancos de dados: capacidade de deduzir informações a partir dos dados no banco
Processamento de linguagem natural: chatbots
Educação: ensino de lógica, contribuindo para
pensamento e expressão mais claros
Vantagens e desvantagens
Vantagens
Separação
Programas
entre lógica de programa e controle
fáceis de entender e manter
Desvantagens
Eficiência
Baixa expressividade para certas aplicações
PROGRAMAÇÃO CONCORRENTE
[ O QUE É ]
“Um programa concorrente é um conjunto de
programas seqüenciais comuns que são
executados em um paralelismo abstrato”
(M.Bem-Ari)
PROGRAMAÇÃO CONCORRENTE
[ O QUE É ]
“Um programa concorrente especifica 2 ou mais
processos que cooperam para realizar uma tarefa.
Processos cooperam através de comunicação;
utilizam variáveis compartilhadas ou troca de
mensagens“(G. R. Andrews)
PROGRAMAÇÃO CONCORRENTE
[ MOTIVAÇÃO ]
Aproveitar hardware com múltiplos
processadores
Atender a vários usuários simultaneamente
Melhorar o desempenho das aplicações
Aumentar a disponibilidade para o usuário
Objetos ativos e controle de atividades
Programas paralelos
PROGRAMAÇÃO CONCORRENTE
[ CONCEITOS ]
Paralelismo
Processamento simultâneo físico
Concorrência
Processamento simultâneo lógico (aparente)
Requer entrelaçamento (interleaving) de ações
Processo
Execução de um programa
Programa Concorrente
Vários processos que cooperam para a realização de uma
tarefa
PROGRAMAÇÃO CONCORRENTE
[ CONCEITOS ]
Comunicação Variáveis compartilhadas
Passagem de mensagens
Sincronização Exclusão mútua de seções críticas
Sincronização por condição
Estado de um programa concorrente Consiste dos valores das variáveis (explícitas e
implícitas)
A execução de um comando muda o estado
Ações atômicas Transformação indivisível de estado
PROGRAMAÇÃO CONCORRENTE
[ PROCESSOS ]
Um processo é um programa que está em
algum estado de execução
Tem espaço de endereçamento próprio, que é
mapeado pelo S.O. para memória física
Possui um fluxo de controle ou thread único
Mantém um contador de programa (PC) que
indica o endereço da próxima instrução
A MMU (Memory Management Unit) traduz
os endereços lógicos em endereços físicos, que
normalmente não são contíguos (Memória
Virtual)
PROGRAMAÇÃO CONCORRENTE
[ PROCESSOS ]
Espaço de Endereçamento Lógico
Instruções
Dados Globais
Espaço de Endereçamento
Lógico de um Processo
Pilha
Heap
PROGRAMAÇÃO CONCORRENTE
[ PROCESSOS ]
Tabela de Processos
Estado do processo
Valores dos registradores
Arquivos abertos
Alocação de memória
PID (Process ID)
UID (User ID)
GID (Owner’s Group ID)
PROGRAMAÇÃO CONCORRENTE
[ PROCESSOS ]
Estados de um processo
Executando (Running): Utilizando a CPU
Executável ou Pronto (Runnable ou Ready):
Esperando para ser escalonado para usar a CPU
Suspenso (Suspended): Recebeu um sinal para ser
suspenso
Bloqueado (Blocked): Esperando pela conclusão de
algum serviço solicitado ao S.O.
PROGRAMAÇÃO CONCORRENTE
[ PROCESSOS ]
Executando
Suspenso
Executável
Bloqueado
Encerrado
Iniciado
Ativo
PROGRAMAÇÃO CONCORRENTE
[ THREADS ]
Um processo pode ter mais de uma Thread (Linha)
Cada Thread possui contador de programa e pilha próprios
Quando um processo é escalonado para ser executado, uma das Threads entra em execução
As Threads compartilham as variáveis globais do processo
PROGRAMAÇÃO CONCORRENTE
[ THREADS ]
Espaço de Endereçamento de um Processo
Instruções
Variáveis Globais
Pilha
Heap
Pilha
Contador
de Programa
Thread 1
Pilha
Contador
de Programa
Thread 2
Pilha
Contador
de Programa
Thread n
PROGRAMAÇÃO CONCORRENTE
[ THREADS ]
Vantagens sobre processos compartilhando
memória
São muito mais leves de serem criadas
A troca de contexto é mais suave pois compartilha
instruções, heap e variáveis globais
Facilitam o compartilhamento de memória
THREADS
[ CICLO DE VIDA ]
Criada
Pronta Executando
Esperando
Dormindo
Encerrada
Bloqueada
Operação de E/S iniciada
Término
sleep
wait notify notityAll
Operação de E/S concluída
start
Intervalo de tempo expirou
escalonada
interrompida
THREADS
[ SINCRONIZAÇÃO ]
Sincronizando Threads
Programação com múltiplas Threads requer bastante
cuidado:
Acesso / Atualização de variáveis compartilhadas
Starvation
Deadlock
Acesso a estados inválidos de outros objetos
THREADS
[ SINCRONIZAÇÃO ]
Problema de acesso a variáveis compartilhadas Várias Threads (representando os depósitos dos
clientes) querendo atualizar (depositar um valor) uma mesma conta
Quando uma está lendo o saldo atual, uma outra Thread pode já ter lido esse valor e calculado o novo saldo, mas ainda não ter gravado o novo valor
Se nesse momento a primeira Thread gravar o valor, o saldo final será igual ao calculado pela Thread que gravar o novo valor por último (desconsiderando assim o depósito da Thread que encerrou primeiro).
O ideal é impedir que uma operação de depósito seja iniciada antes da outra encerrar
THREADS
[ SINCRONIZAÇÃO ]
A sincronização baseia-se na idéia de que para acessar um método sincronizado ou um entrar em um bloco sincronizado, é preciso obter (ou já ter) o lock desse objeto.
A Thread que conseguir esse lock é a única autorizada a acessar os recursos protegidos através de sincronização.
PROGRAMAÇÃO CONCORRENTE
[ PROPRIEDADES ]
Safety: O programa nunca entra em um estado inconsistente)
Liveness: Em algum momento o programa entra em um estado consistente
Correção Parcial: Se o programa terminar, o resultado está correto. Caso contrário, nunca pode dar o resultado correto
Término: O programa termina eventualmente
Ausência de Deadlock: Nunca todos os processos estarão bloqueados
Correção Total: O programa sempre termina e produz o resultado correto
OBRIGADA