Interrupts, Multitasking and Time slices
Download
Report
Transcript Interrupts, Multitasking and Time slices
The Process Control Block
From: http://en.wikipedia.org/wiki/Task_struct
• A Process Control Block (PCB, also called Task
Control Block or Task Struct) is a data structure
in the operating system kernel containing the
information needed to manage a particular
process. The PCB is "the manifestation of a
process in an operating system".[1]
• Implementations differ, but in general a PCB will
include, directly or indirectly:
• The identifier of the process (a process identifier, or
PID)
• Register values for the process including, notably, the
Program Counter value for the process
• The address space for the process
• Priority (eg., nice value on Unix operating systems)
• Process accounting information, such as when the
process was last run, how much CPU time it has
accumulated, etc.
• Pointer to the next PCB i.e. pointer to the PCB of the
next process to run
• I/O Information (i.e. I/O devices allocated to this
process, list of opened files, etc)
• During a context switch, the running process is
stopped and another process is given a chance to
run. The kernel must stop the execution of the
running process, copy out the values in hardware
registers to its PCB, and update the hardware
registers with the values from the PCB of the new
process.
• Location of the PCB
• Since the PCB contains the critical information for
the process, it must be kept in an area of memory
protected from normal user access. In some
operating systems the PCB is placed in the
beginning of the kernel stack of the process since
that is a convenient protected location. [2]
Interrupts
• An interrupt is an event that stops the
execution of the current program (at the end
of its currently executing instruction), saves
the state of the current program and its
process, begins execution of the appropriate
interrupt routine that handles the interrupt,
then selects (schedules) a program in the
“ready” wait queue, and then dispatches that
program.
• The Scheduler is an OS routine that selects the
next process in the ready queue to begin
execution.
This selection is based on the scheduling
algorithm used. (covered later)
• The Dispatcher is an OS routine that begins the
execution of the program for the scheduled
process.
– Restores the state of the process
– Loads the PSW
– Loads the PC with the address of the program’s next
instruction to be executed after the last instruction
executed and the process was interrupted.
Two common types of interrupts
• A time-out interrupt where the system timer
signals the end of the process’s time slice
• A software interrupt by the program which is
most often an I/O instruction executed by the
program
– The program specifies the type of interrupt such
as a read or a write by storing values in registers
(?)
– The program issues and interrupt call (ex. INT
instruction in the Intel 8086)
From: http://en.wikipedia.org/wiki/Interrupt
• Interrupts can be categorized into: maskable
interrupt (IRQ), non-maskable interrupt (NMI),
interprocessor interrupt (IPI), software
interrupt, and spurious interrupt.
• A maskable interrupt (IRQ) is a hardware
interrupt that may be ignored by setting a bit
in an interrupt mask register's (IMR) bit-mask.
• Likewise, a non-maskable interrupt (NMI) is a
hardware interrupt that does not have a bitmask associated with it - meaning that it can
never be ignored. NMIs are often used for
timers, especially watchdog timers.
• An interprocessor interrupt is a special case of
interrupt that is generated by one processor
to interrupt another processor in a
multiprocessor system.
• A software interrupt is an interrupt generated
within a processor by executing an instruction.
Software interrupts are often used to
implement System calls because they
implement a subroutine call with a CPU ring
level change.
• A spurious interrupt is a hardware interrupt that
is unwanted. They are typically generated by
system conditions such as electrical interference
on an interrupt line or through incorrectly
designed hardware.
• Processors typically have an internal interrupt
mask which allows software to ignore all external
hardware interrupts while it is set. This mask may
offer faster access than accessing an interrupt
mask register (IMR) in a PIC, or disabling
interrupts in the device itself. In some cases, such
as the x86 architecture, disabling and enabling
interrupts on the processor itself acts as a
memory barrier, in which case it may actually be
slower.
Multitasking and Time Slices
• http://en.wikipedia.org/wiki/Time-sharing
• Time-sharing refers to sharing a computing
resource among many users by multitasking. Its
introduction in the 1960s, and emergence as the
prominent model of computing in the 1970s,
represents a major historical shift in the history of
computing. By allowing a large number of users
to interact simultaneously on a single computer,
time-sharing dramatically lowered the cost of
providing computing, while at the same time
making the computing experience much more
interactive.
• From: MDSN pages on Multitasking
• A multitasking operating system divides the
available processor time among the processes or
threads that need it. The system is designed for
preemptive multitasking; it allocates a processor
time slice to each thread it executes. The
currently executing thread is suspended when its
time slice elapses, allowing another thread to
run. When the system switches from one thread
to another, it saves the context of the preempted
thread and restores the saved context of the next
thread in the queue.
• The length of the time slice depends on the
operating system and the processor. Because
each time slice is small (approximately 20
milliseconds), multiple threads appear to be
executing at the same time. This is actually the
case on multiprocessor systems, where the
executable threads are distributed among the
available processors. However, you must use
caution when using multiple threads in an
application, because system performance can
decrease if there are too many threads.
From the Linux man page > man 7 time
The Hardware Clock
• Most computers have a (battery-powered)
hardware clock which the kernel reads at boot
time in order to initialize the software clock.
For further details, see rtc(4) and hwclock(8).
The Software Clock, HZ, and Jiffies
The accuracy of many system calls and
timestamps is limited by the resolution of the
software clock, a clock maintained by the
kernel which measures time in jiffies. The
size of a jiffy is determined by the value of the
kernel constant HZ.
The value of HZ varies across kernel versions
and hardware platforms.
• On x86 the situation is as follows:
• on kernels up to and including 2.4.x, HZ was
100, giving a jiffy value of 0.01 seconds;
• starting with with 2.6.0, HZ was raised to
1000, giving a jiffy of 0.001 seconds;
• since kernel 2.6.13, the HZ value is a kernel
configuration parameter and can be 100,
250 (the default) or 1000, yielding a jiffies
value of, respectively, 0.01, 0.004, or 0.001
seconds.
Broken-down time
Certain library functions use a structure of type
tm to represent broken-down time, which stores
time value separated out into distinct
components (year, month, day, hour, minute,
second, etc.). This structure is described in
ctime(3), which also describes functions that
convert between calendar time and broken-down
time. Functions for converting between
broken-down time and printable string
representations of the time are described in
ctime(3), strftime(3), and strptime(3).
Sleeping and Setting Timers
• Various system calls and functions allow a
program to sleep (suspend execution) for a
specified period of time; see nanosleep(2)
and sleep(3).
• Various system calls allow a process to set a
timer that expires at some point in the
future, and optionally at repeated intervals;
see alarm(2), getitimer(2), and
timer_create(3).