As regard usability and efficacy, has operating system design, jumped the proverbial shark?
We would proffer that the principle of compartmentation or modularity will foster continued operating system growth, efficiency, and usability. In the modularity design method, systems are designed through the introduction and implementation of “modules”. In this system each module is a self-contained component of the system, with its’ own assigned functionality, and with an interface that allows the various modules or components to communicate with one another.
This design tenet serves a number of very useful functions. One is that system errors and diagnostics may be localized, and another is that when enhancements are required it will be relatively easy to do so.
In the UNIX variants it may be said that the user, shell, kernel and hardware comprise these components. In UNIX, the shell is a command and programming language that provides an interface to the underlying operating system kernel. It can also be said that it is interface between the end-user and the OS by its’ ability to interpret commands.
The kernel is the bridge between applications and hardware components, and is the part of the OS that interacts directly with the hardware through the device drivers that are built into it. It is a vital component of the UNIX OS, by virtue of its’ role in resource allocation to the CPU and other I/O devices, memory management, and interrupt handling.
However, studies by (Black, et al., 1992) and others had shown a trend in operating system (OS) design towards micro-kernel based OS's. Micro-kernel based OS's allow high-level OS code to be structured as a collection of modules above a minimal kernel.
Nonetheless, despite the advantages of this modular approach, the performance overhead associated with existing modular implementations has proven to be a major liability in the commercial acceptance of these systems. (Bricker et al., 1991)
According to (Rashid et al., 1987) the micro-kernel approach to OS structuring does not lead to major improvements in portability i.e., the ability of a computer program to be used on an OS operating systems other than the one it was created for, without a great deal of re-programming. Or as is germane to this topic, portability is the ability of an OS to work on multiple hardware platforms.
Rashid states "that the modularity of most micro-kernel designs is coarse grained and orthogonal to the issue of localizing machine-dependent code, which limits portability by minimizing the amount of code that can be reused".
Yet, if we look at one of the UNIX variants, NetBSD, we see that it is capable of working with the following staggering 29 architectures, as are many of the variants:
Supported machines include:
Alpha CPU based machines from many vendors, Commodore Amiga (m68k and powerpc), ARC based MIPS machines, Acorn Archimedes, 32bit (Strong)ARM machines like DNARD Shark and CATS, Atari TT and Falcon, BeBox, Cobald Qube and RAQs, HP 300, MIPS based Handheld PCs, Intel Architecture PCs, m68k based Luna workstations, Macintosh (both m68k and powerpc based), m68k based VME boards, Sony NEWS (m68k and MIPS based), m68k poweres NeXT machines, Open Firmware PowerPCs, the pc532 experimental platform, MIPS based DecStations (pmax), PReP based PowerPC machines, MIPS based SGI machines, Hitachi's Super-H family, as found in many embedded systems, m68k, SPARC, HyperSPARC and UltraSPARC base Sun machines (and compatibles), DEC VAXen, and the Sharp X68030 series.
Supported CPUs include:
Alpha, Motorola m68k, (Strong)ARM, PowerPC, MIPS, Intel, National Semiconductors, Hitachi Super-H, SPARC, VAX.
Supported bus architectures include:
ATAPI, BIbus, CardBus, EISA, I2C, ISA, MII, MicroChannel, PCI, PCMCIA, QBus, SBus, TurboChannel, USB, VME, XMI (Feyrer, 2007)