CS452 - Real-Time Programming - Spring 2017

Lecture 21 - Anthropomorphic Programming

Public Service Annoucements

  1. First Train Control demo on Thursday, 29 July.
  2. On Monday the 19th we decided that
  3. PDF on calibration.

Anthropomorphic Programming

Servers and Attendant Tasks

1. Shopkeeper with a Notifier

2. Using a Courier

We can handle two interrupts coming very close together using a courier. Simplest is best, so we shouldn't go beyond a courier unless we expect more than two.

Transmit Notifier Code

Transmit Courier Code

Transmit Shopkeeper Code


This gets you through a bottleneck where at most than two events come too fast.

Remember that all the calls provide error returns. You can/should use them for error recovery

Another possible arrangement for task creation

Another possible arrangement for initialization

Distributed gating

I am showing you collections of tasks implemented together because sets of related tasks is a level of organization above the individual task.

3. The Dealer

Add a dealer between the courier and the notifier.


The initialization given for the courier, above, generalizes to include the dealer, essentially without change.


The notifier is now talking directly to a server and has the shape given above for the proprietor. The dealer cannot talk directly to the proprietor because both are servers.


This structure clears up most problems when a burst of requests to the server would leave the notifier waiting in a long sendQ.


  1. Handles bottlenecks of all sizes. Give a precise and quantitative definition of `bottleneck'.

This amounts to servers being lean and hungry. They should

4. Secretary, Receptionist

The dealer guards the notifier from the effect of multiple clients on the server. Another method of guarding the notifier is to guard the proprietor so that its sendQ is always empty. The secretary/receptionist does so.

The secretary receives requests from many clients and forwards them one at a time to the proprietor. Because the secretary Receives it cannot Send. It communicates with the Proprietor using a Courier.

The secretary may prioritize requsts in any way he wishes. In theory the shopkeeper may set a policy but in practice has no way of enforcing it. In other words look for policy bugs within the secretary.


  1. When all the clients have been given service
  2. The Courier is almost always Reply-blocked. If it spends a significant amount of time Receive-blocked the system is overloaded.
  3. If there is a temporary overload of Client requests, the Courier may sit for a while in the Secretary's SendQ while the Proprietor continues to interact with the Notifier.
  4. If there is a permanent overload of requests you are in trouble.

5. Administrator, Worker

Administrator is a shopkeeper who does no work but only assigns work to others (and takes credit for work that has been done!)

Where do the workers come from?

Most workers prefer employee status to consultant status.

Worker code

	Send( administrator, nil, workOrder );
    	  Send( administrator, workResult, workOrder );
          workResult = doWork( workOrder );

doWork might require further sends to servers or dealers, which is harmless in this context.

What kind of work might a worker do?

Administrator code

	Administrator( ) {
  	  for ( i = 0; i < NUM_WORKERS; i++ )
		  worker[i] = Create( mypriority - 1, workerCode );
  	  FOREVER {
    	    Receive( requester, request );
    	    switch( request.type ) {
    	    case CLIENT:
      	      enqueue( orderQ, {order = {client, request}} );
      	      if ( !empty( employeeQ ) )
		  Reply( dequeue( employeeQ ) ), dequeue( orderQ ) ); 
    	    case WORKER:
      	      enqueue( employeeQ, requester);
              if ( !empty( orderQ ) )
		  Reply( dequeue( employeeQ ), { dequeue( orderQ ) );
      	      if ( request != nil )
		  Reply( request.client, request.request );

Note: Tid of the client is usually included in the workorder to the administrator does not have to maintain and search a list of jobs being done. (Administrators are by nature lazy!)

Alternative Worker/Administrator Model

  1. As above, Administrator includes Tid of the client in the order.
  2. Worker replies directly to client with result and to administrator with request for another order to process.


  1. The administrator can add a little more value.

Return to: