* marks parts that do not vary from program to program
initialize( ); //* while ( ( event = event-set.next( ) ) != nil ) process( event ); log.output( ); //*
initialize( ) {
clock.init( ); //*
state.init( ); //*
event-set.init( ); //*
log.init( ); //*
queue.init( ); //*
}
process( event ) {
clock = event.time; //*
log.update( event ); //*
switch( event.type ) { //*
case ARRIVAL: arrive( event ); //*
case DEPARTURE: depart( event ); //*
}
}
Once upon a time
Now
Sequence of events
Response variables
Factors
Assumptions
State variuables
Initialization
clock.init( ) { time = 0 } //*
state.init( ) { n = 0; status = IDLE }
log.init( ) { /* open output channel */ }
event-set.init( ) { event-set.insert( new-arr-event( ) ) }
queue.init( ) { queue.empty( ) }
Arrival event
arrive( event ) { log.update( event ); n++; queue.insert( event ); if( status == IDLE ) start-service( event ) }
Departure event
depart( event ) { log.update( event ); status = IDLE; if( --n ) start-service( event ) }
Utility routines
event new-arr-event( ) { this.time = clock + SCALE * random( ); this.type = ARRIVAL }
event new-dep-event( event ) { this.time = clock + event.serv-time; this.type = DEPARTURE }
start-service( event ) { log.update( ); job = queue.next( ); state.status = BUSY; event-set.insert( new-dep-event( event ) ) }
Left as exercises for the reader
State variable is number-busy
Return to: