A context switch (also sometimes referred to as a process switch or a task switch ) is the switching of the CPU (central processing unit) from one process or thread to another.
A process (also sometimes referred to as a task ) is an executing (i.e., running) instance of a program. In Linux, threads are lightweight processes that can run in parallel and share an address space (i.e., a range of memory locations) and other resources with their parent processes (i.e., the processes that created them).
A context is the contents of a CPU's registers and program counter at any point in time. A register is a small amount of very fast memory inside of a CPU (as opposed to the slower RAM main memory outside of the CPU) that is used to speed the execution of computer
programs by providing quick access to commonly used values, generally
those in the midst of a calculation. A program counter is a specialized
register that indicates the position of the CPU in its instruction
sequence and which holds either the address of the instruction being
executed or the address of the next instruction to be executed,
depending on the specific system.
Context switching can be described in slightly more detail as the kernel operating system)
performing the following activities with regard to processes (including
threads) on the CPU: (1) suspending the progression of one process and
storing the CPU's state (i.e., the context) for that process
somewhere in memory, (2) retrieving the context of the next process
from memory and restoring it in the CPU's registers and (3) returning
to the location indicated by the program counter (i.e., returning to
the line of code at which the process was interrupted) in order to
resume the process. (i.e., the core of the
A context switch is sometimes described as the kernel suspending execution of one process on the CPU and resuming execution of some other process
that had previously been suspended. Although this wording can help
clarify the concept, it can be confusing in itself because a process is , by definition, an executing instance of a program. Thus the wording suspending progression of a process might be preferable.
Context Switches and Mode Switches
Context switches can occur only in kernel mode .
Kernel mode is a privileged mode of the CPU in which only the kernel
runs and which provides access to all memory locations and all other
system resources. Other programs, including applications, initially
operate in user mode , but they can run portions of the kernel code via system calls . A system call is a request in a Unix-like operating system by an active process (i.e., a process currently progressing in the CPU) for a service performed by the kernel, such as input/output (I/O) or process creation
(i.e., creation of a new process). I/O can be defined as any movement
of information to or from the combination of the CPU and main memory
(i.e. RAM), that is, communication between this combination and the
computer's users (e.g., via the keyboard or mouse), its storage devices (e.g., disk or tape drives), or other computers.
The
existence of these two modes in Unix-like operating systems means that
a similar, but simpler, operation is necessary when a system call
causes the CPU to shift to kernel mode. This is referred to as a mode switch rather than a context switch, because it does not change the current process.
Context switching is an essential feature of multitasking
operating systems. A multitasking operating system is one in which
multiple processes execute on a single CPU seemingly simultaneously and
without interfering with each other. This illusion of concurrency
is achieved by means of context switches that are occurring in rapid
succession (tens or hundreds of times per second). These context
switches occur as a result of processes voluntarily relinquishing their
time in the CPU or as a result of the scheduler making the switch when a process has used up its CPU time slice .
A context switch can also occur as a result of a hardware interrupt , which is a signal from a hardware device (such as a keyboard, mouse, modem or system clock) to the kernel that an event (e.g., a key press, mouse movement or arrival of data from a network connection) has occurred.
Intel 80386 and higher CPUs contain hardware support for context switches. However, most modern operating systems perform software context switching , which can be used on any CPU, rather than hardware context switching
in an attempt to obtain improved performance. Software context
switching was first implemented in Linux for Intel-compatible
processors with the 2.4 kernel.
One
major advantage claimed for software context switching is that, whereas
the hardware mechanism saves almost all of the CPU state, software can
be more selective and save only that portion that actually needs to be
saved and reloaded. However, there is some question as to how important
this really is in increasing the efficiency of context switching. Its
advocates also claim that software context switching allows for the
possibility of improving the switching code, thereby further enhancing
efficiency, and that it permits better control over the validity of the
data that is being loaded.
The Cost of Context Switching
Context
switching is generally computationally intensive. That is, it requires
considerable processor time, which can be on the order of nanoseconds
for each of the tens or hundreds of switches per second. Thus, context
switching represents a substantial cost to the system in terms of CPU time and can, in fact, be the most costly operation on an operating system.
Consequently,
a major focus in the design of operating systems has been to avoid
unnecessary context switching to the extent possible. However, this has
not been easy to accomplish in practice. In fact, although the cost of
context switching has been declining when measured in terms of the
absolute amount of CPU time consumed, this appears to be due mainly to
increases in CPU clock speeds rather than to improvements in the
efficiency of context switching itself.
One
of the many advantages claimed for Linux as compared with other
operating systems, including some other Unix-like systems, is its
extremely low cost of context switching and mode switching.
from:
http://blog.csdn.net/wave_1102/archive/2007/09/04/1771745.aspx
posted on 2010-02-25 23:09
chatler 阅读(357)
评论(0) 编辑 收藏 引用 所属分类:
OS