Previous Table of Contents Next

Module 3


This module provides a general overview of UNIX and the UNIX User Utilities described in this book. It specifically covers the following information:

General overview
The UNIX Kernel (the operating system)
Job control
File System
Ordinary Files
Special Files
Fifo (pipe)
Device Drivers
The UNIX shell
System Documentation


The UNIX operating system has rapidly grown in popularity in recent years. Every major computer manufacturer offers a version of UNIX for their hardware, a claim only UNIX can make. It has been ported to over 150 different types of computers, ranging from micros to supercomputers.

The philosophy of UNIX is to modularize problems and build on existing software solutions. Each program should be designed to solve one problem, and complex problems should be solved by combining multiple programs. This basic idea of UNIX is often referred to as the "building block" approach. Elegantly designed as a simple yet extremely powerful general purpose operating system, UNIX has become a standard in the computer industry.

The UNIX System has introduced many new features to the computer world. Because of its rapid growth in popularity it has become the center of much praise and controversy. It is often referred to as a programmer's "dream" and a user's "nightmare." UNIX is a tremendous solution to many problems, but there are definite weaknesses that are being rectified as new releases are developed. The user interfaces that were once foreign to UNIX are now a reality. There are many software packages available today for UNIX.


The UNIX kernel is the operating system program of UNIX. It is a C and assembly language program that provides the low-level functions of the "UNIX environment." It controls the computer hardware and provides an interface for all other UNIX programs to use the hardware. This concept allows the higher level programs to be hardware independent. When a program needs service to a hardware device, it calls on the kernel to perform the function.

The kernel provides the user the ability to interface with the computer hardware and peripherals. When you log in to UNIX you communicate with the kernel via a shell program. Seldom does a user interact directly with the kernel.


Multitasking refers to an operating system that executes multiple tasks simultaneously. UNIX refers to a task as a process. UNIX can be configured to allow the user to run from one to as many processes as the operating system can handle. The standard is usually a maximum of 25 processes or tasks per user login. The theory of a multitasking system is to approach 100 percent in computer resource utilization while increasing user productivity. Of course, at some point, one or more resources are over used and productivity begins to fall instead of continuing to rise.

A user can run several commands in background while executing another command in foreground. Background refers to commands that are detached from your terminal. Foreground is the execution of a command attached to your terminal. You must wait for the current foreground command to complete before you can execute another foreground command. Once a command is entered, the system breaks the command down into separate processes if possible. Each process equates to one program or utility. Internal ksh commands do not always generate (spawn) a new process.


Multiuser refers to an operating system that allows multiple users to use the system simultaneously. UNIX currently runs on systems that support from one to over 2000 users. The theory of a multiuser system is to approach 100 percent in computer resource utilization while reducing the cost per user. This is done by having multiple users share system resources. A single user cannot use the printer, disk, memory, or cpu 100 percent of the time. But multiple users can increase use of these devices and resources by having an operating system that manages the resources for them. This reduces the cost per user of the computer as more users share the system.

Computers with enough resources to share among multiple users are prime targets for multiuser operating systems. The main requirements are enough RAM memory, disk storage, terminal ports, and CPU power to handle the operating system and each user's computing needs. Even "old" micros have this capacity - the popular Intel 80286 or the Motorola 68010 can run 1 to 8 users with relatively good response to each user. The key to good response on UNIX is not just the CPU speed, but a fast access time on your disk drives. The faster your disk drives (low access time) are, the better UNIX responds. It is also very important to have fast I/O to disk and terminal ports.


One of the most sought after features UNIX possesses is portability. Portability is the ability to rewrite the operating system for a different vendor's hardware without a major rewrite effort. UNIX is highly portable and has been ported by many hardware vendors to their computer hardware. In fact, every computer vendor has a UNIX or a UNIX-like system ported to their hardware - a milestone that no other operating system can claim.

There are two main reasons UNIX is a prime system for porting from hardware to hardware. The first is that the kernel provides an interface between the hardware and most of the nonkernel UNIX software. When UNIX is ported to another hardware platform, only the kernel requires major modifications. Since most of the UNIX software interfaces with the kernel and not the hardware, the software is hardware independent and does not require much, if any, modification when it is ported to a new hardware platform.

The second reason UNIX is easy to port is that the majority of the UNIX operating system is written in the C programming language. Most operating systems are written in the hardware vendor's proprietary assembly language. This makes it very difficult, if not impossible, to port their operating systems to a different vendor's computer.


Portability allows the customer to choose the vendor and not be locked into that vendor's hardware and software environment. It also provides the user with a broad base of application software that can be used on hardware from different application vendors.

The porting of an operating system creates a standard software environment across a broad range of computers, ranging in size from micros to supercomputers. This cuts training time dramatically and increases overall productivity. It also reduces support costs and redevelopment costs.


The UNIX System provides a standard application development environment that allows for easy porting of application software. The C programming language is a big asset to the porting of software between different UNIX machines.

The ability to port software to many systems easily provides application software vendors with a much larger market without the headaches of multiple proprietary environments. Customer training requirements are reduced and the training of internal personnel is minimized. The number of support people needed is not increased because of different knowledge base requirements, but because more software is being sold. Development can spend more time on enhancements instead of ports to unknown, proprietary architectures. Once a customer has bought a product on one UNIX machine, the customer can purchase a different vendor's UNIX machine and be able to use the same applications without having to retrain personnel. As you can understand, portability is a very important issue for many computer users.


Job control on UNIX is the ability to control which job is executed in foreground, background, or is suspended.

*  Foreground execution is considered normal interactive command execution. The command is entered from the keyboard. The shell waits until the command completes execution, then the shell prompts for another command to execute.
*  Background execution is considered batch processing. A command is entered and detached from the terminal. The shell can continue interactive command processing.
*  Suspended jobs (processes) are commands that have been placed in a suspended state. They are not being executed in background or foreground.

Job control allows you to suspend a foreground or background job. A suspended job can be moved to background or foreground. Background jobs can be brought to the foreground and foreground jobs can be placed in the background.

Using job control can increase the productivity of a user by allowing multiple tasks to be juggled back and forth between background, foreground, or a suspended state. For example, a user can edit a source file while executing the compiled program, thus watching the functionality of the program and making changes while suspending the program.

Previous Table of Contents Next