On Thu, 15 Apr 2021 at 21:57, Jon Brase <jon.br...@gmail.com> wrote:

I mostly agree with you. I would perhaps quibble with some details.

> Nope, I meant CPU. You start out with an unprotected CPU architecture like 
> the 8086. The OS is basically just a set of hardware access libraries that 
> applications can use or not as they wish (as they have direct access to the 
> hardware).

MS-DOS was so minimal that there is an argument that you can't call it
an OS at all. Many apps simply bypassed most of it and "hit the metal"
directly simply for speed; this is why "IBM PC compatible" became a
benchmark, and the MS Flight Simulator one of the acid tests of
compatibility. They are forgotten now, but there were once many MS-DOS
 computers that were not IBM-compatible. I personally worked on some
Apricot machines, but there were also Victor, Sirius and others, which
ran their own versions of MS-DOS but had totally different hardware
architectures, with ROM, I/O and video memory in different places in
the memory map. They could run clean legal DOS apps, but not IBM PC
apps... and in the end there were almost no clean legal DOS apps.

But it was a wider gamut than even that. A few of my employers'
customers ran Jarogate Sprite systems. The Sprite seems to be
forgotten by computer history; I can't find any Web coverage at all,
except passing mentions in 35-year-old magazine articles.

The Sprite was a small, desktop, x86 minicomputer. The machines had no
video adapter at all, not even text, and no keyboard interface. The
computers were totally headless; it was only possible to interact with
them via serial terminals. They had multiple RS-232 ports on the back
and could drive 4-16 dumb terminals -- typically Wyse-60 or similar
terminals. They ran DR Concurrent CP/M; each terminal got a DOS
prompt. They were used for things like multiuser accounts packages,
where each terminal ran an instance of the app, all sharing one global
shared set of files. In the early 1980s this was _much_ cheaper than a
set of separate computers and a network... each terminal was cheaper
than just a network card, let alone the PC with the network card in!

I helped with migrating data off one onto a Microchannel Apricot
server running SCO UNIX (the successor to SCO Xenix). The data files
were some hundreds of megabytes; the Sprite had a big hard disk for
the time, and a 1.2MB 5.25" floppy drive. We were glumly looking at
using about a hundred floppies, and of course, a single read-write
error would mean we had to start again.

I had a brainwave. I copied PK-Arc onto the Sprite with a floppy. It
was the forerunner to PK-Zip, and it was a DOS-legal app. It just did
console output; no graphics, no box-drawing, no cursor control. It ran
fine under CCP/M. I was able to compress the accounts data on the
Sprite, from hundreds of meg down to a few meg per file, and each file
only needed to be split into 2 or 3 parts to fit on a floppy. A task
we thought would take days was finished in a few hours... thanks to an
old clean, DOS-legal app.

The reason for this anecdote being that it partly falsifies your
statement that:

> (the 286, of course, didn't have a way of running 8086 code with protection 
> enabled)

It did. It was just very uncommon.

https://books.google.cz/books?id=2y4EAAAAMBAJ&pg=PA17&redir_esc=y#v=onepage&q&f=false

http://bidmeadia.blogspot.com/2006/05/surviving-big-blue.html

> it immediately opens up this can of worms, because back compatibility with 
> applications that access the hardware directly often requires that they 
> continue to be allowed hardware access, while system stability with multiple 
> legacy OS instances running tends to demand that they not be allowed hardware 
> access.

Once upon a time there were a set of specifications for processor
architectures to be able to run a hypervisor. They were called the
Popek & Goldberg requirements.

https://en.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirements

x86-32 did not have them, so everyone thought x86 couldn't do it.

But by the late 1990s, companies were emulating the entire x86
instruction set: e.g. Connectix' Virtual PC for PowerPC Macs running
Classic MacOS let you boot and run a complete 386 PC OS, including
Linux, on a Mac.

https://en.wikipedia.org/wiki/Connectix

It is not generally understood but this is how VMWare worked. They
emulated the 386 on the 386, or rather the Pentium. The emulator ran
Ring 2 stuff  directly on the metal and when it switched to Ring 0 for
hardware access, VMware just ran that code in its software x86
emulator.

That is how VMware virtualised an un-virtualisable architecture. And
since in a proper grown-up OS that makes use of protection levels
(e.g. Linux or WinNT), most of the time code is executing in Ring 2,
it was quite efficient and surprisingly fast.

I interviewed the founder and "lead scientist" of Connectix,  Jon
Garber, about porting VirtualPC from MacOS on PowerPC to Windows on
x86, and he said "it's very efficient. What you want when doing CPU
emulation is a nice close match between host architecture and emulated
"guest" architecture. The ideal is a 1:1 mapping of instructions. You
might be surprised, but when doing x86 on x86, they're a really good
match!"

So VMware became a hit, VirtualPC sold well on its coattails, and
Intel and AMD responded by adding virtualisation instructions to their
hardware architectures.

https://en.wikipedia.org/wiki/X86_virtualization#AMD_virtualization_(AMD-V)

Running x86 code on x86 goes back a lot further than you might think.
It goes back to the early 1980s, and the 386 was merely the first x86
chip to add hardware acceleration with Virtual86 mode.

> So there is inevitably an incremental transition process, rather than an 
> immediate snapover to a fully protected environment. The PC wasn't the only 
> hardware platform and DOS wasn't the only OS that this happened to.

I am curious. Aside from mainframes or minicomputers, what other
architectures gradually added hardware protection and virtualisation
features which the OS then supported?

MacOS never got proper memory protection. Nor did AmigaOS on 680x0.
Atari TOS never did; MiNT is all-software.

Commodore Unix on the Amiga 3000/4000 did but could not run AmigaOS apps.
Atari Unix on the TT, ditto.
Acorn RISC-iX on the R-series ARM workstations, ditto. RISC OS never
supported this.
Ditto QDOS, Minerva or SMSQ/E on the QL and its clones.

I can't think of any other micro architecture that really did. Maybe
Microware OS-9?

> Of course, talking about this process in the present tense, as if it's 
> something that still happens today, may not be the best, as any unprotected 
> architecture introduced with modern transistor budgets likely has a specific 
> purpose like hard realtime and will never see a transition to a protected 
> architecture, and any general-purpose architecture introduced today is almost 
> certain to have memory protection.

Agreed.


-- 
Liam Proven – Profile: https://about.me/liamproven
Email: lpro...@cix.co.uk – gMail/gTalk/gHangouts: lpro...@gmail.com
Twitter/Facebook/LinkedIn/Flickr: lproven – Skype: liamproven
UK: +44 7939-087884 – ČR (+ WhatsApp/Telegram/Signal): +420 702 829 053


_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to