11  Output Buffering

11.1 Data

Table 11.1: List of Global Variables
Name Description Initial Value
NextPacketIdNum The Id number that will be assigned to the next packet 1
\(P\) The set of all packets \(\emptyset\)
Table 11.2: List of Data Modules
Name Source Model Type Input Output
InterarrivalTime Problem Description Poisson Process Stochastic Mean (1 min) Sample from distribution
PacketSize Problem Description Triangular Distribution Stochastic Min, Mode, Max Sample from Distribution
TransmitRate Problem Description Constant Deterministic - Value
TransmitDuration Problem Description Function Deterministic Size, Rate Value (Size / Rate)
BufferSize Experiment Constant Deterministic - Value

11.2 Components

Table 11.3: List of Entities
Entity Attributes
Packet ID
CurrentActivity
CurrentStart
Size
Link ID
CurrentActivity
CurrentStart
Table 11.4: List of Transitions
Participant Name From Event To Event
Packet P.1 Packet Arrives Wait for Link.Start
P.2 Wait for Link.End Transmit.Start
P.3 Wait for Link.End Packet Leaves
P.4 Transmit.End Packet Leaves
Link L.1 Link Created Wait for Packet.Start
L.2 Wait for Packet.End Transmit.Start
L.3 Transmit.End Wait for Packet.Start
Table 11.5: Activities
Activity Participants Event Type State Change
Wait for Link Packet (p) Start Scheduled
P.CurrentActivity = "Wait for Link" # default
P.CurrentStart = TIME # default
TRIGGER OnStartWaitForLink WITH p
End Controlled
Transmit Packet (p), Link (l) Start Controlled
SCHEDULE Transmit.End at TIME + TransmitDuration(p.Size, Rate)
End Scheduled
START Packet Leaves WITH p # TRANSITION P.4
START Wait for Packet WITH l # TRANSITION L.3
Wait for Packet Link (l) Start Scheduled
TRIGGER OnStartWaitForPacket WITH l
End Controlled
Table 11.6: Events
Event Participants Type State Change
Simulation Start - Scheduled
SCHEDULE Link Created at TIME
SCHEDULE Packet Arrives at TIME + InterarrivalTime()
Packet Arrives - Scheduled
CREATE Packet p
p.ID = NextPatIDNum
NextPatIDNum = NextPatIDNum + 1
p.Size = PacketSize()
SCHEDULE Packet Arrives at TIME + InterarrivalTime()
START Wait for Transmit WITH p # TRANSITION P.1
Packet Leaves Packet (p) Scheduled
Calculate statistics for p
Link Created - Scheduled
CREATE Link l
l.Conversion = Conversion
START Wait for Packet WITH l # TRANSITION L.1
Simulation Finish - Scheduled
Calculate any required statistics

11.3 Activity Diagrams

Figure 11.1: Packet Activity Diagram

11.4 Logic

Table 11.7: OnStartWaitForLink
Triggered by: Packet p
waiting_packets = {p1 FOR p1 IN P IF p1.CurrentActivity = "Wait for Link"}
buffer_used = sum{p1.Size for p1 waiting_packets IF p1 != p}
IF L.CurrentActivity IS "Wait for Packet" THEN 
    START Transmit WITH p, L # TRANSITIONS P.2, L.2
ELSE IF buffer_used + p.size > BufferSize THEN
    START Packet Leaves with p # TRANSITION P.3
END IF
Table 11.8: OnStartWaitForPacket
Triggered by: Link l
packets = {p FOR p IN P IF p.State = "Wait for Link"}
IF packets IS NOT empty THEN 
    p_hat = argmin{p.CurrentStart FOR p IN packets}
    START Transmit WITH p_hat, l # TRANSITIONS P.2, L.2
END IF