# Terminology for the levels user programs go through to access hardware

I'm looking for the terminology to describe the stack between user level programs and the hardware. For example, in a typical non-virtualized environment, this stack is:

User program <-> Application Binary Interface <-> Operating System <-> Hardware


User level programs access the system calls through the ABI, and the OS executes the operation on the hardware on behalf of the program. In the other direction, data coming from the hardware is given to the OS, which passes it up to the program.

The terminology I've been using up to this point is application stack, but this term means something different.

-
"Hardware Abstraction Layer", but that's just the bit between the OS and the silicon; however, I think that "layers" is the standard term of art here. I like to call the OSI model the "7-layer Burrito", but I'm afraid I don't really have an equivalent for an individual computer. "The whole enchilada", perhaps? –  MT_Head Jun 17 '11 at 7:43

I thought this was called the platform, which is all the bits from hardware to just short of user programs. Or does that include too much?

-
If I combine platform with the term layers or domains, it should describe what I'm looking for. –  karategeek6 Jun 17 '11 at 13:40

The term I hear and use most often for this is operating system layers.

-
I'd say "layers" is the best word to describe this, and the OSI networking usage mentioned by @Unreason endorses it. –  njd Jun 17 '11 at 9:45
While this term does fit my needs, I think I prefer the term platform given by Kit. If after chewing on it for a while I find I've changed my mind, then I'll change my acceptance. –  karategeek6 Jun 17 '11 at 13:44

When describing system's architecture you can use:

-
The "OSI model" is normally used for networking. A nicely coloured chart of the OSI model can be found here: en.wikipedia.org/wiki/OSI_model#Description_of_OSI_layers –  Randolf Richardson Jun 17 '11 at 8:48
@Randolf Richardson, OSI model is a model of networking - I gave it only as (a well known) example of how the term layer is used in the industry. –  Unreason Jun 17 '11 at 8:56

Back in the 80386 era, we used to call them "rings."

The 80386 processor had four rings, starting at "ring 0" (which has access to everything) and ending at "ring 3." Most of the time we'd only use rings 0 and 3, with applications sitting in ring 3, and drivers and kernel code in ring 0, but eventually drivers were moved out of ring 0 and all four rings started getting used in more projects.

This information was not easy to come by, and Intel was a good source (but costly at first) with the machine language reference material. If you're looking for detailed technical information about this stuff, which is really in the arena of very low-level heart-of-the-OS-kernel ASM (Assembler, Machine Language) programming, then key phrases like "Global Descriptor Table," "Local Descriptor Table," "Flat mode," and "Protected mode" will be useful to you. The following web page will cover a lot of the details:

OS Developer Wiki - GDT tutorial
http://wiki.osdev.org/GDT_Tutorial

-
Wikipedia also knows the term and gives a decent overview: en.wikipedia.org/wiki/Ring_(computer_security) –  pinkgothic Jun 17 '11 at 10:31
My understanding of rings that they just describe the privilege level of instructions executing on the processor. They don't really capture the idea I'm looking for. The rings are fixed, what I'm trying to describe can be moved around and modified. Layers can be removed (by having programs directly interact with the processor, for example) or added (with virtualization). I am curious, however, what rings 1-3 are being used for. I know a virtualization technique is to run the virtualized enviornment on ring 1 or 2, but that's as far as my knowledge extends. –  karategeek6 Jun 17 '11 at 13:39