B.1.1 Fully Parallel Stacks

A fully parallel stack runs in a preemptive multiprocessor environment. It uses locks to protect its integrity, and is prepared for:

  1. The service procedures of two or more of its queues running concurrently

  2. Its service and put procedures running concurrently with and/or preempting each other

  3. Multiple instances of an open or close procedure running concurrently on different queues.

  4. All put procedures to be called at DISPATCH_LEVEL processor priority. At this priority level, no page faults may be taken and procedures may not block. All dynamic memory should be allocated from non-paged pool.

STREAMS limits service procedures to one instantiation per queue at any given moment. For optimal throughput, a stack should do as much work as possible in its put procedures.

Service, open, and close procedures are guaranteed.

Additionally, open and close procedures are serialized along a stream. Thus, at any particular time, only one module or driver along that stream is executing an open or close procedure.