Operating Systems [CS-604] Lecture No. 2
Lecture No. 2
? Operating Systems Concepts, Chapter 1
? PowerPoint Slides for Lecture 2
? Single-user systems
? Batch systems
? Multi programmed systems
? Time-sharing systems
? Real time systems
? Interrupts, traps and software interrupts (UNIX signals)
? Hardware protection
A computer system that allows only one user to use the computer at a given time is
known as a single-user system. The goals of such systems are maximizing user
convenience and responsiveness, instead of maximizing the utilization of the CPU and
peripheral devices. Single-user systems use I/O devices such as keyboards, mice, display
screens, scanners, and small printers. They can adopt technology developed for larger
operating systems. Often individuals have sole use of computer and do not need advanced
CPU utilization and hardware protection features. They may run different types of
operating systems, including DOS, Windows, and MacOS. Linux and UNIX operating
systems can also be run in single-user mode.
Early computers were large machines run from a console with card readers and tape
drives as input devices and line printers, tape drives, and card punches as output devices.
The user did not interact directly with the system; instead the user prepared a job, (which
consisted of the program, data, and some control information about the nature of the job
in the form of control cards) and submitted this to the computer operator. The job was in
the form of punch cards, and at some later time the output was generated by the system—
user didn’t get to interact with his/her job. The output consisted of the result of the
program, as well as a dump of the final memory and register contents for debugging.
To speed up processing, operators batched together jobs with similar needs, and ran
them through the computer as a group. For example, all FORTRAN programs were
complied one after the other. The major task of such an operating system was to transfer
control automatically from one job to the next. In this execution environment, the CPU is
often idle because the speeds of the mechanical I/O devices such as a tape drive are
slower than that of electronic devices. Such systems in which the user does n get to
interact with his/her jobs and jobs with similar needs are executed in a “batch”, one after
the other, are known as batch systems . Digital Equipment Corporation’s VMS is an
example of a batch operating system.
Figure 2.1 shows the memory layout of a typical computer system, with the system
space containing operating system code and data currently in use and the user space
containing user programs (processes). In case of a batch system, the user space contains
one process at a time because only one process is executing at a given time.
Figure 2.1 Memory partitioned into user and system spaces
Multi-programming increases CPU utilization by organizing jobs so that the CPU always
has one to execute. The operating system keeps several jobs in memory simultaneously,
as shown in Figure 2.2. This set of jobs is a subset of the jobs on the disk which are ready
to run but cannot be loaded into memory due to lack of space. Since the number of jobs
that can be kept simultaneously in memory is usually much smaller than the number of
jobs that can be in the job pool; the operating system picks and executes one of the jobs
in the memory. Eventually the job has to wait for some task such as an I/O operation to
complete. In a non multi-programmed system, the CPU would sit idle. In a multi-
programmed system, the operating system simply switches to, and executes another job.
When that job needs to wait, the CPU simply switches to another job and so on.
Figure 2.2 Memory layout for a multi-programmed
Figure 2.3 illustrates the concept of multiprogramming by using an example system
with two processes, P1 and P2. The CPU is switched from P1 to P2 when P1 finishes its
CPU burst and needs to wait for an event, and vice versa when P2 finishes it CPU burst
and has to wait for an event. This means that when one process is using the CPU, the
other is waiting for an event (such as I/O to complete). This increases the utilization of
the CPU and I/O devices as well as throughput of the system. In our example below, P1
and P2 would finish their execution in 10 time units if no multiprogramming is used and
in six time units if multiprogramming is used.
Figure 2.3 Illustration of the multiprogramming concept
All jobs that enter the system are kept in the job pool. This pool consists of all
processes residing on disk awaiting allocation of main memory. If several jobs are ready
to be brought into memory, and there is not enough room for all of them, then the system
must choose among them. This decision is called job scheduling. In addition if several
jobs are ready to run at the same time, the system must choose among them. We will
discuss CPU scheduling in Chapter 6.
A time-sharing system is multi- user, multi-process, and interactive system. This means
that it allows multiple users to use the computer simultaneously. A user can run one or
more processes at the same time and interact with his/her processes. A time-shared
system uses multiprogramming and CPU scheduling to provide each user with a small
portion of a time-shared computer. Each user has at least one separate program in
memory. To obtain a reasonable response time, jobs may have to be swapped in and out
of main memory. UNIX, Linux, Widows NT server, and Windows 2000 server are time-
sharing systems. We will discuss various elements of time-sharing systems throughout
Real time systems
Real time systems are used when rigid time requirements are placed on the operation of a
processor or the flow of data; thus it is often used as a control device in a dedicated
application. Examples are systems that control scientific experiments, medical imaging
systems, industrial control systems and certain display systems.
A real time system has well defined, fixed time constraints, and if the system does
not produce output for an input within the time constraints, the system will fail. For
instance, it would not do for a robot arm to be instructed to halt after it had smashed into
the car it was building.
Real time systems come in two flavors: hard and soft. A hard real time system
guarantees that critical tasks be completed on time. This goal requires that all delays in
the system be completed on time. This goal requires that all delays in the system be
bounded, from the retrieval of stored data to the time it takes the operating system to
finish any request made of it. Secondary storage of any sort is usually limited or missing,
with data instead being stored in short-term memory or in read only memory. Most
advanced operating system features are absent too, since they tend to separate the user
from the hardware, and that separation results in uncertainty about the amount of time an
operation will take.
A less restrictive type of real time system is a soft real time system, where a critical
real-time task gets priority over other tasks, and retains that priority until it completes. As
in hard real time systems, the operating system kernel delays need to be bounded. Soft
real time is an achievable goal that can be mixed with other types of systems, whereas
hard real time systems conflict with the operation of other systems such as time-sharing
systems, and the two cannot be mixed.
Interrupts, traps and software interrupts
An interrupt is a signal generated by a hardware device (usually an I/O device) to get
CPU’s attention. Interrupt transfers control to the interrupt service routine (ISR),
generally through the interrupt vector table, which contains the addresses of all the
service routines. The interrupt service routine executes; on completio n the CPU resumes
the interrupted computation. Interrupt architecture must save the address of the
interrupted instruction. Incoming interrupts are disabled while another interrupt is being
processed to prevent a lost interrupt. An operating system is an interrupt driven software.
A trap (or an exception) is a software-generated interrupt caused either by an error
(division by zero or invalid memory access) or by a user request for an operating system
A signal is an event generated to get attention of a process. An example of a signal is
the event that is generated when you run a program and then press <Ctrl-C>. The
signal generated in this case is called SIGINT (Interrupt signal). Three actions are
possible on a signal:
1. Kernel-defined default actio n—which usually results in process termination and,
in some cases, generation of a ‘core’ file that can be used the programmer/user to
know the state of the process at the time of its termination.
2. Process can intercept the signal and ignore it.
3. Process can intercept the signal and take a programmer-defined action.
We will discuss signals in detail in some of the subsequent lectures.
Multi-programming put several programs in memory at the same time; while this
increased system utilizatio n it also increased problems. With sharing, many processes
could be adversely affected by a bug in one program. One erroneous program could also
modify the program or data of another program or even the resident part of the operating
system. A file may overwrite anothe r file or folder on disk. A process may get the CPU
and never relinquish it. So the issues of hardware protection are: I/O protection, memory
protection, and CPU protection. We will discuss them one by one, but first we talk about
the dual- mode operation of a CPU.
a) Dual Mode Operation
To ensure proper operation, we must protect the operating system and all other programs
and their data from any malfunctioning program. Protection is needed for any shared
resources. Instruction set of a modern CPU has two kinds of instructions, privileged
instructions and non-privileged instructions. Privileged instructions can be used to
perform hardware operations that a normal user process should not be able to perform,
such as communicating with I/O devices. If a user process tries to execute a privileged
instruction, a trap should be generated and process should be terminated prematurely. At
the same time, a piece of operating system code should be allowed to execute privileged
instructions. In order for the CPU to be able to differentiate between a user process and
an operating system code, we need two separate modes of operation: user mode and
monitor mode (also called supervisor mode, system mode, or privileged mode). A bit,
called the mode bit, is added to the hardware of the computer to indicate the current
mode: monitor mode (0) or user mode (1). With the mode bit we are able to distinguish
between a task that is executed on behalf of the operating system and one that is executed
on behalf of the user.
The concept of privileged instructions also provides us with the means for the user to
interact with the operating system by asking it to perform some designated tasks that only
the operating system should do. A user process can request the operating system to
perform such tasks for it by executing a system call. Whenever a system call is made or
an interrupt, trap, or signal is generated, CPU mode is switched to system mode before
the relevant kernel code executes. The CPU mode is switched back to user mode before
the control is transferred back to the user process. This is illustrated by the diagram in
Set user mode
Figure 2.4 The dual- mode operation of the CPU
b) I/O Protection
A user process may disrupt the normal operation of the system by issuing illegal I/O
instructions, by accessing memory locations within the operating system itself, or by
refusing to relinquish the CPU. We can use various mechanisms to ensure that such
disruptions cannot take place in the system.
To prevent users from performing illegal I/O, we define all I/O instructions to be
privileged instructions. Thus users cannot issue I/O instructions directly; they must do it
through the operating system. For I/O protection to be complete, we must be sure that a
user program can never gain control of the computer in monitor mode. If it could, I/O
protection could be compromised.
Consider a computer executing in user mode. It will switch to monitor mode
whenever an interrupt or trap occurs, jumping to the address determined from the
interrupt from the interrupt vector. If a user program, as part of its execution, stores a new
address in the interrupt vector, this new address could overwrite the previous address
with an address in the user program. Then, when a corresponding trap or interrupt
occurred, the hardware would switch to monitor mode and transfer control through the
modified interrupt vector table to a user program, causing it to gain control of the
computer in monitor mode. Hence we need all I/O instructions and instructions for
changing the contents of the system space in memory to be protected. A user process
could request a privileged operation by executing a system call such as read (for reading