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