12

In this question:

Why was the DOS kernel discarded?

I was told that DOS is not a kernel. It runs on CPUs that don't even have kernel mode. So how can it be a kernel? So I think this is right.

Now if DOS is not a kernel and the NT kernel comes later (on 2000/XP/Vista...):

What is the Windows 95/98/ME kernel called?

23
  • 8
    IDK, but I feel as if the idea that an OS kernel should have its own name, distinct from the name of the rest of the OS, is a fairly new idea. The oldest example I can think of is Linux, which got to have its own name by virtue of the fact that Linux is nothing but a kernel. Nov 29, 2022 at 16:55
  • 12
    The Mach kernel was created in 1985… Nov 29, 2022 at 17:09
  • 10
    It is a leap to assume that an 'OS kernel' must run in some CPU 'kernel' mode, or that the thing running in kernel mode is called the 'kernel'. All 'kernel' means is that it's the thing at the centre. FWIW, RSX-11M didn't have a 'kernel' at all - it had an 'executive' (which ran in CPU kernel mode, if running on a PDP-11 model that had memory management.
    – dave
    Nov 29, 2022 at 18:23
  • 13
    Claims that DOS is ‘not a kernel’ or ‘not really an operating system’ are just snobbery. DOS does what kernels do: provides file system and device abstractions (PRN, AUX, the RTC), manages memory and processes. The only major thing it lacks is concurrency, and even that can be worked around with TSRs and multitaskers like DESQview… and later, in fact, Windows. Nov 29, 2022 at 21:38
  • 6
    @user3840170 I would think this is to be seen in context. For a DOS environment, MSDOS-SYS is the kernel, but in 16 bit Windows DOS becomes an access layer used by the Windows kernel (KERNEL/KRNL286/KRNL386). Likewise later KERNEL32 for 32 bit Windows.
    – Raffzahn
    Nov 29, 2022 at 23:34

3 Answers 3

21

Does the kernel of Windows 95/98/ME have a name?

Other than Kernel? No, not a sharp and distinct one, as it's all about what one calls a kernel, so any naming is usually about mutiple components. If one really wants to point to a single most important file, it'll be KRNL386 and WINDOWS32.


I was told that DOS is not a kernel.

Erm, no. The point of the answer wasn't that DOS isn't a kernel, rather that DOS is not the Kernel of Windows, but an access layer used by Windows.

For a DOS environment, MSDOS-SYS is the kernel - or Supervisor as such entity was originally called (*1).

It runs on CPUs that don't even have kernel mode. So how can it be a kernel? So I think this is right.

No. Something being a kernel is not depending on any hardware support (or mode). Otherwise many classic OS, including early Unix, would not have a kernel

In fact, there is much room argueing what a kernel is. Just note the long section about rather divergent architectures in the Wiki entry for Kernel. In it's original definition, as a Supervisor, it's the component that takes and manages all system calls an application issues.

Taking that definition then we get roughly the following assignments for what could be considered the Kernel:

  • For MS-DOS Environment:
    • MSDOS.SYS is providing services via various INT calls
  • For 16 Bit Windows on 8086:
    • KERNEL is the Kernel
  • For 16 Bit Windows on 80286:
    • KRNL286 is the Kernel
  • For 16 Bit Windows on 80386:
    • KRNL386 is the Kernel
  • For 32 Bit Windows
    • KERNEL32 dows the job

Of course, there are more parts to Windows which may or may not count as part of a 'kernel', like USER or GDI (2), so it all depends on the context one is looking at the issue. With 32 Bit Windows the whole part gets even more blurry as the API is not only packeaged in its own system library(s), but what this library is changes from a kernel part to a mere interface library in later versions.

Long story short: It's complex :))


*1 - Or as complete picture in terms as they were first structured:

  • IO.SYS (*3) is the Hardware Abstraction Layer (HAL)
    • Its function is to present physical hardware in machine independed way to the Kernel - in other OS, like Linux, this may be part of the kernel
  • MSDOS.SYS is the Supervisor
    • The part that takes and handles all system calls
  • COMMAND.COM is the Monitor
    • The part that manages jobs consissting of more than a single program run

*2 - KERNEL/KRNL286/KRNL386 presents the OS part of Windows. It covers everything (relevant) that without Windows woudl be offered by DOS - if at all. Windowing is provided by USER, while GDI does the same for all drawing on output devices (including the canvas of a window). KERNEL

*3 - Plus all optional runtime loaded drivers.

24
  • 1
    @somega First of all, Kernel is just another word for Supervisor. Supervisor is the older term. Second, 'preventing' programs from anything isn't a basic requirement for the task of providing services. Memory protection a complete seperate issue - much like virtual addressing or virtual (swaped/paged) memory or many other items people today take as granted within a modern system.
    – Raffzahn
    Nov 30, 2022 at 12:45
  • 1
    @somega Don't twist my words. I said the definition can be complex. I go with a simple one: Kernal is what offers services. No matter what services. Next, note the 'or' between the examples made. The same way virtual addressing (virtual addressing and!= virtual memory != swap) is optional, so is memory protection or multi tasking. These are services a kernel may offer, but they don't define what a kernel is. Making that a base requirement would mean that many OSes have no kernal. Including several UNIXes. Sounds wrong, doesn't it?
    – Raffzahn
    Nov 30, 2022 at 14:26
  • 3
    @somega "Any other answer is absurd" is a non-argument. I certainly don't find in absurd to imagine a system with a kernel, and most user-space programs running kernel mode, with untrusted programs running in user mode. That someone defined a system mode as kernel mode doesn't mean that everything running in that mode is kernel or that only things running in that mode are kernel.
    – prosfilaes
    Nov 30, 2022 at 20:42
  • 4
    @somega If you try to play a retroactive word game, tell me what it is with a CPU that does not have a Kernel Mode, but a Supervisor Mode? You may be quite lonely by insisting that OSes like Xenix, AmigaOS or ELKS do not have a kernel :)) Your Argumentation puts the cart before the hores. Kernels have existed before CPUs had a kernel mode. Kernel mode is a later hardware enhancement to ease creation of less dependent kernels.
    – Raffzahn
    Dec 1, 2022 at 1:25
  • 2
    @zomega If you want to make up your own definition of what a kernel is, then there's no real point discussing what a kernel is, because from your perspective it's whatever the heck you want it to be. However, if you are interested in the actual definition then you should probably listen to what other people are telling you and revise your opinion. Given that kernel mode is a tool to help writing kernels, your argument is a bit like saying "It's not a cycle, because it's not in a cycle lane".
    – HappyDog
    Dec 3, 2022 at 9:05
31

It is called the kernel; if the context isn’t clear, the “Windows 95 kernel” or whatever version is appropriate. Technical analyses (such as Unauthorized Windows 95) usually distinguish different parts of the operating system kernel, typically the DOS kernel (IO.SYS/MSDOS.SYS or WINBOOT.SYS), the “Win 16” kernel (KRNL386.EXE), the Win32 kernel (KERNEL32), and the Virtual Machine Monitor (which is arguably the “real” operating system in Windows 3.x onwards), but it is all just called the kernel.

Windows’ core services are split up into well-identified components, such as the aforementioned VMM, GDI, USER32, DOSMGR, etc. It’s common for these to be named explicitly in discussions involving them.

17
  • 10
    Don’t forget the VMM. (Which is probably more deserving of the ‘kernel’ name than KERNEL32, which is just a DLL file running in user mode…) Nov 29, 2022 at 17:10
  • 3
    Seems it's legit to say DOS is part of the kernel in Win9x/ME. So to say MSDOS is not a kernel is not 100% correct.
    – zomega
    Nov 29, 2022 at 19:45
  • 2
    Yes, and I don’t think I ever said so (not that I’m saying you’re saying I said so, if you follow me). Nov 29, 2022 at 20:07
  • 4
    That’s how I understood it. I suspect that if you were to ask a question on whether DOS is a kernel or not, it would be closed as seeking opinion-based answers ;-). Nov 29, 2022 at 20:16
  • 4
    "As standalone OS DOS is an OS without kernel" how should that make sense? There is no OS without a kernel, as that is by definition the part that provides services.
    – Raffzahn
    Nov 30, 2022 at 12:58
13
+200

As I've said at http://jdebp.info/FGA/operating-system-nut-metaphor.html and at https://superuser.com/a/329479/38062 , this terminology is fairly foreign to the world of MS-DOS, and CP/M before it, in the first place. Always remember: these terms are metaphors. They don't have exact meanings, and arguing whether the "DOS kernel" was discarded or the "DOS part" was discarded or the "DOS foundation" is discarded is really putting too much of a specific meaning into a term that only really means the inner part an operating system when viewed through the analogy of a nut.

The architecture of DOS+Windows 95/98/ME actually has a lot of layers (ROM firmware, DOS layer, virtual machine manager, Win16 layer, Win32 layer, Explorer shell, command processor, and housekeeping utility programs), and how well one can match it up with a simplistic nut metaphor is confounded by how one is viewing it at the time. More realistically, it's more of an onion than a nut, but even that is a simplification, as the layering is not uniform in every aspect.

Some people like to place a single boundary at the Win16 API, and view what is inside that as "the kernel"; but there are at least three boundaries that can be viewed as where the "system calls" are, and which boundary encloses "the kernel" really depends from which boundary one is focussing upon.

Similarly, there are bits actually named "kernel" in their filenames, but that only form parts of the layer at their particular levels. The KERNEL.DLL is only a part of a layer that also encompasses things like USER.DLL, and SYSTEM.DRV.

And the design heritage goes back as far as CP/M, which didn't really have this terminology in the first place. CP/M was not modelled as a "kernel" and a "shell", and people did not really use that metaphor for its architecture at the time. MS-DOS inherited the CP/M way of viewing an operating system architecture, and the way that MS-DOS evolved into DOS+Windows 95/98/ME did not happen along the lines of an operating-system-as-a-nut metaphor.

People who got hung up on their notion that MS-DOS was not a "kernel", forgot that MS-DOS wasn't the only thing that got set aside. Windows NT not only didn't share the underpinning MS-DOS, it didn't share the VMM architecture, the VxDs, or even the way that the 32-bit system was layered over the 16-bit system. They should have pulled you up on your idea that it was "DOS" that was discarded, whether or not one could view that as a "kernel" of a metaphorical nut. A whole lot more was discarded, and re-architected in a very different way.

Finally: Do not conflate the "kernel" of an operating system with "the part that runs when the processor is in supervisor mode". "kernel" is not that precise a term, and there are operating systems for processors that have user/supervisor mode distinctions where "the bits that are internal to the system call interface" (one way that people sometimes choose to define a "kernel") run partly or even wholly in the processor's user mode. Not only is this is a metaphor, not a precise term with one definite meaning, but also it is not necessarily a metaphor aligned with processor modes, or even one that is limited to operating systems with processor modes.

13
  • 3
    @somega Consider that Unix has been ported to the 8086, once by none other than Microsoft. The 8086 has no kernel mode, but you’d be hard-pressed to say that Unix has no kernel. Nov 30, 2022 at 15:55
  • 2
    @somega - in Windows, the kernel and the exec both run in kernel mode. And for systems in general, loadable drivers are not considered to be 'part of the kernel', even if they have code which runs in the privileged processor modes (note that x86 doesn't even have a "kernel mode"). You're trying to make a word have a crisp meaning that it actually does not possess.
    – dave
    Nov 30, 2022 at 17:38
  • 1
    @user3840170 - NT uses a layered model. The kernel is basically CPU dispatching, exception handling, and a few other very low-level things. The exec provides the 'services' - process management, object management, I/O, etc.
    – dave
    Nov 30, 2022 at 20:27
  • 2
    @somega - only Commodore machines have a 'kernal' :-)
    – dave
    Nov 30, 2022 at 20:29
  • 2
    @zomega "Some say everything running in kernel mode is considered kernel." - as far as I can see from the answers and comments on this page, only you say that. That makes it something of a "Humpty-Dumpty definition" - "When I use a word, it means just what I choose it to mean — neither more nor less."
    – IMSoP
    Dec 1, 2022 at 18:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .