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.