[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Priority modeling with CSP?



Jim Davies wrote:

The `standard' language of CSP - being the one defined in the original
book, which is essentially the same as the one used in Roscoe's book,
which is again the same as the one used in Schneider's book (the
differences are cosmetic) doesn't attempt an explicit treatment of

 * time
 * priority

Actually, Alan Jeffrey showed some years ago that a treatment of
either would be a treatment of both, effectively (more specifically:
csp + discrete time = csp + priority).  When you abstract from time,
you are abstracting from priority, and vice versa.  But either way, it
doesn't have it.

This is intentional, and a good idea.  Both Tony and Edsger Dijkstra
were of the same mind on this one: from Edsger's most recent talk in
Oxford, I would guess that he is still of exactly the same opinion;
Tony may have changed his position, I couldn't tell you.
They wanted a language that can be used to convey the essence of a
design, the protocol for usage, the intended pattern of interaction,
the communication outline: something as =abstract= as possible, yet
intuitive and with a convenient, practical theory (you'd like to be
able to =reason=, mathematically, about properties of the design).

They regarded priority and timing information as an implementation
concern.  Of course it might be considered in the early stages of
design, or re-design, but correctness - as expressed and demonstrated
=using the process model= ought to be independent of these issues.

Put another way: you don't use the (CSP) model to describe these
things directly, or explicitly.  You calculate, you count, you figure
out what will happen, but at the level of the code, and there's no
point having a model at the level of the code (unless you have
refactored the information to produce that model, and it's more
amenable to slicing).


I absolutely agree with everything above from Jim, just in case anyone might think otherwise....


  BUT WAIT!  (WAIT 0.1414).  Didn't I do a doctorate on Timed CSP?
  Wasn't there a whole research effort (that the Australians are still
  running with?).  What about all of the (quite remarkable) work that
Bill, Mike and Steve did?
  Well, you can use a simple notation to add timing information to
  your process descriptions.  It's a nice set of hooks for subsequent
  calculation about timing properties.  You might think of the timing
  bits as a well-defined language of annotations; the effort goes into
  making sure that these are used consistently, and interpreted
  properly.  It's a remarkable piece of work.

  But you don't need Timed CSP for every model in which time and/or
  priority is important to you.

You can address timing and priority in models constructed using
ordinary CSP by using additional, auxiliary events: events which are
observable in the model yet do not correspond to observable
interactions, or sequences of interactions, in the system.


Again, I agree. Especially about discrete models of time.
Yet modelling a more abstract sort of priority is painful done as above.

Adding priority into CSP without doing violence to the existing language, in particular retaining the abstraction and the algebraic laws seems to help in several ways.

1) It is general: you don't need to invent the extra events and build a special model for every instance.

2) It provides algebraic laws. The motivation here is rather different from the usual applications of CSP in vogue today: provably correct rewriting laws built into compilers and other tools.

3) Not forgetting that this is an occam group, it helps us understand and clarify the meaning of priority in that language. Priority was explicitly excluded from the pair of papers from Michael, Bill and Bryan.

4) It provides an extended language in which to *think* about concurrency in general. For me at least, that is by far greatest value of CSP. Just as other parts of mathematics allow us to grasp and formulate more subtle and precise questions and understanding.

5) Refinement. One of my motivations for extending CSP was that I wanted to be able to add detail, right down to the level of code. I didn't want to have to change paradigm (yuck, that word again) at some arbitrary point between the high level specification and the final circuit or code generated.


These events can represent the end of a time interval, or internal
events that have a bearing upon priority (message A arrived before
message B).  They can be linked by an auxiliary process, which
enforces certain properties (e.g., time intervals end in order - or in
some order, if you are modelling multiple time frames) or assumption.


Absolutely. But it is not general, and it is complicated. If you want to model check something with priority with the tools available today, and FDR is *wonderful*, then this is what you have to do. I hope you have plenty of time :-). Actually, this is akin to testing rather than proving: you have to prove each individual case. Sorry, that was a bit below the belt. :-)


Sometimes an explicit treatment is exactly what you want, and then you
want timed CSP, or a prioritised CSP, but - in my experience - most of
the people who have said `ah, we need real-time CSP' or even `I need a
relativisitic model, a real-space, real-time algebra' could get all of
the reasoning that they are ever going to do, and more, done using
ordinary CSP, and a bit of lateral, as opposed to literal, thinking.


If you want to model communications with a satellite at the level of nanoseconds, you can't ignore relativity. Of course, I am not (yet) suggesting that this is something that is likely to be done at that level of detail in CSP. Yet there is no reason why we cannot extend the ideas in a sympathetic way to encompass such things. And much more.

CSP is *so powerful*, mainly because its abstractions are so simple, and capture just the right intuitions -- the idea of a CSP event and the idea of a space-time event match very closely, and even survive into the quantum world in the many worlds interpretation. It is a great pity to restrict such a useful language to the original applications of interleaved software with synchronisation as communication. As long as we can do that without spoiling the simplicity, compositional properties, and so on.



p.s., before someone offers me an example in which real-time,
probabilistic csp is absolutely the only thing that will do, let me
say two things (i) I did say `most of the people', and that might not
include you (ii) I probably don't have time to prove you wrong if
you are x

I don't think Gavin is on ths list is he? :-) Maybe Steve is lurking..


Just a last point. If you have ever struggled with a VHDL or verilog description of a parallel circuit,or even a complex schematic and you know CSP, then you scream for a clear transparent description. Just to *understand*. And if it allows you to prove or generate a correct version, then you are in heaven...

Adrian
--
Dr A E Lawrence