Road to Modern Operating Systems
THARINDU WEERASINGHE - Computer Engineer
Over
the years, there has been a gradual evolution of the structure and
capabilities of the operating systems. In recent years many new design
elements have been introduced into both new and new releases of the
existing operating systems.
Modern operating systems respond to new developments in hardware like
multi-processor systems and increased processor speeds, high-speed
network attachments and increased memory. In the software application
arena, multimedia applications, Internet and web access and
client-server computing have greatly influenced new designs of operating
systems.
The rate of change in demand on operating systems require not just
modifications and enhancements to existing architecture but new ways of
organizing the OS. Consequently much of the work fit into the following
categories:
* Microkernel architecture
* Multithreading
* Symmetric multiprocessing
* Distributed operating systems
* Object Oriented Design
Microkernel architecture
Microkernel architecture assigns only a few essential functions to
the kernel. It is like the operational manager of a company where he
takes care of almost everything; forwards only critical issues to the
CEO. Among the functionalities forwarded to the kernel by the
microkernel, address spaces, inter-process communication (IPC) and basic
scheduling are highlighted. Other operating system services are provided
by processes, sometimes called servers that run in the user mode and are
treated like any other application by the microkernel.
This approach decouples kernel and server development. Servers may be
customized to specific application or environment requirements.
Microkernel approach simplifies implementation, provides flexibility and
it is well suited to a distributed environment. In a nutshell, a
microkernel interacts with local and remote server processes in the same
way, facilitating construction of distributed systems.
Multithreading
Multithreading is a technique in which a process, executing an
application, is divided into threads that can run concurrently.
Multithreading is useful for applications that perform a number of
independent tasks that do not need to be serialized.
An example is a database server that listens for and processes
numerous client requests. With multiple threads running within the same
process, switching back and forth among threads consumes less processor
overhead. Threads are also useful for structuring processes that are
part of the OS kernel.
When we talk about multithreading we can make the following
distinction:
Thread: Thread is a dispatchable unit of work which includes a
processor context (which includes the program counters and stack
pointer) as well as its own data area for a stack (to enable subroutine
branching). (A stack is an implementation to store data to serve the
principle of first in - last out) A thread executes sequentially and is
interruptible so that the processor can turn to another thread.
Process: A collection of one or more threads and associated system
resources (such as memory containing code and data, open files and
devices). This can be compared to the concept of program execution. By
breaking a single application into multiple threads, the programmer is
eligible to control the modularity of the application and timing of the
application related activities.
Symmetric multiprocessing
One of the easiest and cheapest ways to improve hardware performance
is to put more than one CPU on board. This can be done by either making
the different CPUs take on different jobs (asymmetric multi-processing)
or by making them all run in parallel, doing the same job (symmetric
multi-processing).
Asymmetric multi-processing effectively requires specialized
knowledge about the tasks the computer should do, which is unavailable
in a general purpose operating system such as Linux. On the other hand,
symmetric multi-processing is relatively easy to implement.
By relatively easy, means that not that it’s really easy. In a
symmetric multi-processing environment, the CPUs share the same memory,
and as a result code running in one CPU can affect the memory used by
another. You can no longer be certain that a variable you have set to a
certain value in the previous line still has that value; the other CPU
might have played with it while you were not looking. Obviously, it’s
impossible to program like this.
In the case of process programming this normally is not an issue,
because a process will normally only run on one CPU at a time. The
kernel, on the other hand, could be called by different processes
running on different CPUs. A symmetric multiprocessor can be defined as
a standalone computer system with the following characteristics:
1. Multiple processors.
2. These processors share the same main memory and I-O facilities,
interconnected by a communications bus or other internal connection
scheme.
3. All processors can perform the same functions (hence the term
symmetric comes)
Distributed operating systems
A distributed operating system is the logical aggregation of
operating system software over a collection of independent, networked,
communicating and spatially disseminated computational nodes. Each
individual system node holds a discrete software subset of the global
aggregate operating system. Each node-level software subset is a
composition of two distinct provisioners of services.
1. A ubiquitous minimal kernel, or microkernel, situated directly
above each node’s hardware. The microkernel provides only the necessary
mechanisms for a node’s functionality.
2. Higher-level collection of system management components, providing
all necessary policies for a node’s individual and collaborative
activities. This collection of management components exists immediately
above the microkernel, and below any user applications or APIs that
might reside at higher levels.
Object Oriented Design (OOD)
Object-Oriented Design is the process of planning a system of
interacting objects (an object can be regarded as a blue print of a real
world entity) for the purpose of solving a software problem. It is one
approach to software design. So, another innovation in OS design is the
use of this principle. OOD leads discipline to the process of adding
modular extensions to even a small kernel. At the OS level, an object
based structure enables programmers to customize an OS without
disrupting system integrity.
Object-oriented concepts
The five basic concepts of object-oriented design are the
implementation level features that are built into the programming
language. These features are often referred to by these common names:
* Object or Class: A tight coupling or association of data structures
with the methods or functions that act on the data. This is called a
class, or object (an object is created based on a class). Each object
serves a separate function. It is defined by its properties, what it is
and what it can do. An object can be part of a class, which is a set of
objects that are similar.
* Information hiding (Encapsulation): The ability to protect some
components of the object from external entities. This is realized by
language keywords to enable a variable to be declared as private or
protected to the owning class.
* Inheritance: The ability for a class to extend or override
functionality of another class. The so-called subclass has a whole
section that is derived (inherited) from the superclass and then it has
its own set of functions and data.
* Interface: The ability to defer the implementation of a method. The
ability to define the functions or methods signatures without
implementing them.
* Polymorphism: The ability to replace an object with its subobjects.
The ability of an object-variable to contain, not only that object, but
also all of its subobjects.
Caption: In recent years many new design elements have been
introduced into both new and new releases of the existing operating
systems |