Deutsch English Français Italiano |
<vq2etn$rc6$1@reader1.panix.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.misty.com!weretis.net!feeder9.news.weretis.net!panix!.POSTED.spitfire.i.gajendra.net!not-for-mail From: cross@spitfire.i.gajendra.net (Dan Cross) Newsgroups: comp.lang.c,alt.os.development Subject: Re: [OSDev] How to switch to long mode in x86 CPUs? Followup-To: alt.os.development Date: Sun, 2 Mar 2025 20:26:31 -0000 (UTC) Organization: PANIX Public Access Internet and UNIX, NYC Message-ID: <vq2etn$rc6$1@reader1.panix.com> References: <871pvje5yq.fsf@onesoftnet.eu.org> <JdFwP.46247$SZca.36276@fx13.iad> <87v7ssi2ec.fsf@example.com> <cU%wP.111376$_N6e.73667@fx17.iad> Injection-Date: Sun, 2 Mar 2025 20:26:31 -0000 (UTC) Injection-Info: reader1.panix.com; posting-host="spitfire.i.gajendra.net:166.84.136.80"; logging-data="28038"; mail-complaints-to="abuse@panix.com" X-Newsreader: trn 4.0-test77 (Sep 1, 2010) Originator: cross@spitfire.i.gajendra.net (Dan Cross) Bytes: 6274 Lines: 106 [Note: Following up to alt.os.development] I think there's an interesting discussion to be had here, but I think it would be best outside of comp.lang.c. I wish there was a comp.* group for this (bring back comp.os.research!) but alt.os.development is probably closest. In article <cU%wP.111376$_N6e.73667@fx17.iad>, Scott Lurndal <slp53@pacbell.net> wrote: >Salvador Mirzo <smirzo@example.com> writes: >>[snip] >>Would you elaborate or point out an article or book that could clarify >>the ideas that have made you to make such remark? Sounds interesting. > >When the BIOS (as was originally intended) controls all the I/O interfaces, >it fundamentally limits access to new and experimental devices, and limits >the ability to generationally improve the hardware (e.g. Compare NVMe driver >interface with a legacy ISA device vis-a-vis the OS interface to the device). It certainly means that, for example, an OS-provided filesystem that can only access a storage device via the BIOS can't use those devices. These primitive early PC "operating systems" didn't provide any real memory safety, or try to prevent programs from accessing the hardware directly, bypassing the OS. So in theory a user program could talk directly to the device, but then it has to go implement a filesystem (or something equivalent) itself, and every program that wants to use that data has to know how to talk to that device. That obviously defeats the purpose of having the OS provide the abstraction. >It requires the mainboard manufacturer that provides the BIOS include >support for all new third-party hardware innovations. Given the BIOS >was orignally a ROM, such systems were extremely difficult to update >and there was no way to accomodate new third-party hardware without >bypassing the BIOS entirely. +1e6 >The expansion ROM on PCI was an attempt to remedy this, but clearly >falls short when supporting multiple hardware families (e.g. various >RISC and CISC architectures) pushing the burden to support new >or different operating systems upon the device hardware manufacturer; >which either requires differnent SKUs for each generation of each >supported processor family, a significant burden on the device hardware >manufacturer. I'm going to quibble with this one a little bit. To my mind, modern firmware, including BIOS-like systems, provides three fundamental facilities: 1. It provides an abstraction interface for systems software, both the traditional BIOS role, but also a way to decouple emulate legacy hardware interfaces so that hardware advances are decoupled from systems software. Consider running DOS on a machine with a USB keyboard and mouse; "BIOS" gives me a way to emulate an AT or PS/2 keyboard. (Don't get me started on the dumpster fire that is SMM.) 2. It's a place to do all sorts of platform enablement. For example, on modern x86 systems, firmware does DRAM timing training, IO bus enumeration and initial allocation and assignment of physical address space for MMIO, bridge assignment and configuration, etc. 3. It solves a necessary bootstrapping problem. Often, an operating system is installed on some storage device that sits on some controller somewhere. But in order to load the OS, I have to be able to initialize and drive the controller "enough" to be able to load the OS (or at least some kind of boot loader that knows to to load the OS). Firmware that understands enough of the platform to do the bare minimum to drive hardware and load a more elaborate bootstrap let's me boot a real system. Options ROMs were meant as part of the solution to last problem: give the hardware enough smarts so that very simple code running in a very constrained early boot environment could get something from the device itself that lets the firmware drive the device well enough to load more capable software from it. With a well-defined and sufficiently capable interface between the option ROM and firmware, third-party hardware designed well after a system was put in place can be used on that system, provided the OS it uses has been updated so that it can drive the new hardware. I don't think this is a bad way to do things, to be honest; interfaces are fundamental for isolation in software. And the way that OpenFirmware did it was actually pretty nice: provide an interpreter for a sufficiently general language (FORTH) in firmware, and store little programs in that language in ROM on the device that let firmware drive the device enough to load a real OS. Pair firmware with a little bit of non-volatile storage like battery-backed CMOS so that you can store a few variables, and you're good to go. But of course, the expression of the idea in UEFI has become a bloated and insecure mess that creeped into everything, and you can't really get rid of it, even once the OS is running. >BIOS is a least-common-denominator hardware abstraction interface. This times 100. BIOS wasn't just there to bootstrap, it was meant to be _the_ interface to the hardware, as you point out. That was fine on the anemic Z80-based machines that CP/M ran on, but it's awful once you want to do something more complex. - Dan C.