[comp.realtime] RSX -- one of the best?

kenw@skyler.arc.ab.ca (Ken Wallewein) (05/16/91)

  Back when I worked with RSX, my impression was that it was one of the 
best real-time OSs available.  It doesn't seem to have been mentioned here
much lately.  Would anybody mind filling me in on why?

/kenw
--
/kenw

Ken Wallewein                                                     A L B E R T A
kenw@noah.arc.ab.ca  <-- replies (if mailed) here, please       R E S E A R C H
(403)297-2660                                                     C O U N C I L

murphy@corsair.uucp (Bill Murphy) (05/16/91)

In article <KENW.91May15211421@skyler.arc.ab.ca> kenw@skyler.arc.ab.ca
(Ken Wallewein) writes:
>
>  Back when I worked with RSX, my impression was that it was one of the 
>best real-time OSs available.  It doesn't seem to have been mentioned here
>much lately.  Would anybody mind filling me in on why?
>
>/kenw

I miss using RSX.  I suppose it's demise can be attributed to two
factors.

Firstly, the performance PDP and LSI series of processors failed to
keep up with the plethora of RISC processors which have come on the
market in recent years.  Why buy a PDP-11/84 with 0.8 VAX MIPS when
you can buy a machine with 10 or 20 VAX MIPS for the same (or less)
money? 

Secondly, the popularity of Unix as a general-purpose OS has lead to
the development of several good Unix-like real-time OSs.  We've been
using VxWorks here for a couple of years.  It took some getting used
to (what, no AST's??), but I've grown to like it.  It's simple,
fast, and has some useful features not built into RSX (semaphores, RPCs,
TCP/IP support).

Bill
-- 
----
Bill Murphy, Calspan Corporation, Buffalo NY
e-mail to: ...!{rutgers,uunet}!acsu.buffalo.edu!planck!murphy%hercules

vladan@idtidt.com (vladan) (05/17/91)

In article <KENW.91May15211421@skyler.arc.ab.ca>, kenw@skyler.arc.ab.ca (Ken Wallewein) writes:
> 
>   Back when I worked with RSX, my impression was that it was one of the 
> best real-time OSs available.  It doesn't seem to have been mentioned here

The best one was RT-11SJ.

mcculley@alien.enet.dec.com (05/23/91)

In article <KENW.91May15211421@skyler.arc.ab.ca>, kenw@skyler.arc.ab.ca (Ken Wallewein) writes...
> 
>  Back when I worked with RSX, my impression was that it was one of the 
>best real-time OSs available.  It doesn't seem to have been mentioned here
>much lately.  Would anybody mind filling me in on why?
> 
>/kenw

Boy, I could discuss this ad nauseum - but that topic tends to have such an
effect on me anyway!	:-)

There are lots of specific factors, but I think they all add up to the fact
that a few years ago PDP-11 hardware and software enhancements were seen as
less strategic to Digital than other activities.  So the business was managed
conservatively to promote profitability, rather than aggressively to promote
growth.  Whether that was a good (or the right) decision or not probably
depends on your perspective and the yardsticks you use to measure it.

I know that the PDP-11 and RSX business is still producing very considerable
revenues for Digital.  I also know that there is very little new applications 
development occuring in this space, which probably accounts for the lack of
discussion in this group.

Besides, I suspect that the Internet community shares with Digital the trait
that I consider the one single biggest factor in the de-emphasis of PDPs: it's
what I call "technological chauvinism".  The newest technological vogue is by
definition the best stuff, right?  We all know that the state of the art is
constantly advancing so anything old must not be as good as newer stuff...
So what if it does the job as well (or better) and more cost-effectively?

Enough said, I don't want to get onto that soapbox.  We're still around,
quietly doing the same job that PDPs and RSX have done for two decades or so.

- Bruce McCulley
  RSX Software Engineering Group
  Digital Equipment Corporation
  Nashua, New Hampshire

mas@genrad.com (Mark A. Swanson) (05/23/91)

Yes, RSX is a nice operating system for problems it can handle, which are
a constantly declining part of those in our problem space.  The
old problem with it is the PDP-11's limited address space.  I have spent
far too many weeks cramming "10 pounds into a 5 pound bag" to voluntarily
use it again for any of the problems I deal with. (Most involve some
computation tasks which needs to run on the same CPU as the real time
application.  64kbytes does not cut it.  The need for such computation
tasks explains why RSX rather than a simple real time kernel got used.)

However, the killers for our use was the fact that RSX had no support for
TCP/IP (and for quite a while little for Ethernet), and poor C compilers
which made it difficult to work with in the context of larger systems.  

	Mark Swanson

greg@organia.sce.carleton.ca (Greg Franks) (05/24/91)

In article <41618@genrad.UUCP> mas@genrad.com (Mark A. Swanson) writes:

   However, the killers for our use was the fact that RSX had no support for
   TCP/IP (and for quite a while little for Ethernet), and poor C compilers
   which made it difficult to work with in the context of larger systems.  

The *lack* of a C compiler is often considered an advantage in the
context of larger real-time systems (i.e., those with lots of people
working on the same 8-megabyte program).  Type checking -- what't
that?  :-).
--
Greg Franks, (613) 788-5726               | "The reason that God was able to    
Systems Engineering, Carleton University, | create the world in seven days is   
Ottawa, Ontario, Canada  K1S 5B6.         | that he didn't have to worry about 
greg@sce.carleton.ca  ...!cunews!sce!greg | the installed base" -- Enzo Torresi  

mcculley@alien.enet.dec.com (05/25/91)

In article <41618@genrad.UUCP>, mas@genrad.com (Mark A. Swanson) writes...
>However, the killers for our use was the fact that RSX had no support for
>TCP/IP (and for quite a while little for Ethernet), and poor C compilers
>which made it difficult to work with in the context of larger systems.  
> 
>	Mark Swanson

There is (finally) a fairly recent release of Digital's PDP-11 C compiler, and
there were previously C implementations for RSX from other sources.  (In fact,
wasn't there one time when the only C compiler was for PDPs, if not RSX? :-)

I know that the TCP/IP support has never been a Digital-developed product, but
I do know that there have been a couple of vendors supplying TCP/IP that ran
under RSX.

Of course, these tidbits are probably no help now, but at least they're a sign
that the product ain't dead yet...

arl@cs.hut.fi (Ari Lemmke) (05/26/91)

In article <GREG.91May24100015@organia.sce.carleton.ca> greg@organia.sce.carleton.ca (Greg Franks) writes:
>	The *lack* of a C compiler is often considered an advantage in the
>	context of larger real-time systems (i.e., those with lots of people
>	working on the same 8-megabyte program).  Type checking -- what't
>	that?  :-).

	Does fortran then do type checking better ? I personally remember
	project where we used quite large common area ... one programmer
	of our project had her own ideas how to organize it ;-) No she
	didn't know how to use 'include'.

	DEC fortran 'casting' was done with equivalence statements,
	I remember having 4 statements to program protocols with
	fortran ;-)

>	greg@sce.carleton.ca

	arl			// I still like PDP11/23+ & RSX

klaus@captain-crunch.ai.mit.edu (Klaus B. Biggers) (06/05/91)

In article <GREG.91May24100015@organia.sce.carleton.ca> greg@organia.sce.carleton.ca (Greg Franks) writes:
>
>The *lack* of a C compiler is often considered an advantage in the
>context of larger real-time systems (i.e., those with lots of people
>working on the same 8-megabyte program).  Type checking -- what't
>that?  :-).
>--

I think they call it ANSI C and prototyped functions... or there's lint
which will do your type checking. C has some really nice advantages..

portability-- what't that?
data abstraction-- what't that?


what did you use on RSX11?? fortran?

-klaus

-klaus                                              klaus@snowhite.ced.utah.edu

_______________________________________________________________________________

greg@organia.sce.carleton.ca (Greg Franks) (06/06/91)

In article <16302@life.ai.mit.edu> klaus@captain-crunch.ai.mit.edu (Klaus B. Biggers) writes:

   In article <GREG.91May24100015@organia.sce.carleton.ca> greg@organia.sce.carleton.ca (Greg Franks) writes:
   >
   >The *lack* of a C compiler is often considered an advantage in the
   >context of larger real-time systems (i.e., those with lots of people
   >working on the same 8-megabyte program).  Type checking -- what't
   >that?  :-).
   >--

   I think they call it ANSI C and prototyped functions... or there's lint
   which will do your type checking. C has some really nice advantages..

C still doesn't do enumerations well.  Arguments of values 1..10 are
still stuffed in integers or characters or whatever in C.  The
compilers I used for real time switching systems put range checks in
strategic locations for enumerated types (Dialed digit '60' is out of
range 0-9: core dump).  We never turned the range checking off,
despite the hit on performance, because reliability was more important
than speed.  We also found that the performance hit was not all that
bad anyway.  Next, of course, is the issue of "pointer surprise".  We
had enough troubles with Pascal-style pointers.

Ansi C has not been in existance for all that long.  Regrettably, lint
is not used.  (Try running lint on some AT&T System V.3 source code
sometime.  :-().  If it isn't built into the compiler, it will not be
used. 

   portability-- what't that?
   data abstraction-- what't that?

   what did you use on RSX11?? fortran?

I forgot about the RSX connection, it was a long time ago.  To answer
your question, Macro-11.  Portability, who cares.  Data abstraction,
what's that? :-)

Portability is often not an issue with real time systems because it is
expensive to change the hardware.  And if you change the hardware,
almost everything else changes too because much of the code deals with
all of those fancy devices you have hooked up to the system.  The
RSX-system was designed to run for 30 years after a 10 year
development period.  The hardware chosen for the project was not the
newest or sexiest, but one that would probably still be available in
some form or another for the entire life span of the plant.

Don't get me wrong.  I do like C.  I use it all the time, but only on
software with small teams (< 5 people).  But I get scared when I
consider the consequences of large design teams (> 50 developers)
using it as *the* development language, especially on hardware with
minimal or non-existant memory management support.  Fortran is no
better.  (I like Concurrent Euclid myself -- real time programming
made easy!  Who knows, I might even like Ada.)


--
Greg Franks, (613) 788-2800 x5726         | "The reason that God was able to    
Systems Engineering, Carleton University, | create the world in seven days is   
Ottawa, Ontario, Canada  K1S 5B6.         | that he didn't have to worry about 
greg@sce.carleton.ca  ...!cunews!sce!greg | the installed base" -- Enzo Torresi  

klaus@captain-crunch.ai.mit.edu (Klaus B. Biggers) (06/06/91)

In article <GREG.91Jun5150023@organia.sce.carleton.ca> greg@organia.sce.carleton.ca (Greg Franks) writes:
>In article <16302@life.ai.mit.edu> klaus@captain-crunch.ai.mit.edu (Klaus B. Biggers) writes:
>
>   In article <GREG.91May24100015@organia.sce.carleton.ca> greg@organia.sce.carleton.ca (Greg Franks) writes:
>   >
>   >The *lack* of a C compiler is often considered an advantage in the
>   >context of larger real-time systems (i.e., those with lots of people
>   >working on the same 8-megabyte program).  Type checking -- what't
>   >that?  :-).
>   >--
>
>   I think they call it ANSI C and prototyped functions... or there's lint
>   which will do your type checking. C has some really nice advantages..
>
>C still doesn't do enumerations well.  Arguments of values 1..10 are
>still stuffed in integers or characters or whatever in C.  The
>compilers I used for real time switching systems put range checks in
>strategic locations for enumerated types (Dialed digit '60' is out of
>range 0-9: core dump).  We never turned the range checking off,

core dump?? ouch.. pretty drastic.

>despite the hit on performance, because reliability was more important
>than speed.  We also found that the performance hit was not all that
>bad anyway.

If you know where its critical to check the range, you can just call a macro
that checks it for you. And then you can take action depending on what the
exact situation is. i.e. sometimes you may want to core dump, other times
you may want to just print something.

>
>Ansi C has not been in existance for all that long.  Regrettably, lint
>is not used.  (Try running lint on some AT&T System V.3 source code
>sometime.  :-().

I thought this was for code you wrote? If you want to do type checking as
you mentioned and what I was talking about, it is a simple matter to
prototype the system function calls to assure that you don't get things
like "pointer surprise". You don't need to recompile (or lint) the system code
to assure that the types you pass in are correct. I have found that most often,
you can find someone that has already done the prototyping for you (or you
can use the P.D. program "protoize" which does it for you).

>  If it isn't built into the compiler, it will not be
>used. 

hmmm, interesting comment.. maybe you need to hire some programmers that
know theres more to writing code than "cc foo.c". Do your people use
debuggers? profilers? I think that if you specify to the programmers that it
must pass lint, they'll learn to use it.

>
>   portability-- what't that?
>   data abstraction-- what't that?
>
>   what did you use on RSX11?? fortran?
>
>I forgot about the RSX connection, it was a long time ago.  To answer
>your question, Macro-11.  Portability, who cares.  Data abstraction,
>what's that? :-)
>

I stand corrected here.. now we're talking type checking and a great language
for large multi-programmer projects. And just think.. it'll run on all those
PDP's out there. :)

>Portability is often not an issue with real time systems because it is
>expensive to change the hardware.

I didn't mean just porting *my* code to new hardware. I meant being able to
use the millions of lines of code already written to the hardware I'm already
using. I port other peoples code to my platforms much more often than I port
my code to other peoples platforms.

For example, if I want to use a Kalman filter somewhere on my hardware,
I don't need to write it, I only need to recompile it using someone
else's code. Portability is *always* an issue. Why reinvent the wheel?
Writing and testing software is VERY expensive. I would rather use everything
I can find thats already been written and at most modify it to fit my needs.
That way I can spend my time doing original work that hasn't already been
done by someone else using existing code for the majority of the nuts and
bolts kind of stuff. There are a lot of very sharp programmers out there
that have written a lot of code. More than I and the rest of the programmers
I work with could write. Therefore, I'd rather start where they left off
rather than where they started.

Also, if you write code that is portable, when you move on to a new project,
with new hardware, a lot of the code is already written and you don't need
to start from scratch... again...

> And if you change the hardware,
>almost everything else changes too because much of the code deals with
>all of those fancy devices you have hooked up to the system.

Wrong... not if you write the device dependent code as separate modules
that get called by device independent higher level routines with generic
interfaces. We've used many different devices hooked to many systems and are
able to use the same high level software on all of them. If we start
a new project or move to new hardware, all we need to rewrite is the lowest
level software which directly deals with the hardware... but that requires
some knowledge of data abstraction in order to effectively write the
interface.


>  The
>RSX-system was designed to run for 30 years after a 10 year
>development period.  The hardware chosen for the project was not the
>newest or sexiest, but one that would probably still be available in
>some form or another for the entire life span of the plant.
>

There is definitely something to be said for stability.. but if you'd written
your code to be portable, you could replace the whole system in
ten years with something higher performance and much cheaper. Ten years ago
you couldn't do on a million dollar mainframe what you can do today on
a twenty thousand dollar workstation... and if your code is portable, you
have the option to use the new cheaper technology.

>Don't get me wrong.  I do like C.  I use it all the time, but only on
>software with small teams (< 5 people).  But I get scared when I
>consider the consequences of large design teams (> 50 developers)
>using it as *the* development language, especially on hardware with
>minimal or non-existant memory management support.

There are a lot of large groups doing programming in C with little
evidence of problems. X-windows is written in C and was written
by *many* programmers, especially if you also consider all of
the contrib stuff. Then there's the Free Software Foundation whose
editor (gnuemacs) and c compiler (gcc) are IMHO the best around.
gcc even lets you give the compiler command line options to flag warnings
much like lint so lint actually is part of the compiler... just like you
wanted.

>  Fortran is no
>better.  (I like Concurrent Euclid myself -- real time programming
>made easy!  Who knows, I might even like Ada.)
>

I didn't think anybody liked ADA :)

>
>--
>Greg Franks, (613) 788-2800 x5726         | "The reason that God was able to    
>Systems Engineering, Carleton University, | create the world in seven days is   
>Ottawa, Ontario, Canada  K1S 5B6.         | that he didn't have to worry about 
>greg@sce.carleton.ca  ...!cunews!sce!greg | the installed base" -- Enzo Torresi  


Ahh.. but if god had used a portable language, we'd have a faster and cheaper
version by now. :)


-klaus                                              klaus@snowhite.ced.utah.edu

_______________________________________________________________________________

greg@organia.sce.carleton.ca (Greg Franks) (06/06/91)

In article <16324@life.ai.mit.edu> klaus@captain-crunch.ai.mit.edu (Klaus B. Biggers) writes:

   >despite the hit on performance, because reliability was more important
   >than speed.  We also found that the performance hit was not all that
   >bad anyway.

   If you know where its critical to check the range, you can just call a macro
   that checks it for you. And then you can take action depending on what the
   exact situation is. i.e. sometimes you may want to core dump, other times
   you may want to just print something.

Good point.  However, *people are lazy*, and they will not do things
like "I better do a range check here".  See the point about lint.

   >
   >Ansi C has not been in existance for all that long.  Regrettably, lint
   >is not used.  (Try running lint on some AT&T System V.3 source code
   >sometime.  :-().

   I thought this was for code you wrote? If you want to do type checking as
   you mentioned and what I was talking about, it is a simple matter to
   prototype the system function calls to assure that you don't get things
   like "pointer surprise". You don't need to recompile (or lint) the system code
   to assure that the types you pass in are correct. I have found that most often,
   you can find someone that has already done the prototyping for you (or you
   can use the P.D. program "protoize" which does it for you).

   >  If it isn't built into the compiler, it will not be
   >used. 

   hmmm, interesting comment.. maybe you need to hire some programmers that
   know theres more to writing code than "cc foo.c". Do your people use
   debuggers? profilers? I think that if you specify to the programmers that it
   must pass lint, they'll learn to use it.

Again, people are lazy.  I didn't do the hiring, but in a large
project, you will get a large variation in the abilities of the
people.  You need not worry about the people who know how to use lint
et al.  You need to worry about those who don't (and there will be
some).  Your system is only going to be as good as the weakest person
on the team.  If your tools can make that person better (eg, type
checking, lint built in etc), you will make your life easier.

   >
   >   portability-- what't that?
   >   data abstraction-- what't that?
   >
   >   what did you use on RSX11?? fortran?
   >
   >I forgot about the RSX connection, it was a long time ago.  To answer
   >your question, Macro-11.  Portability, who cares.  Data abstraction,
   >what's that? :-)
   >

   I stand corrected here.. now we're talking type checking and a great language
   for large multi-programmer projects. And just think.. it'll run on all those
   PDP's out there. :)

David Parnas is having a grand time doing verification on the system
actually.  Fortuneately, you only need 256K to run a nuclear power
station.  Talk about S/W bloat though.  One of the original power
stations here in Ontario runs on an anchient IBM machine with a
whopping 32 kwords of *CORE* (yes, the little magnetic donuts).  Now
they are up to 256K (no virtual memory either!).

   >Portability is often not an issue with real time systems because it is
   >expensive to change the hardware.

   I didn't mean just porting *my* code to new hardware. I meant being able to
   use the millions of lines of code already written to the hardware I'm already
   using. I port other peoples code to my platforms much more often than I port
   my code to other peoples platforms.

   For example, if I want to use a Kalman filter somewhere on my hardware,
   I don't need to write it, I only need to recompile it using someone
   else's code. Portability is *always* an issue. Why reinvent the wheel?
   Writing and testing software is VERY expensive. I would rather use everything
   I can find thats already been written and at most modify it to fit my needs.
   That way I can spend my time doing original work that hasn't already been
   done by someone else using existing code for the majority of the nuts and
   bolts kind of stuff. There are a lot of very sharp programmers out there
   that have written a lot of code. More than I and the rest of the programmers
   I work with could write. Therefore, I'd rather start where they left off
   rather than where they started.

   Also, if you write code that is portable, when you move on to a new project,
   with new hardware, a lot of the code is already written and you don't need
   to start from scratch... again...

Now you are talking about reuse.  Reuse was not an issue in the
real-time systems that I have delt with although it probably should
have been.  Unfortunately, reuse is a problem in the real world (eg,
the Not Invented Here Syndrome).  

For reuse in general, I would rather use a language where the
interface can be defined adequately (perhaps C++??).  Smalltalk is
quite nice in this area.

   > And if you change the hardware,
   >almost everything else changes too because much of the code deals with
   >all of those fancy devices you have hooked up to the system.

   Wrong... not if you write the device dependent code as separate modules
   that get called by device independent higher level routines with generic
   interfaces. We've used many different devices hooked to many systems and are
   able to use the same high level software on all of them. If we start
   a new project or move to new hardware, all we need to rewrite is the lowest
   level software which directly deals with the hardware... but that requires
   some knowledge of data abstraction in order to effectively write the
   interface.

Again, on the systems I worked on, changing hardware was a royal pain.
Manufacturing would scream.   Projects run over 10 year+ periods.

   >  The
   >RSX-system was designed to run for 30 years after a 10 year
   >development period.  The hardware chosen for the project was not the
   >newest or sexiest, but one that would probably still be available in
   >some form or another for the entire life span of the plant.
   >

   There is definitely something to be said for stability.. but if you'd written
   your code to be portable, you could replace the whole system in
   ten years with something higher performance and much cheaper. Ten years ago
   you couldn't do on a million dollar mainframe what you can do today on
   a twenty thousand dollar workstation... and if your code is portable, you
   have the option to use the new cheaper technology.

C is not the only "portable language".  It also can be quite
non-portable.  Try porting gnu-emacs to a 286 running UNIX.  (Can
gnu-emacs be ported to machine that cannot support calloc??? -- just
asking, I'm curious).  Recall the "all the world's a VAX syndrome.

Replacing control systems with the "latest and greatest" is not often
done.  Why bother?  Replacing means buying new hardware, which is
often NOT cheaper than leaving the old stuff alone.  (You would be
amazed at the musem pieces running some of the power stations here in
Ontario).


   >Don't get me wrong.  I do like C.  I use it all the time, but only on
   >software with small teams (< 5 people).  But I get scared when I
   >consider the consequences of large design teams (> 50 developers)
   >using it as *the* development language, especially on hardware with
   >minimal or non-existant memory management support.

   There are a lot of large groups doing programming in C with little
   evidence of problems. X-windows is written in C and was written
   by *many* programmers, especially if you also consider all of
   the contrib stuff. Then there's the Free Software Foundation whose
   editor (gnuemacs) and c compiler (gcc) are IMHO the best around.
   gcc even lets you give the compiler command line options to flag warnings
   much like lint so lint actually is part of the compiler... just like you
   wanted.

Funny, I have never heard anyone actually praise 'X' before :-) (eg:
Hugh Redelmeier: "the average pointer statistically points to
someplace in X").  Has anyone run a profiler on it???  (humour
impaired, add :-)).  GCC and GNU emacs are quite nice -- this posting
comes to you courtesy of the latter.  C is getting better w.r.t.
prototyping (took them long enough), but it is still a structured
assembler.  C++ is better still.  Why isn't lint built into *all* C
compilers?  Large projects can be done in C, but they an also be done
in assembler.  Type-safe languages just make the job *easier*, which
is the whole point.


   >  Fortran is no
   >better.  (I like Concurrent Euclid myself -- real time programming
   >made easy!  Who knows, I might even like Ada.)
   >

   I didn't think anybody liked ADA :)

I'm not particularly crazy about it either actually.   I guess the US
DOD likes it though.  Ada is also a 'portable' language.  Maybe that's
why they are using it.  
--
Greg Franks, (613) 788-2800 x5726         | "The reason that God was able to    
Systems Engineering, Carleton University, | create the world in seven days is   
Ottawa, Ontario, Canada  K1S 5B6.         | that he didn't have to worry about 
greg@sce.carleton.ca  ...!cunews!sce!greg | the installed base" -- Enzo Torresi