SYSTEM
ADMINISTRATION
v In its
overall design, Linux resembles other traditional, nonmicrokernel UNIX
implementations. It is a multiuser, preemptively multitasking system with a
full set of UNIX-compatible tools. Linux’s file
system adheres to traditional UNIX semantics, and the standard UNIX networking
model is fully implemented. The internal details of Linux’s design
have been influenced heavily by the history of this operating system’s
development.
v Although
Linux runs on a wide variety of platforms, it was originally developed
exclusively on PC architecture. A great deal of that early development was
carried out by individual enthusiasts rather than by well-funded development or
research facilities, so fromthe start Linux attempted to squeeze as much
functionality as possible from limited resources. Today, Linux can run happily
on a multiprocessor machine with many gigabytes of main memory and many
terabytes of disk space, but it is still capable of operating usefully in under
16 MB of RAM.
1.
Components of a Linux System
The Linux
system is composed of three main bodies of code, in line with most traditional
UNIX implementations:
Kernel. The kernel is responsible
for maintaining all the important abstractions of the operating system,
including such things as virtualmemory and processes.
System libraries. The
system libraries define a standard set of functions through which
applications can interact with the kernel. These functions implement much of
the operating-system functionality that does not need the full privileges of
kernel code. The most important system library is the C library, known as libc.
In addition to providing the standard C library, libc implements the user mode
side of the Linux system call interface, as well as other critical system-level
interfaces.
System utilities. The
system utilities are programs that perform individual, specialized management
tasks. Some system utilities are invoked just once to initialize and configure
some aspect of the system. Others —known as
daemons in UNIX terminology—run permanently, handling
such tasks as responding to incoming network connections, accepting logon
requests from terminals, and updating log files.
2. Kernel Modules
The Linux
kernel has the ability to load and unload arbitrary sections of kernel code on
demand. These loadable kernel modules run in privileged kernel mode and as a
consequence have full access to all the hardware capabilities of the machine on
which they run. In theory, there is no restriction on what a kernel module is
allowed to do. Among other things, a kernel module can implement a device
driver, a file system, or a networking protocol.
Kernel modules are convenient for several reasons. Linux’s source
code is free, so anybody wanting to write kernel code is able to compile a
modified kernel and to reboot into that new functionality. However,
recompiling, relinking, and reloading the entire kernel is a cumbersome cycle
to undertake when you are developing a new driver. If you use kernel modules,
you do not have to make a new kernel to test a new driver—the
driver can be compiled on its own and loaded into the already running kernel.
Of course, once a new driver is written, it can be distributed as a module so
that other users can benefit from it without having to rebuild their kernels.
ü The
module support under Linux has four components:
1. The module-management
system allows modules to be loaded into memory and to communicate with the
rest of the kernel.
2. The module
loader and unloader, which are user-mode utilities, work with the
module-management system to load a module into memory.
3. The driver-registration
system allows modules to tell the rest of the kernel that a new driver has
become available.
4. A conflict-resolution
mechanism allows different device drivers to reserve hardware resources and
to protect those resources from accidental use by another driver.
1. Module
Management
v Loading a
module requires more than just loading its binary contents into kernel memory.
The system must also make sure that any references the correct locations in the
kernel’s address
space. Linux deals with this reference updating by splitting the job of module
loading into two separate sections: the management of sections of module code
in kernel memory and the handling of symbols that modules are allowed to
reference.
v Linux
maintains an internal symbol table in the kernel. This symbol table does not
contain the full set of symbols defined in the kernel during the latter’s
compilation; rather, a symbol must be explicitly exported. The set of exported
symbols constitutes a well-defined interface by which a module can interact
with the kernel.
2. Driver
Registration
v Once a
module is loaded, it remains no more than an isolated region of memory until it
lets the rest of the kernel know what new functionality it provides. The kernel
maintains dynamic tables of all known drivers and provides a set of routines to
allow drivers to be added to or removed from these tables at any time. The
kernel makes sure that it calls a module’s startup
routine when that module is loaded and calls the module’s
cleanup
routine before that module is unloaded. These routines are responsible for
registering the module’s functionality.
v A module
may register many types of functionality; it is not limited to only one type.
For example, a device driver might want to register two separate mechanisms for
accessing the device. Registration tables include, among others, the following
items:
• Device
drivers. These drivers include character devices (such as printers, terminals,
and mice), block devices (including all disk drives), and network interface
devices.
File systems. The file system may be
anything that implements Linux’s virtual
file system calling routines. It might implement a format for storing files
on a disk, but it might equally well be a network file system, such as NFS, or
a virtual file system whose contents are generated on demand, such as Linux’s /proc
file system.
Network
protocols. A module may implement an entire networking
protocol, such as TCP or simply a new set of packet-filtering rules for
a network firewall.
Binary
format. This format specifies a way of recognizing, loading, and executing
a new type of executable file.
(3) Conflict
Resolution
Commercial
UNIX implementations are usually sold to run on a vendor’s own
hardware. One advantage of a single-supplier solution is that the software
vendor has a good idea about what hardware configurations are possible. PC
hardware, however, comes in a vast number of configurations, with large numbers
of possible drivers for devices such as network cards and video display
adapters. The problem of managing the hardware configuration becomes more
severe when modular device drivers are supported, since the currently active
set of devices becomes dynamically variable.
Linux
provides a central conflict-resolution mechanism to help arbitrate access to
certain hardware resources. Its aims are as follows:
To
prevent modules from clashing over access to hardware resources
To
prevent autoprobes—device-driver probes that
auto-detect device configuration— from
interfering with existing device drivers
To
resolve conflicts among multiple drivers trying to access the same hardware—as, for
example, when both the parallel printer driver and the parallel line IP (PLIP)
network driver try to talk to the parallel port.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.