Every functional unit of the processor has an input queue
and/or an output queue. When a PD reaches a functional
unit, the PD will enter the input queue to wait for being
served. After a PD has obtained the required service and is
about to leave the unit, the PD will enter the output queue
of the unit to wait for being delivered to its next destination.
If a functional unit is in an idle state or after it has just
finished its last serving operation, the unit will then check if
its input queue is empty or not. The unit will enter an idle
state if its input queue is empty. Otherwise, it will remove
a PD from the head place of the input queue and do the
required operation for that PD. After the required service
has been done, the unit should delete the first UN/OP pair
in the UN/OPseq field of the PD, which makes the second
UN/OP pair to be now the first UN/OP pair and lets the PD
known where to go and what to do next. And finally the unit
puts the PD into its output queue to wait for leaving.
The main function of a delivering control unit DC is to
deliver a PD from the output queue of the one unit to the
input queue of the other. DC checks in turn if there is a
unit’s output queue that is not empty. If there is one, the
DC will deliver the PD to its destination unit named UN0.
We suppose here that each of the unit’s input queues has
always an idle room for an incoming PD. There might be
more than one DC working concurrently in a processor to
ensure all PDs to be delivered in time.