CSC 325 Operating Systems with an Emphasis on UNIX
Chapter 3: Operating System Structures
- System Components
- Operating-System Services
- System Calls
- System Programs
- System Structure
- Virtual Machines
- System Design and Implementation
Operating System Structures
We want to look into the operating system from three view points:
- USERS: The services provided to users.
- PROGRAMMERS: The interface made available to programmers and how it is provided.
- operating system DESIGNERS: The methodologies for design.
Most operating systems support the following types of system components:
- Process Management
- Main-Memory Management
- Secondary-Storage Management
- I/O System Management
- File Management
- Protection System
- Command-Interpreter System
A process is a program in execution. Examples of processes include
batch jobs, system tasks - e.g. spooling a printer, UNIX commands like ls, ps.
One may think of a process as a unit of work which consists of an executable program, the program's data and stack, its Program Counter,
stack pointers, registers and all other information that is
required to run the executable program.
The difference between a process and a program is that a program is a passive entity, such as the data stored onto
the disk while a process is an active entity, where we know exactly what instruction to
execute next. The process executes in a sequential fashion, one instruction
at a time. Its possible that a program may have more than one process,
but at any given time only one process executes.
Typically the information about each process, other than the contents
of its address space, is stored in an operating system table called process table.
In Unix, as well other operating systems, a process called the shell (or command interpreter)
reads command from the terminal. Suppose the user asks to compile a
program. Then shell the creates a new process to take care of the compilation.
When the compilation is finished this new process is killed (by a
system call). Abstraction: Process created a child process.
- A process is a program in execution. A process needs certain resources, including CPU
time, memory, files, and I/O devices, to accomplish its task.
- The operating system is responsible for the following activities in connection with
- process creation and deletion.
- process suspension and resumption (scheduling).
- provision of mechanisms for:
- process synchronization
- process communication
- Process management is usually performed by the kernel.
In a multiprogramming environment - how do we know which process
belongs to which user! (Answer: pid-uid in Unix).
Main memory is a large array of words which is the main direct accessible storage for the CPU. If the CPU wants data from the disk, it is first
put into main memory and then the CPU accesses it.
In a multiprogramming system, the operating system keeps several processes in main-memory. So we need some method of memory management.
- Memory is a large array of words or bytes, each with its own address. It is a repository
of quickly accessible data shared by the CPU and I/O devices.
- The operating system is responsible for the following activities in connection with
- Keep track of which parts of memory are currently being used and by whom.
- Decide which processes to load when memory space becomes available.
- Allocate and deallocate memory space as needed.
e.g. the C function 'malloc' or the 'New' function in Pascal allocates a specified amount of memory;
this happens via an operating system call. The functions 'free' in C and 'Dispose' in Pascal deallocate
I/O System Management
Much of the operating system kernel is concerned with I/O. The operating system provides a standard interface between user and system programs
and devices. Device drives are the processes responsible for each device type. The operating system hides the peculiarities of specific
hardware. In Unix, the bulk of specifics about the machine hardware is even hidden from bulk of the operating system itself, by providing an
I/O subsystem which consists of a buffer-caching mechanism and general device driver interface drivers for specific hardware devices. Only the device driver needs to know the specifics of the machine hardware.
- The I/O system consists of:
- A buffer-caching system
- A general device-driver interface
- Drivers for specific hardware devices called device drivers
- Device Drivers
- Must have access to I/O hardware.
- Must be able to handle interrupts.
- Communicate with other parts of the operating system such as the File system, Networking etc.
Since main memory is small and volatile, we need secondary memory. The operating system is responsible
for disk management, and other functions like free-space management, storage allocation, and disk scheduling.
The operating system abstracts the physical ideas of storage of information into a logical unit as defined by its creator, and this unit is called a file. The operating system maps files to a physical medium and accesses these files via storage devices.
- A file is a collection of related information as defined by its creator.
Commonly, files represent programs in both source and object forms as well as data.
Files may also be used to represent devices (e.g. lpt1: in DOS).
- The operating system is responsible for the following activities in connection with file
- File creation and deletion.
- Directory creation and deletion.
- Support of commands for manipulating files and directories.
- Mapping files onto secondary storage.
e.g. free space allocation.
- File backup on stable non-volatile storage media.
Protection refers to a mechanism for controlling access to resources. The protection mechanism must distinguish
between authorized and unauthorized, specify the controls to be imposed, and provide a mechanism for enforcement.
- Protection refers to a mechanism for controlling access by programs, processes, or users
to both system and user resources.
- Operating Systems commonly control access by using permissions. All system resources
have an owner and a permission associated with them. Users may be combined into groups for
the purpose of protection.
e.g. In UNIX every file has an owner and a group.
The following is a listing of all the information about a file.
rwxr-xr-- pearce faculty 382983 Sept 18 10:20
The first field is the protection information; it shows the permissions for the
owner, then the group, then everybody else.
The first rwx means that the owner has read, write and execute
The next r-x means that the group has read and execute permissions.
The next r-- means that all other users have only read permission.
The name of the owner of the file is pearce; the name of the group for the
file is faculty; the length of the file is 382983 bytes; the
file was created on Sept 18 at 10:20 and the name of the
file is: notes325.html
e.g. In MacOS, filesharing also allows access to files through designated users and groups.
- There is usually a special user corresponding to the system administrator, this user has
permission do anything. On UNIX systems this user is called root.
Networking (Distributed Systems)
A distributed system is a collection of processors that do not share memory or a clock. They are connected by a
communication network. The distributed system provides user access to various system resources. This is typically
done by generalizing the network access as a file access, with the details about networking being contained in the
network interfaces device driver.
e.g. A world-wide example of a distributed system is the WWW, and an on-campus example of a distributed system is the Backbone or Lab-Network:
- A distributed system is a collection of processors that do not share memory or a clock, but each processor has its own local memory.
- The processors in the system are connected through a communication network.
- A distributed system provides user access to various system resources.
- Access to a shared resource allows:
- Computation speed-up
- Increased data availability
- Enhanced reliability
The program that reads and interprets control statements is in general called the command-line interpreter or the shell in UNIX. Its
function is to get and execute the next command statement.
- Many commands are given to the operating system by control statements which deal with:
- process creation and management (e.g. running a program)
- I/O handling (e.g. set terminal type)
- secondary-storage management (e.g. format a disk)
- main-memory management (e.g. specify virtual memory parameters)
- file-system access (e.g. print file)
- protection (e.g. set permissions)
- networking (e.g. set IP address)
- The program that reads and interprets control statements is called variously:
- command-line interpreter
- shell (in UNIX)
Its function is to get and execute the next command statement.
Some operating systems such as NT have no command line interpreter and use a GUI for all system
- Program execution - ability to load a program into memory, to run it, and to terminate it.
- I/O operations - since user programs cannot execute I/O operations directly, the
operating system must provide some means to perform I/O. Thus, I/O operations to a file or a device are typically done through system calls.
- File-system manipulation - capability to read, write, create, and delete files.
- Communications - exchange of information between processes executing either on the same
computer or on different systems tied together by a network. Implemented via shared memory
or message passing.
- Error detection - ensure correct computing by detecting errors in the CPU and memory
hardware, in I/O devices, or in user programs.
e.g. No paper in printer.
Additional operating-system functions exist not for helping the user, but rather for
ensuring efficient system operation.
- Resource allocation - allocating resources to multiple users or multiple processes
running at the same time.
- Accounting - keep track of and record which users use how much and what kinds of
computer resources for account billing or for accumulating usage statistics.
- Protection - ensuring that all access to system resources is controlled.
- System calls provide the interface between a running program and the operating system.
- Generally available as an assembly-language instruction to generate a software
interrupt. (e.g. INT 21h in DOS)
- Systems programming languages such as C allow system calls to be made directly.
- Three general methods are used to pass parameters between a running program and the
- Pass parameters in registers.
- Store the parameters in a table in memory, and the table address is passed as a
parameter in a register.
- Push (store) the parameters onto the stack by the program, and pop off the stack by the
- System programs provide a convenient environment for program development and execution.
They can be divided into:
- File manipulation
- Status information
- File modification
- Programming-language support
- Program loading and execution
- Application programs
- Most users' view of the operation system is defined by system programs, not the actual
System Structure - Simple Approach
- MS-DOS - written to provide the most functionality in the least space; it was not
divided into modules. MS-DOS has some structure, but its interfaces and levels of
functionality are not well separated.
- UNIX - limited by hardware functionality, the original UNIX operating system had limited
structuring. The UNIX operating system consists of two separable parts:
System Structure - Layered Approach
- The operating system is divided into a number of layers (levels), each built on top of
lower layers. The bottom layer (layer 0) is the hardware; the highest (layer N) is the
- With modularity, layers are selected such that each uses functions (operations) and
services of only lower-level layers.
- A layered design was first used in the operating system of Dijkstra in 1968. Its six
layers are as follows:
Level 5: user programs
Level 4: buffering for input and output devices
Level 3: operator-console device driver
Level 2: memory management
Level 1: CPU scheduling
Level 0: hardware
- A virtual machine takes the layered approach to its logical conclusion. It treats
hardware and the operating system kernel as though they were all hardware.
- A virtual machine provides an interface identical to the underlying bare hardware.
- The operating system creates the illusion of multiple processes, each executing on its
own processor with its own (virtual) memory.
- The resources of the physical computer are shared to create the virtual machines.
- CPU scheduling can create the appearance that users have their own processor.
- Spooling and a file system can provide virtual I/O.
- A terminal serves as the virtual machine console.
Advantages and Disadvantages of Virtual Machines
- The virtual-machine concept provides complete protection of system resources since each
virtual machine is isolated from all other virtual machines. This isolation, however,
permits no direct sharing of resources.
- A virtual-machine system is a perfect vehicle for operating-systems research and
development. System development is done on the virtual machine, instead of on a physical
machine and so does not disrupt normal system operation.
- The virtual machine concept is difficult to implement due to the effort required to
provide an exact duplicate of the underlying machine.
System Design Goals
- User goals - operating system should be convenient to use, easy to learn, reliable,
safe, and fast.
- System goals - operating system should be easy to design, implement, and maintain, as
well as flexible, reliable, error-free, and efficient.
Mechanisms and Policies
- Mechanisms determine how to do something; policies decide what will be done.
- The separation of policy from mechanism is a very important principle; it allows maximum
flexibility if policy decisions are to be changed later.
- Traditionally written in assembly language, operating systems are now mostly written in
higher level languages.
- Code written in a high-level language:
- can be written faster.
- is more compact.
- is easier to understand and debug.
- An operating system is far easier to port (move to some other hardware) if it is written
in a high level language.
- The first operating system to be written in a high-level language was UNIX, at the time there were
very few suitable languages and so a new one was developed from an existing language
called B - it was called C.
- Modern operating systems are designed to run on machines with a wide range of different
- Booting - starting a computer by loading the kernel.
- Bootstrap program - code stored in ROM that is able to locate the kernel, load it into
memory, and start its execution.
- Once the kernel is loaded it must identify all the hardware present in the machine and
load relevant device drivers.