Promela Reference -- active(2)

Google

Promela

Declarator

active(2)

NAME
active - prefix for proctype declarations, to instantiate initial processes.

SYNTAX
active proctype name ( [ decl_lst ] ) { sequence }
active '[' const ']' proctype name ( [ decl_lst ] ) { sequence }

DESCRIPTION
In early versions of Spin there was only one predefined initial process, init(2). In newer versions, the keyword active can be prefixed to any proctype(2) declaration to define additional processes that are active in the initial global system state. The use of an init declaration has thereby become optional, the only requirement being that at least one active process exists in the initial state of the system. Multiple instantiations of the same proctype can be specified with an optional array suffix of active (separated from it by white space). The instantiation of a proctype implies the allocation of the data structure for an active process (cf. definition S.4 in intro(0)), the initialization of its parameters and local variables, and the assignment to that process of a unique pid number. The maximum number of active processes is necessarily bounded during verification. In Spin verifications, process instantiation only succeeds in global system states (cf. definition S.6) with fewer than 255 active processes. During simulations, however, no bound is enforced.

EXAMPLES

active proctype A() { \&... }

active [4] proctype B() { \&... }

In the first example one instance of proctype A is created in the initial system state; in the second example four instances of proctype B are created.

Processes that are instantiated through an active prefix cannot be passed arguments. It is, nonetheless, legal to declare a list of formal parameters for such processes, to allow for argument passing in additional instantiations with a run operator. In this case, copies of the processes instantiated through the active prefix, have all formal parameters initialized to zero. Each active process is guaranteed to have a unique _pid within the system.

NOTES
In many Spin models, the init process is used exclusively to initiate other processes with the run operator. By using active prefixes instead, the init process becomes superfluous and can be omitted, which reduces the amount of memory needed to store global states.

For the purposes of verification there can be no more than 255 active processes at any one time. This means that if the total number of active processes specified with active prefixes is greater than 255, only the first (arbitrarily chosen) 255 processes will be created. After system initialization, the predefined run operator will return zero (instead of a non-zero process pid number) if the bound on the maximum number of active processes would be exceeded, thus blocking its execution when it is used as a conditional statement. No bound is enforced during simulations.

SEE ALSO
init(2), proctype(2), condition(4), remoterefs(5), _pid(5), run(5).


Spin Online References
Promela Manual Index
Promela Grammar
Spin HomePage
(Page Updated: 16 December 1997)