LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTErogerio/.../CLP20132_ling_logicas_prog_concorr… ·...

Post on 04-Jul-2020

3 views 0 download

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