Context Switch Definition(上下文切换的定义)

2021-08-05 10:53:29 浏览数 (1)

上下文切换(有时也称为进程切换或任务切换):是指CPU从一个进程//线程切换到另一个进程/线程。

进程(有时也称为任务)是程序中的一个正在运行的实例。在Linux系统中,线程是轻量级的进程,线程可以并行运行,并与其父进程(即创建它们的进程)共享一个地址空间(即一系列内存位置)及其他资源。

上下文是指任意时刻CPU寄存器和程序计数器的内容。寄存器是CPU内部的一小部分非常快的内存(相对于CPU外部较慢的RAM主存),通常,在计算过程中它通过提供对常用值的快速访问来加快计算机程序的执行速度。程序计数器是一种特殊的寄存器,它指示CPU在其指令序列中的位置,根据特定的系统,它保存着正在执行的指令的地址或下一条要执行的指令的地址。

上下文切换可以更详细地描述为内核(即操作系统的核心)对CPU上的进程(包括线程)执行以下活动:

  1. 挂起一个进程的进程,并将该进程的CPU状态(即上下文)存储在内存的某个地方,
  2. 从内存中检索下一个进程的上下文,并将其恢复到CPU的寄存器中
  3. 返回到程序计数器指示的位置(即返回到进程被中断的代码行),以便恢复进程。

上下文切换有时被描述为内核挂起一个进程在CPU上的执行,并恢复之前被挂起的其他进程的执行。虽然这种措辞可以帮助澄清概念,但它本身可能令人困惑,因为从定义上讲,进程是程序的执行实例。因此,使用暂停进程的措辞可能更可取。

Context Switches and Mode Switches

上下文切换只能在内核模式下发生。内核模式是CPU的一种特权模式,它只运行内核,并提供对所有内存位置和所有其他系统资源的访问。其他程序(包括应用程序)最初以用户模式运行,但它们可以通过系统调用运行部分内核代码。系统调用是在类unix操作系统中由一个活动进程(即当前在CPU中进行的进程)对内核执行的服务的请求,例如输入/输出(I/O)或进程创建(即创建一个新进程)。I/O可以定义为任何在中央处理器和主存储器(即RAM)组合中进出的信息移动,也就是说,这种组合与计算机用户(如通过键盘或鼠标)、其存储设备(如磁盘或磁带驱动器)或其他计算机之间的通信。 在类unix操作系统中存在这两种模式意味着,当系统调用导致CPU转换到内核模式时,需要进行类似但更简单的操作。这称为模式切换而不是上下文切换,因为它不会改变当前进程。 上下文切换是多任务操作系统的一个基本特性。多任务操作系统是指多个进程在单个CPU上同时执行,并且彼此互不干扰。这种并发幻觉是通过快速连续发生的上下文切换(每秒数十或数百次)来实现的。这些上下文切换发生的原因是进程自愿放弃它们在CPU中的时间,或者是调度器在进程耗尽其CPU时间片时进行切换。 上下文切换也会由硬件中断产生,这是一个来自于硬件设备(如键盘、鼠标、调制解调器或系统时钟)内核的事件(如按键、鼠标移动或到达的数据从一个网络连接)的信号。

Intel 80386和更高的cpu包含对上下文切换的硬件支持。然而,大多数现代操作系统执行软件上下文切换(可在任何CPU上使用),而不是硬件上下文切换以获得更好的性能。软件上下文切换最初是在Linux中实现的,用于2.4内核中与intel兼容的处理器。

软件上下文切换的一个主要优点是,硬件机制可以保存几乎所有的CPU状态,而软件可以更有选择性地只保存实际需要保存和重新加载的部分。然而,关于这对于提高上下文切换的效率到底有多重要还存在一些问题。它的支持者还声称,软件上下文切换允许改进切换代码的可能性,从而进一步提高效率,并允许更好地控制正在加载的数据的有效性。

The Cost of Context Switching

下文切换通常需要大量的计算。也就是说,它需要相当大的处理器时间,对于每秒数十个或数百个开关的每一个来说,处理器时间可以达到纳秒量级。因此,就CPU时间而言,上下文切换代表了系统的大量成本,实际上可能是操作系统上代价最高的操作。

因此,操作系统设计的一个主要重点是尽可能地避免不必要的上下文切换。然而,这在实践中并不容易实现。事实上,尽管从CPU时间消耗的绝对值来看,上下文切换的成本一直在下降,但这似乎主要是由于CPU时钟速度的提高,而不是上下文切换本身效率的提高。

与其他操作系统(包括一些其他类unix系统)相比,Linux声称的许多优点之一是其上下文切换和模式切换的成本极低。

0 人点赞