From: Michael Wojcik on
Kerry Liles wrote:
> "Nomen Nescio" <nobody(a)dizum.com> wrote in message
> news:487250e8e05e60d55f2c4238a0799db0(a)dizum.com...
>> What's a "stack machine"? None of the IBM hardware is stack-based,
>> although
>> MVS/ESA did introduce the Linkage Stack, it is only used for saving state,
>> and not general purpose storage. There is no hardware notion of heap,
>> stack, etc. in IBM-land, and not in most IBM system software, either.
>
> I took it to mean "hardware support (instructions) permitting the
> implementation of stacks"

A bit stronger, I think. Obviously the 360 has instructions that
*permit* implementing a stack (as does any machine that's equivalent
to a Turing machine, or even one that's equivalent to a PDA). "Stack
machine" usually refers to an architecture that assumes and requires a
stack, or at least is significantly crippled without one.

If you look at the Intel x86 architecture, for example, you can see
how it's designed around a stack. There's a dedicated stack-pointer
register (ESP, or SP in the 16-bit x86s) and many operations update
ESP and/or the stack itself. The call/return mechanism - which is
built into the CPU architecture (via operations like call and ret),
and not simply a convention - relies on the stack. So does interrupt
handling.

--
Michael Wojcik
Micro Focus
Rhetoric & Writing, Michigan State University
From: Michael Wojcik on
WangVS wrote:
> Richard fully understands the points I have been trying to make about
> the Wang VS OS environment being a fully multitasking environment that
> nicely manages resources for hundreds of concurrent tasks sharing
> access to the key business files. It's a full-fledged multiuser OS.
> Many such existed while MS took 10-15 years to rediscover OS
> technology and finally developed NT using a crew from DEC.

The virtues of Wang VS OS aside, this snip at Microsoft is
historically inaccurate (and doesn't contribute anything to your
thesis, I think).

Microsoft had a multitasking, multiuser OS long before Windows NT -
Xenix. NT development started in 1989 (when it was still slated to
become OS/2 3.0); Xenix was written in 1979. Some sources claim that
Xenix (either from Microsoft or from SCO, which bought the sources
from Microsoft around 1980) was the most widely installed Unix flavor
in the early '80s. Plenty of people at Microsoft in the late '80s had
experience with multiuser OSes.

And while Cutler certainly brought a number of people (mostly from VMS
development) to Microsoft from Digital, NT was by no means simply
created by "a crew from DEC". It incorporated significant existing
technology from Windows and OS/2; I suspect the POSIX subsystem
inherited bits of Xenix as well.

And, of course, Microsoft also had experience with multitasking, if
not multiuser, OS development with OS/2 prior to the breakup with IBM.
(Multiuser OS/2 was eventually developed by Citrix around 1991.)

The fact of the matter is that the market for a multiuser OS on x86
hardware was orders of magnitude smaller than the market for Windows
and other single-user systems, until larger i368 machines started
coming out. Xenix was available, and people who wanted a multiuser OS
on such machines could get it. Eventually it was joined by BSD386 and
Linux, specialty OSes like Citrix's multiuser OS/2, experimental or
educational OSes like Minix, etc. But most PC owners ran MS-DOS,
Windows, or OS/2, because they neither needed nor wanted a multiuser
OS. It's not because Microsoft didn't know how to create one.

--
Michael Wojcik
Micro Focus
Rhetoric & Writing, Michigan State University
From: Richard on
On Apr 9, 5:06 am, "Kerry Liles"
<kerry.removethisandoneperiod.li...(a)gmail.com> wrote:
> "Nomen Nescio" <nob...(a)dizum.com> wrote in message
>
> news:487250e8e05e60d55f2c4238a0799db0(a)dizum.com...
>
> > "Kerry Liles" <kerry.removethisandoneperiod.li...(a)gmail.com> wrote:
>
> >> True, but the Wang VS was based closely on the IBM 360, which I
> >> believe was not a stack machine.  From its early origins in the late
> >> 1970s the Wang VS was designed with hardware and software use of
> >> stacks clearly in mind, just as it was designed to be interactive.
>
> > What's a "stack machine"? None of the IBM hardware is stack-based,
> > although
> > MVS/ESA did introduce the Linkage Stack, it is only used for saving state,
> > and not general purpose storage. There is no hardware notion of heap,
> > stack, etc. in IBM-land, and not in most IBM system software, either.
>
> I took it to mean "hardware support (instructions) permitting the
> implementation of stacks"
> As I mentioned, one can always implement the use of stacks via software, but
> the post I replied to indicated the Wang VS (machine?) had hardware-based
> stack support like push and pop instructions (for example). With the speed
> of hardware these days, it seems less relevant whether such things are
> implemented in hardware or software...

There is a significant relevance whether a machine is stack based or
not in the style of programming languages.

Stack based machines led to C and Pascal style languages where
parameters are passed by pushing on the stack and using a CALL which
pushes the return address which is popped by the return instruction.
The difference between C style and Pascal style is which end of the
call does the parameter clean up.

Non-stack machines led to self-modified code and branching style of
languages. COBOL for example had a no-op EXIT statement, or an implied
one, that acted as the return when the PERFORM statement was
implemented by storing the return branch in the the address of the
EXIT statement and then branching to the label.

The rules of COBOL, such as those on overlapping PERFORMs, cater for
this mechanism.

I presume that 'modern' IBM Cobol does not do it this way anymore and
uses, say, a software stack. Or does IBM big iron instruction set
actually have a stack these days.

Note also that CALL did not get into the COBOL standard until '74.
This meant that COBOL programs tended to become huge monoliths using
PERFORMs only as this is what non-stack machines do.

> in the old days (say, the mid 1970s)
> hardware assist was a significant performance boost and worth the effort in
> microcode.

From: robertwessel2 on
On Apr 8, 4:08 pm, Richard <rip...(a)Azonic.co.nz> wrote:
> On Apr 9, 5:06 am, "Kerry Liles"
>
>
>
>
>
> <kerry.removethisandoneperiod.li...(a)gmail.com> wrote:
> > "Nomen Nescio" <nob...(a)dizum.com> wrote in message
>
> >news:487250e8e05e60d55f2c4238a0799db0(a)dizum.com...
>
> > > "Kerry Liles" <kerry.removethisandoneperiod.li...(a)gmail.com> wrote:
>
> > >> True, but the Wang VS was based closely on the IBM 360, which I
> > >> believe was not a stack machine.  From its early origins in the late
> > >> 1970s the Wang VS was designed with hardware and software use of
> > >> stacks clearly in mind, just as it was designed to be interactive.
>
> > > What's a "stack machine"? None of the IBM hardware is stack-based,
> > > although
> > > MVS/ESA did introduce the Linkage Stack, it is only used for saving state,
> > > and not general purpose storage. There is no hardware notion of heap,
> > > stack, etc. in IBM-land, and not in most IBM system software, either.
>
> > I took it to mean "hardware support (instructions) permitting the
> > implementation of stacks"
> > As I mentioned, one can always implement the use of stacks via software, but
> > the post I replied to indicated the Wang VS (machine?) had hardware-based
> > stack support like push and pop instructions (for example). With the speed
> > of hardware these days, it seems less relevant whether such things are
> > implemented in hardware or software...
>
> There is a significant relevance whether a machine is stack based or
> not in the style of programming languages.
>
> Stack based machines led to C and Pascal style languages where
> parameters are passed by pushing on the stack and using a CALL which
> pushes the return address which is popped by the return instruction.
> The difference between C style and Pascal style is which end of the
> call does the parameter clean up.


That's not really true. Consider almost all RISC machines, all of
which were specifically designed to execute C. Most of them have no
more hardware stack support than S/360 did. They *do* have a bunch of
general purpose registers (typically 32, vs. S/360's 16), and the
software convention usually dedicates one of those to being a stack
pointer. Not unlike how R13 is dedicated to point to a chain of save
areas in the typical S/360 conventions. And most RISC call
instructions are exactly like BAL or BALR, in that they leave the
return address in a register (although they don't mess up the high
byte).


> Non-stack machines led to self-modified code and branching style of
> languages. COBOL for example had a no-op EXIT statement, or an implied
> one, that acted as the return when the PERFORM statement was
> implemented by storing the return branch in the the address of the
> EXIT statement and then branching to the label.
>
> The rules of COBOL, such as those on overlapping PERFORMs, cater for
> this mechanism.


There were certainly architectures that made implementing a stack
painful. And Cobol was targeted at those as well as more general
purpose machines (like S/360). By not having local variables, and
forbidding recursion, a non-stack implantation is plausible. Given
that it also more precisely defines your memory requirements, it was
undoubtedly an appealing concept to some language designers of the
day, especially given that they were heavily influenced by assembler
coding practices. I'm not sure where the PERFORM range insanity came
from, although I think it was there in Cobol from the start, but it
certainly isn't something that was copied by any other languages. And
while the PERFORM range nonsense does make a clean stack
implementation basically impossible, avoiding that, like Fortran did,
would have allowed both types of implementation.

IMO, Cobol's "subroutine" design was simply a huge mistake. Trying to
tie it to the architectural issues of stack, vs. non-stack designs is
simply wrong.

And Algol (which is generally considered to be where all of the “C and
Pascal” style languages come from, was certainly implemented on many
machines of that era, both stack and non-stack.


> Note also that CALL did not get into the COBOL standard until '74.
> This meant that COBOL programs tended to become huge monoliths using
> PERFORMs only as this is what non-stack machines do.


I'm pretty sure that CALL was implemented much earlier than that on S/
360 compilers, and on many other as well. And on S/360 they still
followed the R13-based calling convention.

Finally, "stack machine" actually means a couple of different things.
In one sense it does mean hardware support for a stack. In another
sense, it means a machine that uses the stack for operands (IOW, the
"add" instruction adds the two words on the stack, and pushes the
result back, rather than adding the contents of two registers) like
many of the Burroughs machines, or the more modern Forth machines.
Again, that's not particularly related to the design of any particular
language.

Which is not to say that some hardware "features" might not make
certain language features problematic (or at least unpleasantly
expensive). Consider the PDP-8 which stored the return address for a
call in the first word of the called subroutine. Implementing
recursion is clearly a problem on such a machine (but the scheme would
not have helped implement PERFORM ranges either - which requires the
return address be stored somewhere accessible at the end of the "THRU"
paragraph).

From: Richard on
On Apr 9, 6:04 am, Michael Wojcik <mwoj...(a)newsguy.com> wrote:
> WangVS wrote:
> > Richard fully understands the points I have been trying to make about
> > the Wang VS OS environment being a fully multitasking environment that
> > nicely manages resources for hundreds of concurrent tasks sharing
> > access to the key business files.  It's a full-fledged multiuser OS.
> > Many such existed while MS took 10-15 years to rediscover OS
> > technology and finally developed NT using a crew from DEC.
>
> The virtues of Wang VS OS aside, this snip at Microsoft is
> historically inaccurate (and doesn't contribute anything to your
> thesis, I think).
>
> Microsoft had a multitasking, multiuser OS long before Windows NT -
> Xenix.

Xenix was a licenced Unix edition 6 or 7. Most of the development work
was done under contract by Doug and Larry Michels who were 'Santa Cruz
Operation'.

MS also had a multitasking version of MS-DOS: 4.0 and 4.1 (not to be
confused with the much later 4.01). These were not very good.

> NT development started in 1989 (when it was still slated to
> become OS/2 3.0); Xenix was written in 1979. Some sources claim that
> Xenix (either from Microsoft or from SCO, which bought the sources
> from Microsoft around 1980) was the most widely installed Unix flavor
> in the early '80s. Plenty of people at Microsoft in the late '80s had
> experience with multiuser OSes.

MS used Xenix inhouse until at least 1989. This was mostly for
accounting but some development of MS-DOS software was done on it
during the 80s.

> And while Cutler certainly brought a number of people (mostly from VMS
> development) to Microsoft from Digital, NT was by no means simply
> created by "a crew from DEC". It incorporated significant existing
> technology from Windows and OS/2; I suspect the POSIX subsystem
> inherited bits of Xenix as well.
>
> And, of course, Microsoft also had experience with multitasking, if
> not multiuser, OS development with OS/2 prior to the breakup with IBM.
> (Multiuser OS/2 was eventually developed by Citrix around 1991.)
>
> The fact of the matter is that the market for a multiuser OS on x86
> hardware was orders of magnitude smaller than the market for Windows
> and other single-user systems, until larger i368 machines started
> coming out. Xenix was available, and people who wanted a multiuser OS
> on such machines could get it.

DRI's Multiuser MP/M on 8085/Z80 was released in 1978. MP/M-86 on 8086
and 8088 in 1981. Concurrent-CP/M-86 and Concurrent-DOS in the very
early 80s and was developed right through the 90s. These were much
more popular than Xenix especially in Europe.

> Eventually it was joined by BSD386 and
> Linux, specialty OSes like Citrix's multiuser OS/2, experimental or
> educational OSes like Minix, etc. But most PC owners ran MS-DOS,
> Windows, or OS/2, because they neither needed nor wanted a multiuser
> OS. It's not because Microsoft didn't know how to create one.
>

Microsoft did not create Xenix. MS-DOS 4.0 and 4.1 were poor. OS/2 was
written to IBM's specification and used IBM's technology which was
taken by MS to make Windows 286 and 386 modes useful. It was Citrix
that made OS/2 multi-user and later made NT 3.x multi-user as well.
NT's later Terminal Server was built using Citrix's technology
acquired when MS refused to let Citrix have NT 4 source code unless MS
could have free access to all Citrix code.

Multi-user systems are required when shared data systems are used. Of
course this may just be a multi-user shared file system such as
Netware (or previously Corvus shared disks and such).


> Michael Wojcik
> Micro Focus
> Rhetoric & Writing, Michigan State University

First  |  Prev  |  Next  |  Last
Pages: 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Prev: Oracle free to use release question
Next: Function Reverse