
PNDirector |
ptolemy.domains.pn.kernel.PNDirector |
A PNDirector governs the execution of a CompositeActor with extended
Kahn-MacQueen process networks (PN) semantics. This model of computation has
been extended to support mutations of graphs in a non-deterministic way.
The thread that calls the various execution methods (initialize, prefire, fire
and postfire) on the director is referred to as the directing thread.
This directing thread might be the main thread responsible for the execution
of the entire simulation or might be the thread created by the executive
director of the containing composite actor.
In the PN domain, the director creates a thread (an instance of
ProcessThread), representing a Kahn process, for each actor in the model.
The threads are created in initialize() and started in the prefire() method
of the ProcessDirector. A process is considered active from its
creation until its termination. An active process can block when trying to
read from a channel (read-blocked), when trying to write to a channel
(write-blocked) or when waiting for a queued topology change request to be
processed (mutation-blocked).
A deadlock is when all the active processes are blocked.
The director is responsible for handling deadlocks during execution.
This director handles two different sorts of deadlocks, real deadlock
and artificial deadlock.
A real deadlock is when all the processes are blocked on a read meaning that
no process can proceed until it receives new data. The execution can be
terminated, if desired, in such a situation. If the container of this director
does not have any input ports (as is in the case of a top-level composite
actor), then the executive director or manager terminates the execution.
If the container has input ports, then it is up to the
executive director of the container to decide on the termination of the
execution. To terminate the execution after detection of a real deadlock, the
manager or the executive director calls wrapup() on the director.
An artificial deadlock is when all processes are blocked and at least one
process is blocked on a write. In this case the director increases the
capacity of the receiver with the smallest capacity amongst all the
receivers on which a process is blocked on a write.
This breaks the deadlock and the execution can resume.
If the increase results in a capacity that exceeds the value of
maximumQueueCapacity, then instead of breaking the deadlock,
an exception is thrown. This can be used to detect erroneous models
that require unbounded queues.
Author(s): Mudit Goel, Edward A. Lee, Xiaowen Xin
Version:$Id: PNDirector.java,v 1.147 2006/04/08 13:29:26 eal Exp $
Pt.Proposed Rating:Green (mudit)
Pt.Accepted Rating:Green (davisj)
initialQueueCapacity
The initial size of the queues for each communication channel.
This is an integer that defaults to 1.
maximumQueueCapacity
The maximum size of the queues for each communication channel.
This is an integer that defaults to 65536. To specify unbounded
queues, set this to 0.