Sei sulla pagina 1di 40

Modelagem de Sistemas Computacionais usando Redes de

Petri: aplicação em projeto, análise e avaliação

Dulcinéia Oliveira da Penha1, Henrique Cota de Freitas2, Carlos Augusto Paiva da


Silva Martins3
2,3
Instituto de Informática, 1,3Programa de Pós-graduação em Engenharia Elétrica
1,2,3
Laboratório de Sistemas Digitais e Computacionais
Pontifícia Universidade Católica de Minas Gerais
Rua Dom José Gaspar 500 – 30.535-610 – Belo Horizonte – MG – Brasil
1
dulcineia@pucmg.br,(2cota,3capsm}@pucminas.br

Abstract. In this tutorial we present the concepts and essential characteristics


of the Ordinary Petri Nets, its algebraic and graphical representations,
definitions and properties. Moreover, we present some high level Petri Nets,
as the Coloured Petri Nets and the Stochastic Petri Nets. Later, we present the
modeling of trivial problems using Petri Nets, methods and tools of validation
and verification of Petri Nets and the application of Petri Nets in problems
related with computational systems modeling. Finally, we present and we
analyze the main advantages, disadvantages and challenges of the application
of Petri Nets in the computational systems modeling.

Resumo. Neste minicurso apresentamos os conceitos e características


essenciais das Redes de Petri Ordinárias, suas representações algébricas e
gráficas, definições e propriedades Além disso, apresentamos algumas Redes
de Petri de alto nível, como as Redes de Petri Coloridas e as Redes de Petri
Estocásticas. Posteriormente, apresentamos a modelagem de problemas
triviais usando redes de Petri, métodos e ferramentas de validação e
verificação de Redes de Petri e a aplicação de Redes de Petri em problemas
relacionados com a modelagem de sistemas computacionais. Finalmente,
apresentamos e analisamos as principais vantagens, desvantagens e desafios
da aplicação de Redes de Petri na modelagem de sistemas computacionais.

1. Introdução
Em 1962, o então aluno de doutorado Carl Adam Petri defendeu sua tese intitulada
Kommunikation mit Automaten (Communication with Automata) [Petri 1962]. Seu
objetivo era desenvolver um modelo em que as máquinas de estado fossem capazes de
se comunicar. A característica principal alcançada por este modelo foi a possibilidade
de representar a concorrência. Este modelo recebeu o nome de Redes de Petri em
homenagem ao próprio autor e hoje podemos encontrar variações do modelo original
sendo usados em diversas áreas da ciência para ajudar no estudo do comportamento e
desempenho de diferentes sistemas. Podemos encontrar as Redes de Petri (RdP) [Girault
2002] [Desel 2000] [Maciel 1996] [Murata 1989] [Peterson 1981] [Peterson 1977]
sendo utilizadas em áreas como economia, biologia, engenharia, computação, entre
outras.
As variações de RdP tais como Redes de Petri Coloridas, Temporizadas ou
Estocásticas são modelos importantes e que não fazem parte da teoria original. No
entanto, são representações que ganharam relevância por serem capazes de modelar
sistemas de forma mais simplificada ou intuitiva ou simplesmente porque ainda não
havia um modelo capaz de representar sistemas que envolviam temporizações ou
comportamentos probabilísticos (estocásticos).
Antes de apresentar os conceitos e elementos que compõem a Rede de Petri é
importante responder uma pergunta: Por que precisamos modelar um sistema
computacional [Jain 1991]?
• Torna-se mais fácil o entendimento do funcionamento ou comportamento
de um sistema computacional existente?
• O projeto do sistema computacional pode ser verificado e validado
através de um modelo antes da construção de um protótipo?
• A avaliação do funcionamento, comportamento e por conseqüência do seu
desempenho em relação a um histórico de projeto ou em relação a outros
modelos de sistema existentes, também em fase de projeto é facilitada?
• É possível definir métricas de desempenho através do modelo?
São várias as respostas para justificar a modelagem de um sistema
computacional. Podemos afirmar que o uso de um modelo facilita e justifica o
prosseguimento de novas etapas de projeto e análise antes da etapa final de avaliação.
Entre estas etapas podemos citar uma diretamente dependente da existência física do
sistema e que muitas vezes só deve ser realizada após uma fase anterior de validação,
antes do protótipo ser construído:
• Medição: A medição depende da existência física do sistema ou protótipo
do sistema. Você implementaria seu sistema antes de verificá-lo através de
um modelo? É como programar sem projetar o algoritmo!
Imagine que o sistema a ser medido (uma coleta de dados para avaliação de
resultados) é um aglomerado (cluster) de computadores [Buyya 1999] [Almasi 1994].
Qual o custo financeiro para montar este cluster? Este cluster foi modelado
anteriormente? Existe uma verificação/validação anterior à montagem do protótipo
(cluster de servidores)?
Existem alguns modelos analíticos e de simulação [Bressan 2002] [Jain 19991]
para validação de um projeto. As Redes de Petri fazem parte destes dois modelos.
Podemos representar uma Rede de Petri através de descrições matemáticas e gráficas.
Podemos também simular uma Rede de Petri através de ferramentas específicas de
simulação [Drath 2004]. Existe um repositório de informações e simuladores de Redes
de Petri que pode ser encontrado através da seguinte referência: [Petri Nets 2004].
O principal objetivo deste minicurso é apresentar conceitos, difundir
conhecimentos e apresentar métodos e ferramentas para verificação/validação relativos
a aplicação e modelagem de Redes de Petri em sistemas computacionais de forma
simples e direta. Alguns modelos do nosso dia-a-dia são utilizados para facilitar o
estudo do processo de modelagem em suas etapas principais. Pretendemos difundir as
RdP como uma alternativa e um forte modelo de ajuda no processo de avaliação do
comportamento e do desempenho de um sistema computacional.

2. Redes de Petri
O principal objetivo deste tópico é apresentar as principais características das Redes de
Petri. Existem conceitos que não serão apresentados, mas que serão facilmente
encontrados nas referências citadas ao longo do texto. No entanto, procuramos sintetizar
um grande volume de informações importantes e necessárias para o processo de
modelagem de sistemas computacionais enquanto fase de projeto, análise ou avaliação.

2.1. Conceitos Básicos


Por que as Redes de Petri se tornaram um importante modelo para representar diferentes
sistemas? Uma Rede de Petri possui um conjunto de elementos capaz de descrever as
diversas partes de um sistema que estamos habituados a tratar em Ciência da
Computação [Hennessy 2003] [Tanenbaum 2003a, 2003b] [Buyya 1999] [Almasi 1994]
[Jain 1991], tais como: concorrência, controle, conflitos, sincronização e
compartilhamento, por exemplo.
Portanto, para tratar concorrência, controle, conflitos, sincronização e
compartilhamento não seria importante um modelo para representar a ocorrência destas
características em um sistema?
Uma Rede de Petri é composta pelos seguintes elementos:
• Lugares ou Places: representam uma condição, uma atividade ou um
recurso.
• Fichas, Marcas ou Tokens: representam o estado de um sistema.
• Transições: representam um evento.
• Arcos: indicam os lugares de entrada ou saída para as transições.
Estes elementos podem ser representados graficamente como na figura 1:

Figura 1. Elementos de uma Rede de Petri

Portanto, ainda sem considerarmos a existência dos tokens, podemos definir uma
Rede de Petri como R = (P, T, AE, AS) onde:
• P = {P1, P2, ..., Pm} é um conjunto de places.
• T = {T1, T2, …, Tn} é um conjunto de transições.
• P ∩ T = ∅ os conjuntos P e T são disjuntos.
• AE: P x T é o conjunto de arcos de entrada nas transições.
• AS: T x P é o conjunto de arcos de saída das transições.
Para a figura 1 temos:
• P = {Place 1, Place 2}
• T = {Transição}
• AE = {Place 1, Transição}
• AS = {Transição, Place 2}
Qual a influência dos tokens em uma Rede de Petri?
Quando modelamos um sistema através de Redes de Petri procuramos
representar os estados antes e depois de cada evento neste sistema. O elemento
responsável por indicar qual o estado de uma Rede de Petri é um token (marca).
Portanto, é de se esperar que uma Rede de Petri possua uma marcação inicial [Girault
2002] [Bressan 2002] [Murata 1989], que pode ser descrita através da seguinte notação,
tomando como exemplo a figura 1:
• M = (1, 0) Sendo que o primeiro campo representa a quantidade de
tokens no Place 1 e o segundo campo a quantidade de tokens no Place 2.
A marcação inicial faz parte do projeto do modelo, uma falha na definição da
marcação inicial pode resultar em um modelo inconsistente ou com falhas de execução.
Além da marca (token) presente dentro de um place, possuímos um peso
associado a cada arco. Este peso é muito importante e muitas vezes é necessário durante
o projeto do modelo. A figura 2 ilustra uma outra Rede de Petri com pesos associados
aos arcos.

Figura 2. Rede de Petri com peso nos arcos

A figura 2 ilustra os pesos associados a cada arco, no entanto podemos perceber


que para esta figura (2a e 2b) existem dois momentos / estados distintos, um estado em
que os places P1 e P2 possuem tokens e outro que somente o place P3 possui um ou
dois tokens. Portanto, podemos considerar que existem duas marcações: uma inicial e
outra final.
• Marcação inicial para a figura 2a: M = (1, 1, 0)
• Marcação final para a figura 2a: M = (0, 0, 2)
• Marcação inicial para a figura 2b: M = (1, 1, 0)
• Marcação final para a figura 2b: M = (0, 0, 1)
Com base na figura 2, podemos responder duas perguntas:
• O que ocasionou o segundo estado da Rede de Petri ou a marcação final?
• Por que a marcação final da figura 2a é diferente da figura 2b?
A resposta da primeira pergunta é a seguinte: A função de uma transição é
representar um evento, ou seja, a transição é responsável por modificar a marcação de
uma Rede de Petri, portanto, modificar o estado de uma Rede de Petri. Esta ocorrência
só é válida quando existem tokens nos places de entrada de uma transição. Sendo assim,
se eu quiser modificar o estado ou a marcação de uma Rede de Petri, basta disparar as
transições existentes. Na figura 2a e 2b, a transição T1 foi disparada e neste momento
os tokens dos places de entrada P1 e P2 foram responsáveis por habilitar este disparo.
Como resultado de um disparo, os tokens dos places de entrada são retirados e novos
tokens são colocados nos places de saída. A diferença na quantidade de tokens da
marcação de saída entre as figuras 2a e 2b é baseada nos pesos dos arcos. Portanto, o
peso no terceiro arco responde a segunda pergunta. Na figura 2a o peso do terceiro arco
é 2 e por este motivo chegam ao place P3 dois tokens. Na figura 2b o peso do terceiro
arco é 1. Este peso impõe um limite e somente um token é colocado no place P3 após o
disparo da transição. Porém, existem situações que podem impedir o disparo de uma
transição. As figuras 3 e 4 ilustram esta situação.

Figura 3. Situação 1 para não ocorrência de um disparo

Por que a transição T1 não pode ser disparada? Para o disparo de uma transição
deve haver tokens em todos os places de entrada. Na figura 3 o place P2 não possui
tokens e por este motivo a transição T1 não pode ser disparada.

Figura 4. Situação 2 para não ocorrência de um disparo

Para a Rede de Petri da figura 4 o problema está associado aos pesos dos arcos
de entrada da transição T1. Os pesos dos arcos de entrada da transição indicam quantos
tokens são necessários para o disparo da transição. No caso da figura 4 são necessários 3
tokens em dois places. Como podemos ver, nesta figura os places possuem apenas 1
token cada um, seria necessário que o place P2 tivesse dois tokens, porque é exatamente
este place que possui um arco com peso 2 até a transição T1. Portanto, permanecendo
desta forma, esta rede nunca mudará seu estado ou marcação inicial. Se esta Rede de
Petri fosse o modelo que representasse um determinado sistema, haveria um erro de
modelagem. Conforme já descrevemos a marcação inicial é muito importante e pode
influenciar na execução do modelo.
Uma vez que já abordamos os conceitos relativos à marcação e ao peso de um
arco, podemos apresentar uma definição mais completa das Redes de Petri:
• R = {P, T, A, PA, M0) onde:
P = {P1, P2, ..., Pm} é o conjunto de places.
T = {T1, T2, …, Tn} é o conjunto de transições.
P ∩ T = ∅ ∧ P ∪ T ≠ ∅ os conjuntos P e T são disjuntos e não
vazios.
A: (P x T) ∪ (T x P) é o conjunto dos arcos.
PA: A N são os pesos dos arcos.
M 0: P N0 é a marcação inicial.
Em uma RdP existe uma situação chamada de conflito [Girault 2002] [Maciel
1996] [Murata 1989], encontrada quando modelamos atividades concorrentes. Para esta
situação damos o nome de Confusion. Muitas vezes, para representar a concorrência ou
atividades conflitantes, conforme será visto no tópico 5, é necessário modelar situações
chamadas de Confusion. Um exemplo de conflito está ilustrado na figura 5.
A situação apresentada na figura 5 é muito simples. Existem duas transições que
para estarem habilitadas precisam de 1 token em cada uma de suas entradas. O problema
é que o place de entrada é único, P1 está compartilhado entre as duas transições e
possui apenas um token e não dois como seria necessário. Nos resta fazer a seguinte
pergunta: Qual transição será disparada, T1 ou T2? Esta escolha será aleatória já que
não existe nenhuma prioridade de uma transição em relação à outra.No entanto, se
atribuíssemos funções a cada uma das transições, poderíamos ter uma situação típica de
if e else.

Figura 5. Exemplo de uma RdP com conflito

Podemos descrever uma Rede de Petri através de uma notação matricial e


também por uma árvore de alcançabilidade. Estes dois conceitos são mostrados nos
tópicos 2.2 e 2.3.
2.2. Notação Matricial
A notação matricial [Bressan 2002] é uma das formas de representar uma Rede de Petri.
Como exemplo vamos analisar a rede da figura 6.

Figura 6. Uma Rede de Petri exemplo para notação matricial

A notação matricial pode ser feita usando três tipos de matrizes, sendo elas as
seguintes:
• Matriz de entrada (E): ETxP representa a quantidade de arcos de entrada em
cada transição.
• Matriz de saída (S): STxP representa a quantidade de arcos de saída em
cada transição.
• Matriz de Incidência (I): ITxP = STxP – ETxP
As matrizes referentes à figura 6 estão ilustradas através da figura 7.

Figura 7. Notação matricial para o exemplo da figura 6

Através da notação matricial é possível modelar uma Rede de Petri


graficamente, podemos extrair a quantidade de places, transições e arcos. No entanto,
somente estes elementos não são suficientes para um modelo completo. Como já vimos,
ainda faltam os tokens e os pesos.
Os tokens são solucionados através da marcação inicial. Portanto, é necessário
informar M0. Qual é a marcação inicial da figura 6?
Resposta: M0 = (1, 1, 0, 0)
Quais são os pesos de cada arco?
Resposta: A principio cada arco possui peso igual a 1. No entanto, para
responder será feito outra pergunta: Qual a diferença entre as RdP da figura 8?

Figura 8. RdP exemplo para descoberta do peso na notação matricial

As duas RdP são iguais. A diferença está apenas na representação gráfica. A


matriz de saída terá a linha T1 mudada para (figura 9):

Figura 9. Mudança da linha T1 da notação matricial de saída da figura 7

Ou seja, para a figura 8b os pesos são sempre 1 em cada arco, para a figura 8a o
peso é representado com se fossem dois arcos de saída da transição T1.

2.3. Árvore de Alcançabilidade


Quantos estados ou marcações são possíveis extrair de uma Rede de Petri? Que tipo de
notação pode ser utilizado para representar cada uma destas marcações?
Uma árvore de alcançabilidade [Bressan 2002] [Murata 1989] é capaz de
responder estas duas perguntas. Através de uma árvore com raiz igual à marcação
inicial é possível representar todas as marcações alcançáveis. É importante ressaltar que
o conjunto de alcançabilidade pode ser finito, no entanto, é comum encontrarmos
situações onde as marcações alcançadas não nos levam a um estado inicial, ou à
marcação inicial, a raiz de nossa árvore.
Portanto, o conjunto de alcançabilidade só é finito se em algum momento uma
determinada marcação nos levar novamente à marcação inicial.
A RdP da figura 10 é um exemplo de conjunto finito de marcações. A árvore de
alcançabilidade desta rede está ilustrada na figura 11. O estado inicial é representado
pela marcação M0 (2, 0, 0, 0), e portanto, esta é a nossa raiz. Durante a construção da
árvore deve ser observado quais são as transições habilitadas para disparo para criação
de cada nó (nova marcação).
Figura 10. Rede de Petri exemplo para árvore de alcançabilidade

A situação da figura 11 é a seguinte:


• Após a definição da raiz, devemos observar quais transições estão
habilitadas.
• Somente a transição T1 está habilitada e a marcação resultante é M1(0, 1,
0, 0).
• O place P2 não recebeu dois tokens porque o arco de saída de T1 tem peso
1.
• A próxima transição habilitada é T4 resultando em uma marcação M2(0, 0,
1, 1).
• Neste momento possuímos duas marcações habilitadas, T2 e T3 resultando
em um nível com dois nós (marcações M3 e M4).
• Se dispararmos T2 a marcação resultante será M3 (1, 0, 0, 1).
• Se dispararmos T3 a marcação resultante será M4 (1, 0, 1, 0).
• No momento em que RdP chega ao estado M3 ou M4 passamos a ter dois
places com tokens (M3: P1 e P4 ou M4: P1 e P3), porém, a transição T1
não ficará habilitada enquanto o place P1 não tiver dois tokens. Esta
situação só vai acontecer quanto houver o disparo de T3 ou T4 resultando
novamente no estado inicial M0.

Figura 11. Árvore de alcançabilidade da RdP da figura 10


Esta RdP possui um conjunto de alcançabilidade finito com cinco marcações
(M0, M1, M2, M3, M4).

2.4. Variações das Redes de Petri


Desde o trabalho original de Carl Adam Petri têm surgido muitas e diversas variantes ao
seu modelo de redes de Petri. Pode-se afirmar que a maior parte destas variantes nasceu
da necessidade de adaptação das RdP Ordinárias (ou de baixo-nível – estudadas até
agora) à especificidade da aplicação para as quais a sua utilização era desejada. O
modelo original das Redes de Petri falha na representação de duas importantes
características: aspectos funcionais complexos, tais como, condições que determinam o
fluxo de controle, e os aspectos de temporização. Para enfrentar estas duas limitações
duas classes de extensões as RdP foram desenvolvidas: as RdP de alto-nível e as RdP
temporizadas. Estas extensões serão apresentadas nos tópicos a seguir. No tópico das
redes de alto nível, enfatizamos as Redes de Petri Coloridas, já que formam a categoria
mais representativa e mais usada das Redes de Petri de alto nível.

2.4.1. Redes de Petri Temporizadas


Até o momento estudamos RdP com transições que disparam a desde que os places de
entrada possuam tokens suficientes para a ocorrência do disparo. No entanto, pode ser
necessário associar ao disparo um retardo. Sendo assim, para cada transição atribuímos
um valor de tempo. Esta RdP é chamada de Rede de Petri Temporizada Determinística.
Existe uma outra RdP Temporizada Probabilística (Estocástica), que será estudada no
tópico 2.4.2.
Portanto, em relação as RdP Temporizadas [Bressan 2002] [Murata 1989]
podemos extrair os seguintes significados:
• Tempo de aquisição de um recurso.
• Tempo de utilização de um recurso.
• Tempo em que não necessita de um recurso.
Vejamos o seguinte exemplo da figura 12:
• A transição T1 temporizada em 1 segundo.
• A transição T2 temporizada em 5 segundos.
• As transições T3 e T4 não estão temporizadas.

Figura 12. Exemplo de RdP temporizada


Para este exemplo podemos extrair as seguintes observações:
• A transição T1 está temporizada para disparar em 1s, sempre que existir
um token em sua entrada (token no place P2).
• A transição T2 está temporizada para disparar em 5s, sempre que existir
um token em sua entrada (token no place P2).
• Durante os 4 primeiros segundos a transição T1 estará habilitada. No
quinto segundo as transições T1 e T2 estarão habilitadas e haverá um
conflito de disparo.
A principal vantagem de uma RdP temporizada é a relação de tempo, que antes
não havia. No entanto, trabalhar com uma RdP temporizada significa poder alterar a
definição de estado da rede. A relação de tempo altera os estados/marcações
alcançáveis. Por este motivo, é muito importante saber utilizar o tempo na RdP para que
seu projeto ou modelo não entre por exemplo em um deadlock.

2.4.2. Redes de Petri Estocásticas e Redes de Petri Estocásticas Generalizadas


Redes de Petri Temporizadas Determinísticas são vantajosas para modelagem de
sistemas onde a relação de tempo é constante ou determinística, já que associam a cada
transição um retardo (ou duração) fixo entre o tempo em que ela está habilitada e o
tempo de disparo. No entanto, redes temporizadas determinísticas não são suficientes
para modelar sistemas estocásticos, que possuem taxas aleatórias. Sistemas de produção
onde o tempo de funcionamento real entre 2 paradas de uma máquina é aleatório são um
exemplo destes sistemas. Outro exemplo são sistemas computacionais com taxas
aleatórias de geração de processos. Para estes casos as Redes de Petri Ordinárias foram
estendidas para modelarem sistemas estocásticos. As Redes de Petri Estocásticas [Haas
2002] [Bressan 2002] associam uma distribuição exponencial ao tempo de disparo de
cada transição habilitada da rede. Dessa forma, a rede passa a ser probabilística, sendo
descrita por um processo estocástico.
Formalmente, uma Rede de Petri Estocástica é definida por:
• RdP-E = {P, T, A, PA, M0, D} onde:
P (conjunto de places), T (conjunto de transições), A (conjunto de
arcos), PA (pesos dos arcos) e M0 (marcação inicial) são definidos
exatamente como nas Redes de Petri Ordinárias descritas
anteriormente.
D: conjunto das taxas de disparo associadas às transições que
obedecem a uma distribuição exponencial. Tais taxas de disparo
podem ter o seu valor dependente da marcação. A dependência da
taxa de disparo da transição j sobre uma marcação M é denotada por
Dj(M).
Em muitos sistemas, não é necessário associarem-se tempos a todos os eventos,
e conseqüentemente a todas as transições da Rede de Petri Estocástica. As Redes de
Petri Estocásticas generalizadas (RdP-EG) incluem transições que não gastam tempo
para disparar, particionando as transições em dois conjuntos: transições imediatas e
transições temporizadas.
Transições imediatas, uma vez habilitadas, disparam em tempo zero. Transições
temporizadas disparam com tempos aleatórios, descritos por distribuições exponenciais.
Nas RdP-EG as taxas de disparo estão associadas somente às transições temporizadas.
A definição formal da RdP-EG é semelhante à das Redes de Petri Estocásticas,
diferenciando somente no conjunto D das taxas de disparo, que nas RdP-EG são
associados somente às transições temporizadas, e não mais a todas as transições como
na RdP Estocásticas.
Uma RdP Estocástica é isomórfica a uma Cadeia de Markov (CM) [Haas 2002]
[Norris 1998] [Bolch 1998] finita e de tempo contínuo, na qual as marcações são os
estados da cadeia e as taxas de transição de estado da cadeia são retiradas das médias de
tempo de disparo das transições da rede. Portanto, a marcação M(t) da RdP Estocástica
é um processo markoviano homogêneo.
O conjunto de alcance da Rede de Petri Estocástica é o mesmo de sua
correspondente ordinária (Rede de Petri que resulta ao se retirarem os tempos
associados às transições), o que facilita a sua análise.

2.4.3. Redes de Petri Coloridas


O principal objetivo das Redes de Petri Coloridas (RdP-C) [Girault 2002] [Maciel 1996]
é a redução do tamanho do modelo, permitindo que tokens individualizados (coloridos)
representem diferentes processos ou recursos em uma mesma sub-rede. Inicialmente, os
tokens das RdP Coloridas eram representados por cores ou mesmo por padrões que
possibilitam a distinção dos tokens. Em trabalhos mais recentes, os tokens são
representados por estruturas de dados complexas não relacionando cores aos tokens, a
não ser pelo fato de estes são distinguíveis. Deste modo, os tokens podem conter
informações. Além disso, cada place armazena tokens de um certo tipo definido e arcos
realizam operações sobre os tokens. As transições são consideradas “expressões de
guarda”.
Uma RdP-C é composta por três partes: estrutura, inscrições e declarações. A
estrutura é um grafo direcionado, com dois tipos de nós (places e transições), com arcos
interconectando nós de tipos diferentes. As inscrições são associadas aos places,
transições e arcos.
• Cada place tem as seguintes inscrições: Nome (para identificação); Color
Set (especificando os tipos de tokens que podem residir no place);
Marcação inicial (multi-conjunto de tokens coloridos).
• Cada transição tem as seguintes inscrições: Nome (para identificação);
Guarda (expressão booleana contendo algumas das variáveis).
• Cada arco tem as seguintes inscrições: Expressão do arco (contendo
algumas das variáveis).
As declarações são tipos, funções, operações e variáveis. Quando a expressão do
arco é avaliada, ela gera um multi-conjunto de tokens coloridos. Expressões podem
conter constantes, variáveis, funções e operações definidas nas declarações, e não
produzem efeito colateral.
Formalmente, uma Rede de Petri Colorida é definida por:
• RdP-C = (R, Σ , C, G, E, I) onde:
R = {P, T, A} exatamente como definidos nas Redes de Petri
Ordinárias descritas anteriormente.
Σ: conjunto de tipos não-vazios chamados cores,
C: função de cor definida por P cor,
G: função de guarda definida por T exp, onde exp é uma
expressão tal que: ∀ ti ∈ T | Tipo(G(t)) = Boolean ∧
Tipo(Var(G(t))) ∈ Σ],
E: função de expressões de arco definida por A expressões, tal
que: ∀ a ∈ A | Tipo (E(a)) = C ∧ Tipo(Var(E(a))) ∈ Σ],
I: expressão de inicialização definida por P marcações0(p), tal
que: ∀ pi ∈ P | Tipo(I(p)) = C(p) ∧ Var(I(p)) = ∅. Var(t) é o
conjunto de variáveis associadas à transição t. Essas variáveis
podem ser associadas às transições de duas maneiras: nas
expressões de guarda (G(t), t ∈ T) e nas expressões dos arcos (E(a),
a ∈A) que interconectam lugares e transições.

2.4.3.1. Definição formal do comportamento:


• A distribuição de tokens é uma função M: P Σ e uma marcação de uma
Rede de Petri Colorida é uma distribuição de tokens. A marcação inicial
das redes coloridas é obtida através da avaliação da expressão de
inicialização para cada place da rede, ou seja, M0(p) = I(p) <> ∀ p ∈ P.
• A distribuição de ligações é uma função Y: T B. Denomina-se elemento
de Y o par (t, b), onde b é uma ligação tal que b ∈ Y (t).
• Variáveis são ligadas (binding) dinamicamente aos valores dos tokens nos
places de entrada, durante a avaliação de cada transição.
Cada possível ligação é avaliada, uma por vez, em ordem aleatória.
Todas as ocorrências de uma variável devem ser ligadas a uma
mesma cor.
Variáveis associadas a diferentes transições são totalmente
independentes.
• Um passo é um multi-conjunto de elementos ligados ou uma distribuição
de ligações não-vazia.
Um passo Y é habilitado em uma marcação M se a seguinte
propriedade é satisfeita: ∀ p ∈ P: ∑(t,b) ∈ Y E(p,t) <b> ≤ M(p), ∀ p ∈
P.
Quando um passo Y é habilitado em uma marca M1 ele pode ocorrer,
mudando a marcação M1 para outra marcação M2, definida por: ∀ p
∈ P: M2(p) = (M1(p) – ∑(t,b) ∈Y E(p,t)<b>) + ∑(t,b) ∈Y E(t,p)<b>, onde
E(p,t) e E(t,p) correspondem às expressões dos arcos de entrada e
saída da transição (em t) do passo, respectivamente.
Em outras palavras, um passo Y = (t, b) está habilitado quando o
número de marcas de cores correspondente à ligação do passo é
maior ou igual à avaliação da expressão do arco que interliga os
lugares de entrada à transição t.
A primeira soma é chamada de remoção de marcas (dos lugares de
entrada) enquanto a segunda é chamada de adição de marcas (aos
lugares de saída). Além disso, dizemos que M2 é diretamente
alcançável de M1 pela ocorrência do passo Y, no qual denotamos:
M1 [Y > M2.
• Uma seqüência de ocorrência é uma seqüência de marcações e passos:
M1 [ Y1 > M2 [ Y2 > M3 ... Mn [ Yn > Mn+1 tal que Mi [ Yi > Mi+1
para todo i ∈ 1...n é alcançável de M.
A Figura 13 apresenta um exemplo simplificado de Rede de Petri Colorida
[Maciel 1996], onde os tokens são identificados apenas por cores. Entretanto, os tokens
podem ser estruturas mais complexas. Como podemos observar no exemplo da Figura
13, os arcos são rotulados com cores (a, b e c). Para que uma transição desta rede esteja
habilitada, é necessário que os places de entradas desta transição tenham tokens do tipo
(cor) associado ao arco que liga estes places à transição. A transição t0 não está
habilitada porque não há um token da cor a no place p0. A transição t1 está habilitada
porque há um token da cor a no place p1 e tokens das cores a e b no place p2,
satisfazendo as condições rotuladas nos arcos que saem destes places, ligando-os à
transição t1. O disparo desta transição retira os tokens de cores associadas aos arcos dos
places de entrada e adiciona tokens da cor associada ao arco que liga a transição aos
places de saída. Deste modo, um token de cor c é acrescentado ao place p4.

Figura 13. Exemplo de Rede de Petri Colorida [Maciel 1996]

2.4.3.2. Análise das Redes de Petri Coloridas


Análise de Alcançabilidade:
Árvore de alcançabilidade:
•Organiza todas as marcações alcançáveis, e todas as possíveis seqüências de
disparo, em uma árvore, onde:
Cada nó corresponde a uma marcação alcançável
Cada arco corresponde a um disparo de uma (única) transição, para
uma (única) cor, pela qual a marcação de origem é levada à
marcação de destino.
•Em geral possui número muito grande (talvez infinito) de elementos.
Redução da Árvore de Alcançabilidade:
•Árvores de alcançabilidade geralmente possuem classes de marcações
equivalentes.
•Para cada classe de equivalência, somente a sub-árvore de um dos nós é
desenvolvida, enquanto os demais tornam-se folhas da árvore.
•Marcações de cobertura:
Seja P o conjunto dos lugares da rede, e sejam m1 e m2 duas
marcações, tais que m1 [ σ > m2:
m2 cobre m1 se:
∀ p ∈ P, m2(p) ≥ M1(p)
m2 cobre estritamente m1 se:
m2 cobre m1, e m1 ≠ m2
Se m2 cobre estritamente m1, cada coeficiente que foi
incrementado de m1 para m2 pode assumir um valor ilimitado e,
portanto, é substituído pelo símbolo ω.
Há perda de informação.
•Marcações duplicatas:
Se há vários nós com marcações idênticas, apenas a árvore de um
deles é desenvolvida, e os demais são marcados como duplicatas.
Não há perda de informação.
•Marcações equivalentes:
Generalização de duplicata, para Redes de Petri de Alto Nível:
O projetista identifica relações de simetria entre cores nas
marcações.
Não há perda de informação.

2.5. Propriedades das Redes de Petri


Neste tópico procuramos mostrar um breve sumário das propriedades [Maciel 1996]
comportamentais e estruturais relacionadas às Redes de Petri.
2.5.1. Propriedades Comportamentais (influenciadas pela marcação)
Alcançabilidade: Indica a possibilidade de alcançarmos um determinado
conjunto de marcações após disparos de transições a partir de uma marcação inicial.
Limitação: Uma RdP pode ser dita como k-limitada. Em uma RdP 3-limitada,
nenhum dos places pode exceder o número de tokens definido por k, neste caso, três.
Segurança: A propriedade de segurança é um complemento à propriedade
limitação. Um place k-limitado é um place seguro. Se estivermos modelando uma porta
lógica, a RdP dever ser 1-limitado. A RdP é segura se em todos os seus estados os
places tiverem um ou nenhum token (1 ou 0 - binário).
Vivacidade: Uma RdP livre de impasses (deadlocks). Neste caso não existe a
ocorrência de uma transição que não possa ser disparada. Uma transição morta é uma
transição que não pode mais ser disparada. Uma RdP morta se encontra em impasse
total, ou seja, todas as transições estão mortas.
Cobertura: Quando uma determinada marcação pode ser obtida através de uma
outra marcação. Este é o problema cobertura de uma marcação.
Persistência: Se para qualquer par de transições habilitadas, o disparo de uma
delas não desabilita o disparo da outra.
Reversibilidade: Quando existe o retorno à marcação inicial ou uma outra
marcação qualquer.
Justiça: Diz respeito à quantidade de disparos de uma transição em relação à
outra.

2.5.2. Propriedades Estruturais (não influenciadas pela marcação)


Limitação: Se a RdP é limitada estruturalmente para qualquer marcação inicial.
Conservação: Independente dos disparos das transições existentes na RdP, o
número de tokens não se altera (não há criação ou destruição).
Repetitividade: Uma RdP é repetitiva se para uma determinada marcação e um
conjunto de disparos de transições, houver o disparo ilimitado de todas as transições da
RdP.
Consistência: Uma RdP é consistente se for possível voltar ao estado inicial M0
disparando pelo menos uma vez todas as transições da RdP.

3. Modelagem Usando Redes de Petri


O objetivo deste tópico é apresentar as etapas necessárias para modelagem de
problemas tipicamente triviais do nosso dia-a-dia.
Para iniciar o processo de modelagem precisamos responder a seguinte
pergunta: Você conhece o sistema que será modelado?
Antes do processo de modelagem é necessário analisar o sistema objeto de
estudo. Seria um erro dos mais inocentes acreditar em um pré-conhecimento sem o
devido estudo e análise do sistema. Analisar um sistema significa entender o
funcionamento de todas as partes que o compõem, e mais do isso, significa entender se
todo o sistema ou apenas uma parte deve ser modelado. O não conhecimento do sistema
pode produzir um modelo que não reflete a realidade e, portanto, não verifica e não
valida o sistema em análise.
As etapas que iremos descrever constituem uma base para modelagem usando
Redes de Petri, são elas:
• Definir uma lista de condições: estados, places de sua RdP.
• Definir uma lista de ações: transições de sua RdP.
• Criar matrizes de entrada e de saída para representar as relações entre
transições e places.
• Representar graficamente uma RdP para cada transição.
• Unir todas as RdP por transição em uma RdP completa, que represente o
sistema modelado.
• Definir a marcação inicial da RdP.

3.1. Modelar o comportamento de ligar e desligar uma lâmpada


O seguinte sistema deve ser modelado: possuímos uma lâmpada e precisamos modelar
seu comportamento de ligar e desligar usando Redes de Petri.
Primeira etapa: Definir uma lista de condições (Tabela 1).
Segunda etapa: Definir uma lista de ações (Tabela 1).
Tabela 1. Lista de condições e ações para comportamento de uma lâmpada
Lista de condições Lista de ações
P1: Lâmpada desligada. T1: Ligar lâmpada.
P2: Lâmpada ligada. T2: Desligar lâmpada
Criar matrizes de entrada e saída para representar relações entre transições e
places (Tabela 2 e Tabela 3).
Tabela 2. Matriz de entrada Tabela 3. Matriz de saída

P1 P2 P1 P2
T1 1 0 T1 0 1
T2 0 1 T2 1 0

Representar graficamente uma RdP para cada transição (figura 14).

Figura 14. RdP para cada transição das tabelas 2 e 3

O modelo completo já como a marcação inicial está representado na figura 15.


Marcação inicial: M0(1,0).
Figura 15. Modelo completo em RdP para o comportamento da lâmpada

Antes de finalizar este exemplo, vamos fazer duas perguntas: Este modelo está
completo? Ele reflete a realidade?
Este modelo não está considerando o tempo de vida da lâmpada após os
sucessivos ligar e desligar. Como podemos modelar, considerando mais este elemento
do sistema? Vamos supor que em média as lâmpadas possam ser ligadas 4 vezes
(apenas um exemplo) e depois elas queimam. Sendo assim, o novo place P3
representaria Tempo de vida (não estamos falando de transições temporizadas).
O modelo ficaria da seguinte forma (figura 16):

Figura 16. Modelo completo em RdP considerando também tempo de vida

3.2. Modelar um sistema de corrida de dois carros


Um grupo de pilotos decidiu testar dois carros de corrida para saber qual era o mais
rápido. Basicamente o sistema [Girault 2002] era composto por:
• Dois carros de corrida.
• Um fiscal de bandeirada para iniciar a corrida.
Quando o fiscal recebe sinal dos dois carros (sinal de pronto), ele dá a
bandeirada para iniciar a corrida. As listas de condições e ações são apresentadas
através da tabela 4.
Tabela 4. Lista de condições e ações para a corrida dos dois carros

Lista de condições Lista de ações


P1: Carro A preparando para iniciar. T1: Enviar sinal de pronto (carro A).
P2: Carro A esperando para iniciar. T2: Iniciar corrida (carro A).
P3: Carro A correndo. T3: Enviar sinal de início (fiscal).
P4: Sinal de pronto do carro A. T4: Enviar sinal de pronto (carro B).
P5: Sinal de início para carro A. T5: Iniciar corrida (carro B).
P6: Fiscal esperando pelos sinais de pronto. ------------------------------------------------
P7: Fiscal enviando sinal de início (bandeirada). ------------------------------------------------
P8: Sinal de pronto do carro B. ------------------------------------------------
P9: Sinal de início para o carro B. ------------------------------------------------
P10: Carro B preparando para iniciar. ------------------------------------------------
P11: Carro B esperando para iniciar. ------------------------------------------------
P12: Carro B correndo. ------------------------------------------------
As matrizes de entrada e saída que relacionam as condições e as ações estão
ilustradas através das tabelas 5 e 6.
Tabela 5. Matriz de entrada para a corrida dos dois carros

P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12


T1 1 0 0 0 0 0 0 0 0 0 0 0
T2 0 1 0 0 1 0 0 0 0 0 0 0
T3 0 0 0 1 0 1 0 1 0 0 0 0
T4 0 0 0 0 0 0 0 0 0 1 0 0
T5 0 0 0 0 0 0 0 0 1 0 1 0
Tabela 6. Matriz de saída para a corrida dos dois carros

P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12


T1 0 1 0 1 0 0 0 0 0 0 0 0
T2 0 0 1 0 0 0 0 0 0 0 0 0
T3 0 0 0 0 1 0 1 0 1 0 0 0
T4 0 0 0 0 0 0 0 1 0 0 1 0
T5 0 0 0 0 0 0 0 0 0 0 0 1
A figura 17 ilustra a representação gráfica da RdP por transição.

Figura 17. RdP para cada transição das tabelas 5 e 6

O modelo completo da RdP com a marcação inicial M (1, 0, 0, 0, 0, 1, 0, 0, 0, 1,


0, 0) está ilustrado na figura 18.
Figura 18. RdP completa para o sistema de corrida entre dois carros

3.3. Modelagem usando Redes de Petri Coloridas


Quando um sistema é grande e complexo, a sua modelagem através de Redes de Petri
Ordinárias vai gerar uma rede grande e complexa. Nestes casos, é indicado o uso de
Redes de Petri Coloridas que permitem a redução do tamanho dos modelos.
Primeiramente modelaremos um sistema de linha de manufatura usando Redes
de Petri Ordinárias e em seguida, modelaremos o mesmo sistema usando Redes de Petri
Coloridas.

3.3.1. Linha de Manufatura usando Redes de Petri Ordinárias


O sistema a ser modelado é o de manufatura de dois produtos distintos através de duas
linhas de manufatura, onde as máquinas são compartilhadas no processo de fabricação.
Os produtos são fabricados através de dois processos distintos, P e Q. O processo P é
dividido em seis estágios (p1, p2, p3, p4, p5, p6) e o processo Q é dividido em cinco
estágios (q1, q2, q3, q4, q5). Além disso, temos duas máquinas r e s, que são recursos
compartilhados entre os processos. Portanto, o sistema é composto por:
• Seis estágios do processo P.
• Cinco estágios do processo Q.
• Duas máquinas compartilhadas entre os processos.
As listas de estados e ações estão descritas na tabela 7.

Tabela 7. Lista de estados e ações para a linha de manufatura

Lista de condições Lista de ações


P1: Executando estágio 0 do processo P. T1: Iniciar estágio 1 de P.
P2: Executando estágio 1 do processo P. T2: Iniciar estágio 2 de P.
P3: Executando estágio 2 do processo P. T3: Iniciar estágio 3 de P.
P4: Executando estágio 3 do processo P. T4: Iniciar estágio 4 de P.
P5: Executando estágio 4 do processo P. T5: Iniciar estágio 5 de P.
P6: Executando estágio 5 do processo P. T6: Iniciar estágio 1 de Q.
P7: Executando estágio 0 do processo Q. T7: Iniciar estágio 2 de Q.
P8: Executando estágio 1 do processo Q. T8: Iniciar estágio 3 de Q.
P9: Executando estágio 2 do processo Q. T9: Iniciar estágio 4 de Q.
P10: Executando estágio 3 do processo Q. T10: Reiniciar processo P.
P11: Executando estágio 4 do processo Q. T11: Reiniciar processo Q.
P12: Máquina r disponível. -----------------------------------------
P13: Máquina s disponível. -----------------------------------------
As matrizes de entrada e saída que relacionam as condições e as ações estão
ilustradas através das tabelas 8 e 9.

Tabela 8. Matriz de entrada para a linha de manufatura

P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13


T1 1 0 0 0 0 0 0 0 0 0 0 0 0
T2 0 1 0 0 0 0 0 0 0 0 0 1 0
T3 0 0 1 0 0 0 0 0 0 0 0 0 0
T4 0 0 0 1 0 0 0 0 0 0 0 0 1
T5 0 0 0 0 1 0 0 0 0 0 0 0 0
T6 0 0 0 0 0 0 1 0 0 0 0 1 0
T7 0 0 0 0 0 0 0 1 0 0 0 0 0
T8 0 0 0 0 0 0 0 0 1 0 0 0 1
T9 0 0 0 0 0 0 0 0 0 1 0 0 0
T10 0 0 0 0 0 1 0 0 0 0 0 0 0
T11 0 0 0 0 0 0 0 0 0 0 1 0 0

Tabela 9. Matriz de saída para a linha de manufatura

P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13


T1 0 1 0 0 0 0 0 0 0 0 0 0 0
T2 0 0 1 0 0 0 0 0 0 0 0 0 0
T3 0 0 0 1 0 0 0 0 0 0 0 1 0
T4 0 0 0 0 1 0 0 0 0 0 0 0 0
T5 0 0 0 0 0 1 0 0 0 0 0 0 1
T6 0 0 0 0 0 0 0 1 0 0 0 0 0
T7 0 0 0 0 0 0 0 0 1 0 0 1 0
T8 0 0 0 0 0 0 0 0 0 1 0 0 0
T9 0 0 0 0 0 0 0 0 0 0 1 0 1
T10 1 0 0 0 0 0 0 0 0 0 0 0 0
T11 0 0 0 0 0 0 1 0 0 0 0 0 0

A figura 19 ilustra a representação gráfica da RdP por transição.


Figura 19. RdP para cada transição das tabelas 8 e 9

O modelo completo da RdP com a marcação inicial M0 (2, 0, 0, 0, 0, 0, 1, 0, 0, 0,


0, 2, 1) está ilustrado na figura 20.

Figura 20. Rede de Petri Ordinária para o sistema de manufatura

Esta rede modela um sistema de manufatura com dois processos compartilhando


duas máquinas. A adição de um novo processo compartilhando as mesmas máquinas
exigiria que a rede modelasse todos os estágios desse novo processo, através de estados,
ações e relações entre este processo e os dois já existentes, e entre este processo e os
recursos disponíveis. Percebemos então que, aumentando o número de processos, a
Rede de Petri que modela o sistema crescerá significativamente. Neste caso, é
interessante usar Redes de Petri Coloridas, que reduziria significativamente o tamanho
da rede e a tornaria escalável através da alteração apenas da marcação inicial e da
função dos arcos. A estrutura continua a mesma.

3.3.2. Linha de Manufatura usando Redes de Petri Coloridas


A figura 21 apresenta a RdP Colorida que modela o sistema de manufatura da figura 20.
Na rede colorida, os estágios de produção de cada produto são unificados (s0, s1, s2, s3,
s4, s5) e representados através de places comuns. Nesta rede, os tokens de cores (tipos)
distintas diferenciam os processos. Do mesmo modo, as máquinas (recursos) foram
unificadas em um mesmo place e as cores (tipos) dos tokens distinguem a máquina.

Figura 21. Rede de Petri Colorida para o sistema de manufatura [Maciel 1996]

O conjunto de cores que representam os processos é da cor Proc*I, onde Proc =


p|q e I = INT. As cores associadas ao place recurso (máquinas) correspondem às
máquinas disponíveis sendo rec = r|s. As expressões de inicialização dos places não-
marcados são omitidas. As funções de inicialização dos places são:
s0 = 2’(p,0) s1 = 1’(q,0) recurso = 2’r + 1’s
Deste modo, o place s0 possui dois tokes, onde a cor do processo é p e o zero
corresponde ao número de iterações realizadas. As marcas inicialmente disponíveis no
place recurso são dois tokens da cor r e um da cor s.
Inicialmente, as transições t0 e t1 estão habilitadas. Para que transição s1 seja
disparada a variável x do arco que liga o place recurso a s1 recebe um token da cor q,
sendo associado ao arco o valor 2’r. O disparo de t1 remove um token da cor (q,0) do
place s1 e dois tokens da cor 2’r do place recurso.

4. Métodos e Ferramentas de Validação e Verificação de Redes de Petri


Conforme descrevemos na Introdução, existem modelos analíticos, de simulação e
medição enquanto processo de projeto, análise e avaliação de um sistema
computacional [Jain 1991]. Destes três, apenas o modelo de medição exige que o
sistema exista fisicamente. As Redes de Petri podem ser utilizadas como ferramentas de
validação e verificação através dos modelos analíticos e de simulação conforme
veremos a seguir:
O modelo analítico para RdP pode ser dividido em três métodos de análise
[Murata 1989]:
• Análise por enumeração: Este método está baseado no uso de árvores de
alcançabilidade ou grafos de alcançabilidade. Conforme descrito no tópico
2.3, é construída uma árvore com raiz igual à marcação inicial da RdP e a
partir do disparo de cada transição habilitada são encontradas as
marcações (folhas) alcançáveis. O grafo de alcançabilidade pode ser
modelado considerando os nós como as marcações, e as arestas como os
disparos de transições.
• Análise por matriz de incidência e equação de estado: É possível
descrever RdP através de equações algébricas. Neste material não
abordamos equações algébricas, mas matrizes foram discutidas no tópico
2.2.
• Análise por redução ou decomposição (transformações): Em alguns casos
é possível reduzir o tamanho de uma RdP para uma composição mais
simples. Este método deve ser aplicado quando for possível manter as
propriedades que se pretende analisar. Podemos dividir este método em
seis partes ilustrado através da figura 22.
a) Fusão de places em série.
b) Fusão de transições em série.
c) Fusão de transições em paralelo.
d) Fusão de places em paralelo.
e) Eliminação de places em loop.
f) Eliminação de transições em loop.

Figura 22. Método de análise por redução ou decomposição [Murata 1989]

Outro modelo muito importante durante o uso das Redes de Petri é a simulação.
Entre as vantagens da simulação podemos citar as seguintes:
• Efeitos das animações e gráficos ajudam no aprendizado e entendimento
do sistema simulado.
• Permite manter um maior controle sobre o experimento, o que muitas
vezes não é possível no sistema real.
• Permite estudar o sistema durante o longo período de tempo simulado.
Na URL http://www.daimi.au.dk/PetriNets/tools/complete_db.html [Petri Nets
2004] podemos encontrar uma lista completa de vários simuladores de Redes de Petri
disponíveis comercialmente e gratuitamente. No tópico 4.1 descrevemos o simulador
Visual Object Net ++, desenvolvido por um grupo de pesquisadores alemães.

4.1. Ferramenta de simulação Visual Object Net ++


É muito difícil encontrar uma ferramenta de simulação de Redes de Petri que suporte
todas as variações encontradas sobre RdP. Algumas ferramentas se limitam a simular
apenas RdP Ordinárias, outras apenas RdP Estocásticas e etc.
O simulador Visual Object Net ++ (VisObjNet) é bastante simples e oferece
uma interface fácil de usar. Suas características básicas são:
• Suporta Redes de Petri Temporizadas.
• Suporta elementos discretos e contínuos.
• Não suporta Redes de Petri Coloridas e Estocásticas.
• Análise simples de desempenho.
• Configuração de velocidade de simulação.
• Possui um editor gráfico.
• Animação de tokens.
Este simulador foi desenvolvido para máquinas com sistema operacional
Windows. Para instalar, basta descompactar o arquivo obtido através da homepage do
simulador (http://www.systemtechnik.tu-ilmenau.de/~drath/visual_E.htm) [Drath 2004].
É possível encontrar simuladores mais completos, porém costumam ser
simuladores comerciais. Esta é uma boa lacuna para ser preenchida! Alguém se habilita
a desenvolver um simulador de RdP Temporizadas, Coloridas e Estocásticas?

4.1.1. Guia de utilização do VisObjNet


O principal objetivo deste tópico é apresentar o VisObjNet [Drath 2004], algumas de
suas interfaces e como simular uma Rede de Petri.
Este simulador apresenta suporte a elementos discretos e contínuos. No entanto,
não estaremos simulando uma RdP contínua. Algumas observações a respeito destes
elementos:
• Transição contínua: Seu disparo pode estar associado a um valor constante
ou a uma função
• Place contínuo: Possui tokens com valores reais.
A figura 23 ilustra a interface principal o VisObjNet, dividida em 4 módulos:
• Menu: funções associadas à gerencia de arquivos, tais como abrir e salvar,
e botões de acesso rápido para representação gráfica das Redes de Petri.
• Properties: Módulo referente às propriedades de cada elemento da Rede
de Petri. Neste módulo podemos alterar questões como quantidade de
tokens em um place e peso de um arco, por exemplo.
• Factory: Possui um breve tutorial e opções rápidas para acessar ou deletar
arquivos.
• Edição: Tela onde são construídas as Redes de Petri.

Figura 23. Interface principal do VisObjNet

As figuras 24 e 25 ilustram o módulo “Properties”. Marcando um elemento no


módulo de edição, as propriedades deste aparecerão conforme ilustrado na figura 24. Se
for necessário informações a respeito de todos os elementos da RdP, basta escolher uma
das opções relativas a cada elemento, conforme ilustrado na figura 25.
Através do módulo de propriedades podemos alterar os seguintes parâmetros
para cada elemento:
• Places: Nome, variável (pode ser usada em funções), tipo (discreto ou
contínuo), quantidade de tokens iniciais, visibilidade do rótulo e tamanho.
• Transições: Nome, atraso (temporização ou função no caso de elemento
contínuo), tipo (discreto ou contínuo), cor, visibilidade do rótulo, tamanho,
prioridade e Reservation.
• Arcos: Peso, visibilidade do rótulo e tipo (normal, inhibitor e static test
arc). Maiores informações sobre os tipos de arcos podem ser encontradas
em [Maciel 1996].

Figura 24. Interface das propriedades dos places, transições e arcos

Figura 25. Interface de informações relativas aos places, transições e arcos

A figura 26 ilustra a opção para início de uma simulação.


Entre os botões de acesso rápido que existem no primeiro módulo de interface,
existe o botão Start. Este botão abre uma nova interface de botões para gerenciar a
simulação. A função de cada botão é a seguinte:
• Step: Usando este botão, a RdP será simulada através de passos. Será
sempre necessária a intervenção do usuário apertando este botão. Somente
as transições habilitadas serão disparadas a cada passo.
• Run: A RdP será simulada sem prazo de tempo definido para parar.
Enquanto houver uma transição habilitada para disparo a rede continuará
sendo simulada.
• Run to event: É necessário um evento provocado pelo usuário. A inserção
de um token em um determinado place provoca o início da simulação.
• Stop: Pára a simulação. Este botão não impede a continuação da simulação
a partir do estado em que foi finalizada.
Figura 26. Simulando a execução de uma RdP (comportamento da lâmpada)

A figura 27 ilustra o módulo de interface de opções. Neste módulo é possível


encontrar campos de configuração (os dois últimos campos ainda não foram projetados)
referentes aos seguintes itens:
• Representação: Tipo de grid.
• Simulação: Tempo de simulação para mudança de um estado (100ms é o
padrão) e tipo de animação.
• Performance: Análise simplificada de desempenho.

Figura 27. Interface de opções

5. Aplicação de Redes de Petri em Sistemas Computacionais


Como apresentamos ao longo do texto, as Redes de Petri são um importante modelo
para modelagem de sistemas, em particular de sistemas computacionais. O principal
motivo disso são as propriedades inerentes às redes de Petri que facilitam a modelagem
de características típicas dos problemas de computação como concorrência, controle,
conflitos, sincronização, compartilhamento, entre outros.
Neste tópico apresentaremos exemplos de modelagem de sistemas
computacionais usando Redes de Petri Ordinárias, Coloridas e Estocásticas. Ao
contrário dos exemplos apresentados no tópico 3, neste tópico não apresentaremos todas
as fases de modelagem dos sistemas. Apresentaremos o modelo (Rede de Petri)
completo, suas condições e ações. Nos modelos usando Redes de Petri Coloridas são
usadas diferentes linguagens para as inscrições da rede.

5.1. Semáforo
Um típico problema computacional é o caso de comunicação entre processos
concorrentes [Tanenbaum 2003b], que compartilham um recurso do sistema. O
compartilhamento pode gerar situações indesejáveis. Uma das soluções para problemas
de compartilhamento é o uso de semáforo. Um semáforo é uma variável inteira não
negativa que é manipulada por instruções de down e up. O semáforo indica quando o
recurso associado a ele está sendo utilizado por um dos processos concorrentes:
• S > 0: nenhum processo está utilizando o recurso
• S = 0: processo impedido de utilizar o recurso
A Região crítica é uma área do processo onde é realizado o acesso ao recurso
compartilhado.
Neste exemplo apresentamos a rede que modela dois processos concorrendo por
um recurso e usando um semáforo para resolver os problemas de compartilhamento
[Bressan 2002]. Os processos são p e q. Cada um possui 3 estados (p1, p2, p3, q1, q2, q3).
O terceiro estado de cada processo (p3, q3) é referente a região crítica (recurso
compartilhado). O semáforo é representado pelo estado R (Recurso). A figura 28
apresenta a Rede de Petri Ordinária que modela um semáforo.

Figura 28. Rede de Petri Ordinária que modela um semáforo

5.2. Produtor/Consumidor
A relação Produtor/Consumidor [Tanenbaum 2003b] é uma situação bastante comum
em sistemas computacionais. Nesta situação dois processos compartilham um buffer de
tamanho fixo. O produtor insere informação no buffer e o consumidor retira informação
do buffer. Existem dois problemas em questão: primeiro se o produtor quer inserir, mas
o buffer está cheio, e segundo se o consumidor quer retirar, mas o buffer está vazio.
Os estados do sistema são: esperando para produzir, esperando para consumir,
produzindo item, colocando item no buffer, retirando item do buffer, consumindo item,
tamanho do buffer, buffer. As ações são: produzir item, preparar para colocar item no
buffer, colocar item no buffer e produzir novo item, retirar do buffer, consumir item,
consumir novo item [Bressan 2002] [Desel 2000] [Silva 2000].
A marcação inicial da rede possui um token no place do início do processo
produtor (esperando para produzir) e um token no place do início do processo
consumidor (esperando para consumir). Além disso, possui m tokens no place tamanho
do buffer, onde m é igual ao tamanho do buffer. A figura 29 apresenta a rede que
modela um sistema Produtor/Consumidor usando Redes de Petri Ordinárias.

Figura 29. Rede de Petri Ordinária que modela um sistema Produtor/Consumidor

5.3. Modelo de máquina PRAM


Em um sistema PRAM (Parallel Random Access Machine) [Almasi 1994], cada
processador tem acesso à memória compartilhada do sistema. Deste modo, a
comunicação entre os processos é realizada através de acessos à memória comum do
sistema. O sistema PRAM é um tipo de semáforo (Exemplo 5.3.), tendo a memória
como recurso compartilhado. No PRAM acessos à memória são gerados por cada
processador. Para modelar um gerador de acessos para cada RAM (Random Access
Machine) usamos redes de Petri temporizadas [Penha 2004]. Os estados da rede são:
Gerador de Acessos de P1, Gerador de Acesso de P2, P1 esperando para acessar a
memória, P2 esperando para acessar a memória, P1 acessando memória, P2 acessando
memória, Memória disponível.
A Figura 30 apresenta a Rede de Petri temporizada que modela um sistema
PRAM (Parallel Random Access Machine) EREW (Exclusive Read/Exclusive Write)
com dois processadores (RAMs).
A geração de acessos em máquinas paralelas é aleatória. Como este exemplo usa
redes de Petri temporizadas, para que a geração seja aleatória foi necessário fazer uma
adaptação na geração de acessos, acrescentando uma transição na geração de acessos.
Portanto, as ações da rede são: Gerar processo P1, Não gerar processo P1, Gerar
processo P2, Não gerar processo P2, Acessar memória para P1, Acessar a memória para
P2, Liberar a memória de P1, Liberar a memória de P2.
A marcação inicial da rede possui um token no place Memória Disponível (já
que o sistema só pode realizar uma operação na memória por vez - EREW) e nos
Geradores de Acessos de cada processador.
Como podemos perceber, o uso de Redes de Petri Ordinárias ou Temporizadas
para modelar este sistema não foi o mais adequado. Primeiro porque a geração de
acessos é um processo estocástico e o modelo usando redes temporizadas não reflete
adequadamente este comportamento estocástico, apesar da transição inserida para
geração aleatória de acessos. Neste caso, o tipo de Rede de Petri mais adequada é a
Estocástica. Além disso, o modelo não é escalável. O aumento do número de
processadores provocaria um aumento significativo na rede, tanto nos estados, quanto
nas transições e nos arcos. Portanto, a modelagem de um sistema PRAM seria mais
adequada utilizando Redes de Petri Coloridas e Estocásticas.

Figura 30. Rede de Petri temporizada para o sistema PRAM [Penha 2004]

5.4. Protocolo de comunicação


Uma área muito importante atualmente é a de protocolos de comunicação [Tanenbaum
2003a]. E as redes de Petri são muito úteis na modelagem e análise desses protocolos.
Neste exemplo vamos usar Redes de Petri Ordinárias para modelar um protocolo de
comunicação simples com um transmissor e um receptor. O transmissor envia uma
mensagem para o receptor, o receptor recebe então a mensagem e envia um ack para o
transmissor. Este tipo de protocolo também é conhecido como simplex stop-and-wait e
sua descrição pode ser encontrada na referência [Tanenbaum 2003a]. De uma maneira
geral é realizado um controle de fluxo, ou seja, para o transmissor enviar o próximo
pacote, é necessário que o receptor envie uma confirmação, um feedback ou
simplesmente um ack. Não são considerados possíveis erros durante uma transmissão.
A figura 31 apresenta a Rede de Petri que modela este protocolo simples de
comunicação [Maciel 1996]. Os estados, ações e marcação inicial podem ser observados
na figura.

Figura 31. Rede de Petri Ordinária de um protocolo simples de comunicação


Um outro protocolo de comunicação que também está descrito na referência
[Tanenbaum 2003a] é o simplex para um canal com ruído. Neste caso, é considerada
uma situação normal onde existem erros. Portanto, os quadros podem ser danificados ou
simplesmente perdidos. A figura 32 ilustra o modelo de Redes de Petri para este
protocolo [Tanenbaum 2003a].

Figura 32. Rede de Petri Ordinária de um protocolo simplex para canal com ruído
Neste protocolo o que diferencia um quadro recebido do próximo quadro é o
número de seqüência de tamanho igual a um bit, portanto, seq. 0 ou seq. 1 conforme
descrito na figura 32. Já que estamos considerando as possíveis perdas de quadros, são
utilizadas as transições Perder seq. 0, Perder seq. 1 e Perder Ack, que poderão de forma
aleatória perder os quadros de seqüência 0 ou 1 ou um quadro de confirmação (Ack). É
importante ressaltar que, os places Seq. 0 na linha, Seq. 1 na linha e Ack na linha estão
em uma situação de conflito, já que existem saídas para mais de uma transição,
confirmando portanto, as condições aleatórias das transições descritas acima.

5.5. Pipeline
O paralelismo pipelined [Hennessy 2003] explora os aspectos temporais das aplicações
paralelas. Um sistema pipeline é composto por um determinado número de estágios que
podem ser executados simultaneamente. Quando um estágio i encerra sua atividade, este
transfere o resultado obtido para o próximo estágio i+1 e aguarda novos dados do
estágio anterior i-1. Os dados a serem processados são passados de estágio a estágio
seqüencialmente. Deste modo, a comunicação entre os estágios é restrita aos estágios
vizinhos.
Neste exemplo, modelamos um sistema pipeline simples [Maciel 1996] , com
duas unidades funcionais. Para que um dado seja processado, a unidade deve estar
ociosa. Ao receber dado na entrada, a unidade funcional A processa o dado e envia para
a entrada da unidade funcional B. A unidade funcional A pode então receber novos
dados. A unidade funcional B, ao receber o dado processado por A, termina o
processamento e envia o resultado para a saída do sistema.
Portanto, os estados do sistema são: Entrada do sistema (p0), entrada da unidade
funcional A vazia (p3), entrada da unidade A bloqueada (p1), saída da unidade A vazia
(p4), saída da unidade A bloqueada (p5), unidade A processando (p2), entrada da
unidade B vazia (p8), entrada da unidade A bloqueada (p7), transferência de dado entre
a unidade A e a unidade B (p6), entrada da unidade B (p10), unidade B processando
(p9), saída da unidade B (p11), saída do sistema (p12).
As ações do sistema são: ler entrada da unidade A (t0), unidade A processa dado
(t1), escrever resultado na saída da unidade A (t2), iniciar transferência de dado da
unidade A para a unidade B (t4), finalizar processo de transferência de dado entre A e B
(t3), unidade B processa dado (t5), escrever resultado na saída da unidade B (t6),
escrever dado na saída do sistema (t7).
Um token no place p0 indica que existe dado a ser processado pelo sistema. A
transição t0 só está habilitada quando houver informação disponível e a unidade A
estiver habilitada para efetuar a leitura do dado. A transição t1 só pode ser disparada se
houver dado na entrada da unidade A (place p1) e se a saída desta unidade estiver
habilitada (p4). A figura 33 apresenta a rede que modela este sistema pipeline.

Figura 33. Rede de Petri Ordinária de sistema pipeline de duas unidades funcionais

5.6. Sistema FIFO


A Figura 34 apresenta uma Rede de Petri de alto nível bastante simples que modela um
sistema de filas do tipo FIFO (First In-First Out) [Tanenbaum 2003b]. O sistema FIFO
consiste de uma fila de elementos de dados, onde elementos podem ser adicionados ou
removidos. Os elementos são adicionados no final da fila e removidos do início da fila.
Deste modo, o primeiro elemento a entrar é o primeiro a sair.

Figura 34. Rede de Petri de alto nível para o sistema FIFO [Barros 1996]
A Rede de Petri de alto nível não tem necessariamente tokens coloridos, mas
tokens como tipos de dados. No entanto, a rede possui inscrições. Os estados da rede
são: elemento a ser adicionado na fila (A1), elemento adicionado na fila (A2), elemento
a ser removido da fila (R1), elemento removido da fila (R2) e a fila propriamente dita.
As ações da rede são: adicionar elemento na lista e remover elemento da lista.

5.7. Jantar dos Filósofos


Neste exemplo apresentamos a rede que modela um típico problema de computação: o
jantar dos Filósofos [Tanenbaum 2003b]. Para iniciar nossos estudos na modelagem de
sistemas computacionais com Redes de Petri Coloridas apresentamos um modelo
usando Redes de Petri Ordinária e sua evolução para uma Rede de Petri Colorida
[Barros 1996] [Maciel 1996].

5.7.1 Jantar dos Filósofos usando Redes de Petri Ordinárias


O problema do jantar dos filósofos consiste de filósofos que podem estar comendo,
pensando ou com fome. Os filósofos estão sentados ao redor de uma mesa e cada um
tem um garfo e um prato de comida à sua frente. Entretanto, para que um filósofo possa
comer, ele precisa de dois garfos (o seu e o do seu vizinho). O problema é então o fato
de que, se todos os filósofos pegarem o garfo da direita em um mesmo instante e
aguardarem a liberação do garfo da esquerda, o sistema entrará em deadlock (impasse).
Modelaremos uma rede com cinco filósofos e, conseqüentemente, cinco talhares.

Figura 35. Rede de Petri Ordinária para o problema do jantar dos filósofos

Portanto, os estados da rede são: Filósofo 1 pensando, Filósofo 1 comendo,


Filósofo 2 pensando, Filósofo 2 comendo, Filósofo 3 pensando, Filósofo 3 comendo,
Filósofo 4 pensando, Filósofo 4 comendo, Filósofo 5 pensando, Filósofo 5 comendo,
Garfo 1, Garfo 2, Garfo 3, Garfo 4, Garfo 5. As ações da rede são: Filósofo 1 pega
talher, Filósofo 1 libera talher, Filósofo 2 pega talher, Filósofo 2 libera talher, Filósofo 3
pega talher, Filósofo 3 libera talher, Filósofo 4 pega talher, Filósofo 4 libera talher,
Filósofo 5 pega talher, Filósofo 5 libera talher. Por questões de simplificação, na nossa
rede não modelamos os estados dos filósofos com fome. Neste caso, estes estados estão
representados pelo disparo da transição pega talher: um filósofo pega talheres quando
está com fome. A figura 35 apresenta a Rede de Petri Ordinária para o problema do
jantar dos filósofos.

5.7.2. Jantar dos Filósofos usando Redes de Petri Coloridas


Como podemos perceber a Rede de Petri Ordinária que modela o problema do jantar
dos filósofos é complexa, grande e repetitiva.O aumento do número de filósofos
tornaria a rede ainda maior e mais complexa e alteraria sua estrutura. Além disso, os
mesmos estados e ações são repetidos para cada filósofo.
Deste modo, a substituição de uma RdP Ordinária por uma RdP Colorida é
bastante adequada, eliminando os processos repetitivos e fazendo com a rede seja
escalável de forma que o aumento do número de filósofos pode ser feito simplesmente
alterando a marcação inicial dos places (filósofos) pensando e G (garfos) livres e das
funções left() e right().
Neste caso, cada conjunto de places é substituído por um único place colorido
contendo tokens coloridos. A fusão dos (repetitivos) places resulta na fusão dos
respectivos (e repetitivos) arcos. Para isto, são atribuídas funções aos arcos de forma a
determinar quais tokens devem ser adicionados ou retirados dos places. É o caso das
funções left() e right(), que selecionam os garfos corretos para cada filósofo.

Figura 36. Rede de Petri Colorida para o problema do jantar dos filósofos

No modelo apresentado na figura 36, os filósofos e os garfos são distinguidos


pela forma do token.Além disso, cada filósofo e cada garfo é caracterizado por uma cor
diferente. Inicialmente, a rede possui cinco tokens de cores distintas no place (filósofos)
pensando e cinco tokens de cores distintas no place (garfos) livres. A função
left(filósofo) seleciona o garfo em frente ao filósofo i (garfoi) e a função right(filósofo)
seleciona o garfo à direita do filósofo i (garfoi+1).
Na figura 37 apresentamos o comportamento da rede da figura 35 antes e após o
disparo da transição pega talheres para o filósofo 1 (vermelho). No canto inferior
direito da figura 37 apresentamos a disposição dos filósofos e dos talheres na mesa.
Figura 37. Comportamento dinâmico da Rede de Petri Colorida para o problema
do jantar dos filósofos

Como podemos perceber, a modelagem usando Redes de Petri Colorida reduziu


significativamente o modelo e eliminou places, transições e arcos repetitivos,
unificando-os.

5.8. Sistema paralelo simples (Estocástica)


Neste exemplo apresentamos um sistema paralelo [Almasi 1994] simples modelado com
Redes de Petri Estocástica [Haas 2002] [Silva 2000]. A figura 38 mostra a Rede de Petri
que modela o sistema paralelo [Silva 2000]. A Figura 39 mostra o diagrama de estados
que é a cadeia de Markov associada aos nós da árvore de alcançabilidade da Rede de
Petri apresentada na Figura 38.
O vetor de probabilidades é calculado através da resolução do sistema de
n
equações lineares vetor * Q = 0 , sendo que ∑ vetor = 1 , onde n = número de estados da
i =1
i

cadeia de Markov correspondente.


A taxa de disparo de P3+P4 é W (T par1 ) + (WT par 2 ) . Qual a probabilidade de T par1
W (T par 1 )
disparar? É de . Portanto:
W (T par 1 ) + W (T par 2 )
W (T par1 )
µ1 = (W (T par1 ) + W (T par 2 )) = W (T par1 ) .
W (T par1 ) + W (T par 2 )

Do mesmo modo, µ2 = W (T par 2 ) . Logo: λ fimproc = W (T fimproc ) e


λcontproc = W (Tcontproc ) .
Qual o significado de W (T fimproc ) e W (Tcontproc ) ?
• A atividade de verificação é igual a 0.0001. Considerando uma taxa de
10000, e definindo que a probabilidade de fimproc / contproc é 99% vs.
1%, temos que portanto, W (T fimproc ) = 9900 e W (Tcontproc ) = 100 .

Figura 38. Rede de Petri Estocástica de


um sistema paralelo simples Figura 39. Diagrama de estados

Deste modo, os parâmetros (definidos e calculados) da rede são apresentados na


Tabela 10.
Tabela 10. Parâmetros da Rede de Petri Estocástica do sistema paralelo
Transições Taxa Valor Semântica
Tnovodado λ 1 Servidor infinito
Tinicio τ 1000 Servidor único
Tpar1 µ1 10 Servidor único
Tpar2 µ2 5 Servidor único
Tsinc σ 2500 Servidor único
Tfimproc α 9900 Servidor único
Tcontproc β 100 Servidor único
TI/O ν 25 Servidor único
Tverif θ 0,5 Servidor único
A operação de verificação tem, por definição, uma média de duração de 0,0001
unidades de tempo, e resulta em sucesso em 99% das vezes e em falha em 1% das
vezes.
Os índices de performance para este sistema são:
• Vazão da transição TI/O: 1.504 sucessos/unidade de tempo
• Número médio de itens em teste: 0,031
• Tempo de produção médio: 0,33 unidades de tempo.

6. Conclusões
Considerando os resultados apresentados no minicurso podemos concluir que as Redes
de Petri são um importante recurso para a modelagem de sistemas, particularmente de
sistemas computacionais. Esta importância é fundamentada nas propriedades inerentes
às Redes de Petri que facilitam a modelagem de características típicas dos sistemas
computacionais, entre as quais podemos destacar: compartilhamento, concorrência,
conflito, controle e sincronização.
Entretanto, a modelagem de sistemas computacionais que possuem algumas
características probabilísticas, como a máquina PRAM, utilizando Redes de Petri
Ordinárias e Temporizadas não é o ideal. Neste caso, o ideal seria utilizar uma Rede de
Petri Estocástica.
A modelagem usando Redes de Petri Coloridas, normalmente permite uma
redução no tamanho do modelo devido à unificação de places, transições e arcos. O
grau de redução da Rede de Petri é dependente dos modelos originais e principalmente
da quantidade de repetições (places, transações e arcos) existentes.
Esperamos ter alcançado nossos principais objetivos com a preparação e
apresentação deste minicurso, apresentando os principais conceitos das Redes de Petri
Ordinárias e de algumas extensões como as Redes de Petri Coloridas e as Redes de Petri
Estocásticas. Além disso, apresentamos exemplos de modelagem de problemas triviais
com Redes de Petri e exemplos de utilização de Redes de Petri na modelagem de
sistemas computacionais e na solução de problemas relacionados com os mesmos.
Entre as diversas possíveis sugestões de estudos mais avançados e trabalhos
futuros podemos destacar: aprofundamento do estudo das Redes de Petri Coloridas e
das Redes de Petri Estocásticas, estudo de outras variações de Redes de Petri, utilização
dos diversos tipos de Redes de Petri na modelagem e solução de problemas relacionados
com sistemas computacionais, estudo e utilização de outras ferramentas de
validação/verificação de Redes de Petri e finalmente o projeto e desenvolvimento de
ferramentas de validação e verificação de Redes de Petri, como analisadores e
simuladores de Redes de Petri.
7. Referências
Almasi, G. S., Gottlieb, A.A. (1994), “Highly Parallel Computing”, 2nd. Edition,
Benjamim/Cummings.
Barros, J. P. M. P. R. (1996), “CpPNeTS: uma Classe de Redes de Petri de Alto-nível.
Implementação de um sistema de suporte à sua aplicação e análise”, Dissertação de
mestrado, Faculdade de Ciências e Tecnologia, Departamento de Informática,
Universidade Nova de Lisboa, Lisboa. URL:
http://www.estig.ipbeja.pt/~jpb/BarrosTeseDeMestrado.pdf (último acesso em
outubro de 2004)
Bolch, G., et al (1998), “Queueing Networks and Markov Chains: Modeling and
Performance Evaluation With Computer Science Applications”, Editora Wiley-
Interscience
Bressan, G. (2002), “Modelagem e Simulação de Sistemas Computacionais” Capítulo
sobre Redes de Petri, LARC-PCS/EPUSP,
www.larc.usp.br/conteudo/universo/pcs012/modsim05.pdf (último acesso em
outubro de 2004)
Buyya, R. (1999), “High Performance Cluster Computing”, Volume 1, Prentice Hall
Desel, J. (2000), “Place/Transitions Nets I”, Introductory Tutorial Petri Nets, Petri Nets
2000, 21st International Conference on Application And Theory of Petri Nets,
Denmark, pp 111-160.
Drath, R., Visual Object Net ++ (2004). URL: http://www.systemtechnik.tu-
ilmenau.de/~drath/visual_E.htm, Technical University of Ilmenau, Alemanha (último
acesso em outubro de 2004).
Girault, C., Valk, R. (2002), “Petri Nets for Systems Engineering: A Guide for
Modeling, Verification and Application”, Springer Verlag.
Haas, P. J. (2002) “Stochastic Petri Nets: Modeling, Stability, Simulation”, Springer-
Verlag 1st edition
Hennessy, J. L., Patterson, D. A. (2003) “Computer Architecture: A Quantitative
Approach” 3rd Edition, Morgan Kaufmann Publishers.
Jain, R. (1991), “The Art of Computer Systems Performance Analyses”, John Wiley.
Maciel, P. R., et al. (1996), “Introdução às Redes de Petri e Aplicações”, X Escola de
Computação, Campinas SP.
Murata, T. (1989) "Petri Nets: Properties, Analysis and Applications", Proceedings of
the IEEE, Vol. 77, pp. 541-580.
Norris, J. R. (1998), “Markov Chains”, Cambridge University Press
Penha, D. O., Freitas, H. C., Martins, C. A. P. S. (2004) “Modelo de Memória
Reconfigurável para Sistemas Paralelos”, V Workshop em Sistemas Computacionais
de Alto Desempenho, Sociedade Brasileira de Computação, Foz do Iguaçu.
Peterson, J. L. (1977), “Petri Nets”, ACM Computing Surveys, vol. 9, No. 3, pp. 223-
252
Peterson, J. L. (1981), “Petri Net Theory and the Modeling of Systems”, Englewood
Cliffs, Prentice Hall
Petri Nets World (2004). URL: http://www.daimi.au.dk/PetriNets/ (último acesso em
outubro de 2004)
Petri, C. A., (1962), “Kommunikation mit Automaten”, Bonn: Institut für Instrumentelle
Mathematik, Schriften des IIM Nr. 3, 1962. Também em inglês, “Communication
with Automata”, New York: Griffiss Air Force Base, Tech. Rep.RADC-TR-65-377,
vol. 1, Suppl. 1, 1966
Silva, M. (2000), “Place/Transitions Nets II”, Introductory Tutorial Petri Nets, Petri
Nets 2000, 21st International Conference on Application And Theory of Petri Nets,
Denmark, pp 199-216.
Tanenbaum, A. S. (2003a), “Redes de Computadores”, Campus, Tradução da 4a edição.
Tanenbaum, A. S. (2003b), “Sistemas Operacionais Modernos”, Prentice-Hall,
Tradução da 2a edição.