Buscar

Introdução a CSP

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 47 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 47 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 47 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Introdução	a	CSP	
	
Disciplina:	Métodos	formais	2016.2	
Sidney	Nogueira	
(sidney.ufrpe@gmail.com)	
Roteiro	
•  Concorrência,	paralelismo	e	distribuição	
•  Visão	geral	de	CSP	
•  Comunicação	
•  Eventos	e	canais	
•  Operador	de	prefixo	
•  Recursão	
•  Operadores	de	escolha	externa	
•  Exemplos	
Concorrência	
(um	processador)	
CPU	
Cache	
Memória	
Um	único	processador	e		
uma	memória	
Distribuição	
(processadores	conectados	pela	rede)	
Vários	
processadores	e	
memórias.	
Comunicação	
acontece	por	
passagem	de	
mensagens.	
CSP	
•  CommunicaMng	SequenMal	Processes		
•  É	uma	linguagem	de	especificação	formal	projetada	
para	modelar	aplicações	concorrentes	e	distribuídas	
de	forma	simples	e	elegante	
•  Usa	troca	de	mensagens	para	modelar	comunicação		
–  mas	é	possível	simular	comparMlhamento	de	memória	
•  Concebida	por	Tony	Hoare	[85]	e	atualizada	por	Bill	
Roscoe	[97]	
	
CSP	
•  Baseada	em	uma	sólida	teoria	
•  Possui	várias	ferramentas	para	simulação	e	
verificação	de	refinamento	de	forma	automaMca	
–  FDR,	PAT,	Probe,	gCSP,	Casper,	ProB,	etc	
•  Inspirou	linguagens	de	programação:	Occam,	Go,	
Limbo	
•  Inspirou	bibliotecas	para	programação	distribuída	
–  Java	(JCSP,	JTJ)	
–  Scala	(CSO)	
–  C++	(C++CSP2)	
	
CSP	
•  Livro	Communica9ng	Sequen9al	Processes	de	Tony	
Hoare	(1985)	era	o	3o	livro	mais	citado	da	Ciência	da	
Computação	em	2006		
•  Usada	no	mundo	industrial,	exemplos:	
–  Daimler-Benz	Aerospace:	verificação	do	arquitetura	do	
INMOS	T9000	Transputer		
–  Praxis:	verificação	da	segurança	de	smart	cards		
		
CSP	
•  Possui	notação	matemáMca	(uMlizada	nos	livros	e	
arMgos)	
•  Possui	notação	ASCII	uMlizada	por	ferramentas	
–  Exemplo:	CSPM	para	FDR	
•  Vamos	usar	a	notação	CSPM	
Elementos	básicos	de	CSP	
•  A	linguagem	é	composta	por:	
–  Eventos	
–  Processos	
–  Operadores	sobre	processos	
–  Estruturas	de	dados	baseadas	no	paradigma	funcional	
•  É	considerada	uma	álgebra	de	processos	pois	os	
operadores	possuem	propriedades	algébricas:	
–  AssociaMvidade,	comutaMvidade,	distribuMvidade,	
idenMdade,	etc	
Elementos	básicos	de	CSP	
•  Especificação	de	uma	ATM	em	CSPM	
channel incard, outcard: CARD 
channel pin: PINs 
channel req, dispense: WA 
 
 
 
ATM1 = incard?c -> pin!fpin(c) -> 
 req?n -> dispense!n -> 
 outcard.c -> ATM1 
 
Processo	 Evento	
Operador	de	
prefixo	
Declaração	de	
eventos	e	canais	
Processos	
•  Processos	correspondem	a	componentes	de	um	
sistema	distribuído	
•  Cada	processo	possui	seu	próprio	estado	
–  Semelhante	a	um	objeto	
•  Processos	comunicam-se	com	outros	
Comunicação	
•  Realizada	através	de	eventos	de	comunicação	
•  Eventos	são	atômicos,	instantâneos	
•  A	comunicação	ocorre	através	da	sincronização	
entre	dois	ou	mais	processos:	
–  Mesmo	evento	ocorre	em	dois	processos	ao	mesmo	
tempo	
•  Isto	vai	ficar	mais	claro	quando	vermos	o	operador	
de	paralelismo	
Ambiente	
•  Suponha	P1	é	um	processo	CSP,	seu	ambiente	é	
formado	por	todos	os	outros	processos	com	os	quais	
ele	interage	através	do	operador	de	paralelismo.	
–  Ex:	o	ambiente	de	P1	é	P2	e	P3	na	expressão	P1	||	P2	||	
P3	
•  Quando	só	temos	um	processo	P	seu	ambiente	é	
formado	por	um	processo	que	existe	implicitamente	
		
	P	||	Ambiente	
Canal	e	comunicação	
•  Declaração	de	canal	
–  channel ch: T	
•  Expressões	de	comunicação	
–  ch?var para	recebimento	de	dados	(“entrada”)	
–  ch!exp para	“envio”	(”saída”)	de	dados	
–  ch.exp		similar	ao	anterior	
•  ch?(1+x)	é	errado,	porém	ch!(x+1)	ou	ch.(x+1)	são	
corretos	
Comunicação	restrita	
•  A	declaração	a	seguir	é	muito	custosa	para	analisar		
(muitas	possibilidades)	
–  channel ch: Int 
•  Uma	forma	alternaMva	e	mais	restrita	seria	usar	um	
subconjunto	dos	inteiros	
–  channel ch: {1..10} 
Comunicação	restrita	
•  Outra	forma	de	diminuir	o	custo	é	dizer	na	
comunicação	um	subconjunto	
–  Exemplo:	ch?x:{0,1,2} só	permite	a	leitura	de	3	
valores	apesar	do	Mpo	do	canal	ser	inteiro	
•  Outras	possibilidades	
–  ch?x:{x<=10} 
–  ch?x?y:{(x-1)..(x+1)} 
–  ... 
Eventos e alfabetos	
•  αP	denota	o	alfabeto	de	um	processo	P	:	conjunto	de	
todos	os	eventos	comunicados	pelo	processo	
–  Exemplo:	αATM1	=	{req.20,	req.10,	req.30,...,	dispense.10,	
dispense.30,	...}	
•  Σ	denota	o	alfabeto	de	uma	especificação:	a	união	
dos	alfabetos	de	todos	os	processos	(Events	em	FDR)	
Eventos e alfabetos	
•  A	escolha	de	eventos	deve	ser	cuidadosa	para	não	
tornar	o	modelo	analisável	(explosão	de	estados)	
•  Exemplo:	channel tecla : X	pode	ser	
subsMtuido	por	channel tecla quando	o	valor	
da	tecla	pressionada	for	irrelevante	
Eventos	
•  Denotam	acontecimentos	do	mundo	real	relevantes	
para	o	modelo	
•  Exemplos:	
–  Chamadas	de	métodos	
–  Fatos/ações	percepxveis	(computador	travou,	
pressionamento	de	uma	tecla,	etc.)	
–  Sinais	de	sincronização	(espere,	conMnue,	etc)	
Canais	
•  A	diferença	básica	de	canais	para	eventos	é	que	
canais	comunicam	dados	
•  Assim	
–  channel ev (É	um	evento)	
–  channel ch: {0..10}	(É	um	canal)	
Tudo	são	eventos	
•  A	notação	de	canais	é	uma	facilidade	sintáMca	para	
definir	coleções	de	eventos	
•  Assim	o	canal	
–  channel	ch:	Int	
•  Representa	o	conjunto	de	eventos	
–  {…,ch.-2,	ch.-1,	ch.0,	ch.1,	…}	
•  O	operador	{|canal|}	retorna	todos	os	eventos	de	
um	canal	
–  {|ch|}	=	{…,ch.-2,	ch.-1,	ch.0,	ch.1,	…}	
STOP	
•  Representa	um	processo		
–  Em	deadlock,	ou		
–  Quebrado	
•  Processo	sem	aMvidade	interna	e	externa	(parado)	
–  Representa	um	estado	terminal,	de	onde	não	é	possível	
sair	
	
Deadlock	
•  Em	CSP,	o	deadlock	pode	ocorrer	em	duas	situações	
•  Com	o	uso	do	processo	STOP	
–  Pode	representar	uma	quebra	ou	falha	do	sistema	
•  Situação	de	impasse	
–  Acontece	quando	todos	os	processos	entram	um	estado	
de	espera	
–  É	dinâmico	e	deve	ser	evitado	(erro	na	modelagem)	
SKIP	
•  Processo	básico	que	denota	término	com	sucesso	
–  Comunica	√	e	termina	
•  Sucesso	é	representado	pelo	evento	especial	Mck	(√)	
–  Depois	de	Mck	não	aparece	outro	evento	
•  √	não	é	um	evento	que	faz	parte	do	alfabeto	do	
processo	e	não	pode	ser	comunicado	com	operador	
de	prefixo	
–  ∑√	=	∑	∪	{√}	
	P	=	SKIP	é	um	processo	CSP	válido!	
	P	=	√	->	STOP	não	é	válido!	
Prefixo	
•  Operador	usado	para	modelar	comportamento	
sequencial	(->)	
–  ev -> Proc 
•  O	processo	a	->	P	espera	indefinidamente	por	a,	e	
então	comporta-se	como	P	
•  Exemplo:	
–  TwoSteps = leftFoot -> rightFoot -> 
SKIP 
•  Formas inválidas: a -> b, P -> Q	
 
 
 
	
	
 
 
Definindo Processos	
•  Declarando	os	eventos	(ou	canais)	de	comunicação: 
 
channel up, down 
 
•  Definindo	(nomeando)	um	processo	cujo	alfabeto	é	
determinado	pelos	eventos	acima: 
 
P0 = up -> down -> up -> down -> 
STOP 
Definições Recursivas 
 P1 = up -> down -> P1 
 P2 = up -> down -> up -> down -> P2 
•  Definidas	através	de	equações	recursivas	guardadas	
(comunica	ao	menos	um	evento	antes	da	recursão)	
•  UMlizadas	para	processos	que		
–  tem	um	comportamento	repeMMvo	
–  normalmente	não	terminam	
Definições mutuamente recursivas 
 Pu = up -> Pd 
 Pd = down -> Pu 
 
•  Um	processo	não	“chama”	um	outro	processo,	mas	
“comporta-se	como”	um	outro	processo	
Especificação ATM completa 
CARD = {0..9} 
datatype pinnumbers = PIN.Int 
fpin(c) = PIN.c 
PINs = {fpin(c) | c <- CARD} 
WA = {10,20,30,40,50} 
 
channel incard, outcard:CARD 
channel pin:PINs 
channel req, dispense:WA 
 
ATM1 = incard?c -> pin.fpin(c) -> 
 req?n -> dispense!n -> 
 outcard.c -> ATM1 
 
 
 
 
Escolha	DeterminísMca	
•  []é	o	operador	de	escolha	determinísMca	de	CSP	
	
•  O	processo	P [] Q oferece	a	possibilidade	tanto	
de	se	comportar	quanto	P	quanto	como	Q 
•  A	decisão	sobre	P	ou	Q	não	pertence	a	P [] Q,	mas	
de	quem	interage	com	ele	(ambiente,	decisão	
externa)	
Entrada	e	escolha	
req?n -> P 
req.10 -> P[10/n] 
[ ] 
… 
[ ] 
req.50 -> P[50/n] 
Lembre	que	a	declaração	de	req	é		
channel	req	:	{10,20,30,40,50}	
	
A	expressão	req?n	no	processo	ATM1	corresponde	a	
uma	escolha	externa	como	mostrado	a	seguir.	
Escolha	externa	indexada	
[]x:Sigma @ x -> STOP 
a -> STOP 
[ ] 
b -> STOP 
[ ] 
up -> STOP 
[ ] 
down -> STOP 
Quando	não	temos	um	canal,	é	possível	fazer	a	
escolha	usando	os	eventos	de	um	conjunto	
	
Seja	Sigma	um	conjunto	de	eventos	{a,b,up,down}	
declarado	anteriormente	
Processos RUN	
•  Processo	que	comunica	todas	as	sequência	possíveis	
de	eventos	do	conjunto	X	
 
RUN(X) = [] x:X @ x -> RUN(X) 
 
Escolha prefixada 
•  Operador	para	expressar	escolha	externa	indexada	
(usado	no	livro	e	na	explicação	de	semânMca	de	
alguns	operadores)	
 
?x:A -> P(x) 
 
 onde	x	é	uma	variável,	A	um	conjunto	de	eventos,	e	
P(x)	um	processo.	É	equivalente	a 
 [] x:A @ x -> P(x) 
Escolha	prefixada	
c?x -> P 
c.e0 -> P[e0/x] 
[ ] 
… 
[ ] 
c.eN -> P[eN/x] 
	
Seja	c	um	canal	do	Mpo	{e0,	…,	eN},	então	
Máquinas de estados e CSP 
•  Todo	processo	em	CSP	corresponde	a	uma	“máquina	
de	estados”	(ou	LTS)	
–  Labelled	TransiMon	Systems	
•  FDR	verifica	processos	com	um	número	finito	de	
estados	
•  A	opção	:graph	é	usada	em	FDR3	para	desenhar	o	
LTS	do	processo	CSP	
LTS	de	STOP	
Ω	
LTS	de	SKIP	
Ω	SKIP	 √	
LTS	de	Prefixo	(a	->	P)	
P	a	
LTS	da	escolha	determinísMca	
P	a	
Q	
b	
Seja	S = (a -> P)[](b -> Q),	então	
S	
Definições parametrizadas 
•  Corresponde	a	uma	família,	possivelmente	infinita,	de	
definições.	
•  O	processo	a	seguir	conta	o	andar	atual	considerando	
eventos	de	subir	e	descer	um	andar.		A	quanMdade	de	
estados	do	processo	a	seguir	é	infinita.	
COUNT(n)= 
 if n==0 then 
 (up -> COUNT(1)) 
 else 
 (up -> COUNT(n+1) 
 [] 
 down -> COUNT(n-1)) 
Definições parametrizadas 
•  Para	que	FDR	possa	analisar	todos	os	estados	,	
precisamos	limitar	o	processo:	
 LCOUNT(L,n) = 
 (n<L & up -> LCOUNT(L,n+1)) 
 [](n>0 & down -> LCOUNT(L,n-1)) 
onde	
 (cond & P) 
corresponde	a	
 if cond then P else STOP 
 
Traces de um processo 
•  É		conjunto	das	possíveis	sequência	de	eventos	de	
um	processo	
•  Exemplo: O conjunto de traces de COUNT(0) 
{<>, <up>, <up,down>, <up,up>, <up, down, up>, 
<up,up,up,up>, <up,up,down,down>, ...} 
Refinamento de Processos 
•  P [T= Q	significa	que	um processo Q		refina	um	
processo	P. Isto	é	verdade	se	
–  Se Q tem os mesmo traces P, ou, 
–  Se Q tem menos traces do que P	
•  Exemplo: Consider P = COUNT(0) 
COUNT(0) [T= STOP 
COUNT(0) [T= up -> down -> STOP 
not (COUNT(0) [T= down -> STOP) 
 
Refinamento de Processos 
•  RUN	é	refinado	por	qualquer	processo	considerando	
o	refinamento	de	traces	
•  Para	qualquer	processo	P		
–  RUN(Events) [T=	P 
 
Leitura e exercícios 
•  Livro: Theory and Practice of Concurrency 
–  Leitura: 
•  Cap 0 
•  Cap 1 até 1.1.4 (external choice) 
–  Exercícios: 
•  Essenciais: 1.1.1, 1.1.2, 1.1.3 
•  Opcionais: 1.1.5, 1.1.4 
•  Livro: Understanding Concurrency 
–  Leitura: 
•  Cap 1 até 1.2.2

Outros materiais