Emb
Assembly language on big computers
Transputer, Occam
In the 1970s we started looking for successors to C/Unix-like environments.
Ada was one such
Over-all structure
task T is
.... // public face of task
end T;
task body T is
.... // any code at all
end T;
Tasks are created by the declaration of a task variable
X: T;
X: T;Main program is implicitly called as a task.
Tasks can include
task T is
entry E( <in & out parameters> );
end T;
accept E( <formal parameters> ) do ... //code to be executed end E;
T.E( <actual parameters> );
Accept blocks until the call to the entry occurs.
The call blocks until the accept is executed.
Relationship to S/R/R
Presumably
loop
accept Send( request ) do
// process request
// fill in return parameters
end Send;
end loop;
What's wrong here?
Here is one of the work-arounds.
loop
select
SendNotifier( data ) do
// update internal state
end SendNotifier;
or
SendClient( request ) do
// fulfil request
end SendClient;
end select;
end loop
How does this still fall short?
Is it possible to write a server in a programming language with nested scoping?
Pretty easy. Two time primitives
You can build delay from delay until, but not vice versa.
An interrupt handler is a parameterless procedure, that can be attached (either statically, at compile time, or dynamically, at run-time) to the occurrence of an interrupt.
Problems
task body Int is
loop
accept Interrupt do
// manipulate device
SendServer( error, data )
end Interrupt
end loop
end Int
Notice how device-specific the above code is.
`The Ada programming language defines the semantics of interrupt handling as part of the tasking mechanism, making it possible to construct implementation-independent interrupt handlers. However, for the Ada mechanism to be effective, an implementation must provide support not specified by the Ada standard, such as for initializing hardware interrupting devices, handling unexpected interrupts and optimizing for real-time performance constraints. This paper analyses some of the constraints that efficient interrupt support places on an implementation. It develops a model for the interaction between interrupt hardware and Ada tasks and describes optimizations for Ada interrupt handlers. Implementation issues, including task priorities and task termination for interrupt handlers, are discussed in detail.' Real-time interrupt handling in Ada Jørgen Born Rasmussen, Bill Appelbe, Software Practice and Experience.
or using RPC
Return to: