Context Switch Definition
英文地址:http://www.linfo.org/context_switch.html
上下文切换(有时也称为进程切换或任务切换)是指
CPU从一个进程或线程切换到另一个进程或现程。
进程(有时也叫任务)是程序的一个运行实例
.在linux中,线程是轻量级的进程,他们可并行执和共享他们的父进程(即创建它们的进程)的地址空间(一段内存区域)和其他资源
上下文是指
CPU的寄存器和程序计数器在任何时间点的内容。 寄存器是CPU内部访问非常快的少量内存(相对于CPU外部较慢的RAM主内存),用来快速访问常用的值来加速计算机程序的执行,常用的值一般指计算的中间结果。程序计数器是一个专门的寄存器,表示在其指令序列的CPU的位置,并拥有正在执行的指令的地址或者要执行的下一条指令的地址,这取决于具体的系统上
稍微详细的描述,上下文切换是内核(即操作系统的核心)对CPU上的进程(包括线程)进行下列活动:
(1)挂起一个进程的运行和存储CPU的状态(即上下文)到某处内存中
(2)从内存中检索下一个进程的上下文并把上下文恢复到CPU的寄存器
(3)返回到程序计数器显示的位置(即,返回到该进程被中断的代码行)以恢复该进程。
有时上下文切换可理解为内核停止执行一个在CPU上执行的进程,恢复执行此前已暂停的其他进程。这一措辞虽然可以帮助澄清这一概念,它可以混淆本身,因为一个进程,顾名思义,是一个程序的执行实例。这样的字眼挂起一个进程的继续执行也许才是可取的.(这一段中文译起来是一样的)
上下文切换与模式切换
上下文切换只能出现在内核模式。内核模式是一个只有内核运行,并提供所有内存位置,和其他所有的系统资源的访问
CPU特权模式。其他程序,包括应用程序,最初在用户模式下运行,但他们可以通过系统调用来运行内核代码。在一个在类Unix操作系统上,系统调用是活动进程(当前正前执行的进程)请求内核提供服务,如输入/输出(I / O的)或进程创建(新建程的创建)。I / O可以被定义来自或流向CPU和主存储器(即内存)组合的任何动作信息,也就是说,这个组合和计算机的用户之间的通信(例如,通过键盘或鼠标),其存储设备(例如,磁盘或磁带驱动器),或其他电脑.
在类Unix操作系统,这两种模式的存在,意味着当一个系统调用导致CPU转移到内核模式时,一个类似的,但更简单的操作是必要的。这个被称为模式切换,而不是上下文切换,因为它不会改变当前的进程。
上下文切换是一个多任务操作系统的本质特征。一个多任务操作系统,是指多个进程在单个CPU上看似同时而且没有互相干扰的执行。上下文切换是发生在快速连续(数十或数百次每秒)的方式实现并发幻觉。当进程自愿放弃CPU时间或已经用完它的CPU时间片时,即产生上下文切换。
上下文切换,也可以被硬件中断触发,硬件中断是当硬件设备(如键盘,鼠标,调制解调器或系统时钟)有事件(例如,按一个键,鼠标移动已发生或数据从一个网络连接)发生,而通知内核的信号。
英特尔80386和更高的CPU包含上下文切换的硬件支持。然而,大多数现代操作系统执行软件上下文切换,它可以使用任何CPU上,而不是硬件上下文切换,企图以获得更高的性能。软件的上下文切换首次在Linux上是实现为inux2.4内核支持英特尔兼容处理器。
软件的上下文切换声称的主要优势是硬件机制节省了几乎所有
CPU的状态,软件可以更有选择性和保存实际上需要保存并重新加载的部分。然而,这对增加上下文切换的效率有多重要仍然存在疑问。其倡导者还声称,软件上下文切换可以改善切换代码的可能性,从而进一步提高效率,它允许更好地控制正在加载数据的有效性。
上下文切换的成本
上下文切换通常是计算密集型的。也就是说,它需要大量的处理器时间,每一次切换时间可能需要纳秒级,每秒又有几十或数百个切换。因此,上下文切换到系统
CPU时间方面的巨大成本,其实是可以的操作系统上最昂贵的操作。
因此,在操作系统设计的主要焦点已经尽可能避免不必要的上下文切换。然而,这并不容易做到在实践中。事实上,虽然,从消耗的CPU时间的绝对量方面衡量,上下文切换的成本一直在下降时.这似乎主要是由于CPU的时钟速度的提高,而不是上下文切换本身效率的改进。
Linux声称,与其他作业系统相比,包括一些其他的类Unix系统,优点之一是其极低的上下文切换和模式切换的成本。
因此,在操作系统设计的主要焦点已经尽可能避免不必要的上下文切换。然而,这并不容易做到在实践中。事实上,虽然,从消耗的CPU时间的绝对量方面衡量,上下文切换的成本一直在下降时.这似乎主要是由于CPU的时钟速度的提高,而不是上下文切换本身效率的改进。
Linux声称,与其他作业系统相比,包括一些其他的类Unix系统,优点之一是其极低的上下文切换和模式切换的成本。
本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/795148