KPN is a common model for describing
signal processing systems where infinite streams of data are incrementally transformed by processes executing in sequence or parallel. Despite parallel processes,
multitasking or
parallelism are not required for executing this model. In a KPN, processes communicate via unbounded
FIFO channels. Processes read and write atomic
data elements, alternatively called
tokens, from and to channels. Writing to a channel is
non-blocking, i.e. it always succeeds and does not stall the process, while reading from a channel is
blocking, i.e. a process that reads from an empty channel will stall and can only continue when the channel contains sufficient data items (
tokens). Processes are not allowed to test an input channel for existence of tokens without consuming them. A FIFO cannot be consumed by multiple processes, nor can multiple processes write to a single FIFO. Given a specific input (token) history for a process, the process must be deterministic so that it always produces the same outputs (tokens). Timing or execution order of processes must not affect the result and therefore testing input channels for tokens is forbidden.
Notes on processes • A process need not read any input or have any input channels as it may act as a pure data source • A process need not write any output or have any output channels • Testing input channels for emptiness (or
non-blocking reads) could be allowed for optimization purposes, but it should not affect outputs. It can be beneficial and/or possible to do something in advance rather than wait for a channel. For example, assume there were two reads from different channels. If the first read would stall (wait for a token) but the second read could succeed directly, it could be beneficial to read the second one first to save time, because the reading itself often consumes some time (e.g. time for memory allocation or copying).
Process firing semantics as Petri nets displayed in the image above Assuming process
P in the KPN above is constructed so that it first reads data from channel
A, then channel
B, computes something and then writes data to channel
C, the execution model of the process can be modeled with the
Petri net shown on the right. The single token in the
PE resource place forbids the process from executing simultaneously for different input data. When data arrives at channel
A or
B, tokens are placed into places
FIFO A and
FIFO B respectively. The transitions of the Petri net are associated with the respective I/O operations and computation. When the data has been written to channel
C,
PE resource is filled with its initial marking again allowing new data to be read.
Process as a finite-state machine A process can be modeled as a
finite-state machine that is in one of two states: • Active; the process computes or writes data • Wait; the process is blocked (waiting) for data Assuming the finite-state machine reads program elements associated with the process, it may read three kinds of tokens, which are "Compute", "Read" and "Write token". Additionally, in the
Wait state it can only come back to
Active state by reading a special "Get token" which means the communication channel associated with the wait contains readable data. ==Properties==