`
y806839048
  • 浏览: 1107625 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

上下文切换详解

阅读更多

上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。
进程(有时候也称做任务)是指一个程序运行的实例。在 Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。
上下文是指某一时间点 CPU 寄存器和程序计数器的内容。寄存器是 CPU 内部的数量较少但是速度很快的内存(与之对应的是 CPU 外部相对较慢的 RAM 主内存)。寄存器通过对常用值(通常是运算的中间值)的快速访问来提高计算机程序运行的速度。程序计数器是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体依赖于特定的系统。
稍微详细描述一下,上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行以下的活动:(1)挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处,(2)在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复,(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程。
上下文切换有时被描述为内核挂起 CPU 当前执行的进程,然后继续执行之前挂起的众多进程中的某一个。尽管这么说对于澄清概念有所帮助,但是这句话本身可能有一点令人困惑。因为通过定义可以知道,进程是指一个程序运行的实例。所以说成挂起一个进程的运行可能更适合一些。

上下文切换与模式切换

上下文切换只能发生在内核态中。内核态是 CPU 的一种有特权的模式,在这种模式下只有内核运行并且可以访问所有内存和其他系统资源。其他的程序,如应用程序,在最开始都是运行在用户态,但是他们能通过系统调用来运行部分内核的代码。系统调用在类 Unix 系统中是指活跃的进程(正在运行在 CPU 上的进程)对于内核所提供的服务的请求,例如输入/输出(I/O)和进程创建(创建一个新的进程)。I/O 可以被定义为任何信息流入或流出 CPU 与主内存(RAM)。也就是说,一台电脑的 CPU和内存与该电脑的用户(通过键盘或鼠标)、存储设备(硬盘或磁盘驱动)还有其他电脑的任何交流都是 I/O。
这两种模式(用户态和内核态)在类 Unix 系统中共存意味着当系统调用发生时 CPU 切换到内核态是必要的。这应该叫做模式切换而不是上下文切换,因为没有改变当前的进程。
上下文切换在多任务操作系统中是一个必须的特性。多任务操作系统是指多个进程运行在一个 CPU 中互不打扰,看起来像同时运行一样。这个并行的错觉是由于上下文在高速的切换(每秒几十上百次)。当某一进程自愿放弃它的 CPU 时间或者系统分配的时间片用完时,就会发生上下文切换。
上下文切换有时也因硬件中断而触发。硬件中断是指硬件设备(如键盘、鼠标、调试解调器、系统时钟)给内核发送的一个信号,该信号表示一个事件(如按键、鼠标移动、从网络连接接收到数据)发生了。
英特尔的 80386 和更高级的 CPU 都支持硬件上下文切换。然而,大多数现代的操作系统通过软件实现上下文切换,而非使用硬件上下文切换,这样能够运行在任何 CPU 上。同时,使用软件上下文切换可以尝试获得更好的性能。软件的上下文切换最先在 Linux 2.4 中实现。
软件上下文切换号称的一个主要优点是,硬件的机制保存了几乎所有 CPU 的状态,软件能够有选择性的保存需要被保存的部分并重新加载。然而这个行为对于提升上下文切换的性能到底有多重要,还有一点疑问。其拥护者还宣称,软件上下文切换有提高切换代码的可能性,它有助于提高正在加载的数据的有效性,从而进一步提高性能。

上下文切换的消耗

上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。
Linux相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少。

分享到:
评论

相关推荐

    UCOS时钟中断与上下文切换情景分析

    ### UCOS时钟中断与上下文切换情景分析 #### 前言 本文旨在深入剖析UCOS中的时钟中断及上下文切换机制。基于LPC2200系列Magic开发板,结合UCOS 2.52操作系统,通过具体实例探讨中断处理与上下文切换的过程。目标是...

    Linux 内核进程上下文和中断上下文

    这一过程涉及到了从用户空间到内核空间的上下文切换,包括保存用户空间的寄存器状态、变量等,并设置好内核空间的执行环境。 当系统调用完成后,内核会再次进行上下文切换,恢复用户空间应用程序的状态,使其能够从...

    UCOS中断及上下文情景分析

    中断和上下文切换是UCOSII中的关键概念,它们对于理解系统的运行机制至关重要。 首先,中断是处理器接收到硬件或软件事件信号时暂停当前任务并执行特定服务程序的过程。在UCOSII中,中断处理通常涉及到中断服务例程...

    51简单任务切换器

    2. **上下文切换**:当需要切换任务时,需要保存当前任务的寄存器状态,包括PC(程序计数器)、SP(堆栈指针)以及其他必要的寄存器,然后恢复新任务的上下文。 3. **调度逻辑**:这是任务切换器的精髓,根据预设的...

    Linux概念架构的理解

    **进程上下文切换详解**: - **程序状态字**: 包括指令指针、标志寄存器等,用于指示进程当前的状态。 - **页表基地址寄存器**: 控制着进程虚拟地址空间到物理地址空间的映射。 - **`current` 指针**: 指向当前正在...

    ATI和NVDIA双显卡切换详解

    对于单独程序进行显卡设置,可以点击“开始”,依次进入“控制面板”、“硬件和声音”、“NVIDIA控制面板”,选择“3D设置”菜单下的“管理3D设置”,在视图下选择“将‘用图形处理器运行’添加到上下文菜单”,然后...

    [试读]服务器并发处理能力+-+进程切换

    **上下文切换的影响**:上下文切换会产生额外的CPU开销,尤其是在高并发场景下,频繁的上下文切换会导致CPU资源被大量消耗,从而影响服务器的整体性能。 #### 四、监控上下文切换 在《构建高性能Web站点》一书中...

    contextswitching

    ### Linux上下文切换(Context Switching)的知识点详解 #### 概述 上下文切换是操作系统内核在多个线程或进程之间分配处理器资源时所采用的一种基本机制。当一个线程正在执行时,系统可能会因为某些原因(如时间片...

    Java多线程编程详解

    ### Java多线程编程详解:深入理解与实践 #### 一、理解多线程机制 多线程,作为现代编程语言的重要特性之一,允许在单一应用程序内并发执行多个任务,从而极大提升了程序的效率和响应速度。在Java中,多线程的...

    UCOS III STM32 任务切换详细过程

    它通常由中断服务例程(ISR)或系统调用触发,负责实际的上下文切换操作。 - **切换任务**:OSCtxSw函数执行后,处理器的上下文已经切换到新任务,控制权交给新任务,开始执行。 3. **STM32的中断处理**:STM32的...

    uc_os2 for arm详解.pdf

    与任务级上下文切换相比,中断级上下文切换需要考虑更多因素,以确保系统能够在中断处理过程中正确地保存和恢复任务状态。 #### 七、结论 综上所述,**μC/OS-II for ARM Processors** 不仅能够高效地管理任务调度...

    UNIX进程调度详解

    从简单的上下文切换到复杂的调度算法,UNIX系统通过高效的调度机制确保了资源的有效利用,同时也为用户提供了一个稳定可靠的操作环境。随着计算机技术的发展,未来的UNIX系统可能会引入更多先进的调度技术和算法,以...

    ucOSII 記憶體管理詳解 II

    当一个更高优先级的任务就绪,或者当前任务主动放弃CPU控制权时,就会触发上下文切换。具体过程如下: 1. **保存当前任务状态**:将当前任务的寄存器值保存到栈中。 2. **更新调度器信息**:更新系统调度器的数据...

    DouYaOS操作系统

    DouYaOS是一款专为STM32微控制器设计的自定义操作系统,它以其简洁的上下文切换机制,成为嵌入式系统爱好者和开发者深入理解操作系统原理的理想学习平台。本文将深入探讨DouYaOS的核心特性、设计思想以及在STM32上...

    uCOS-II系统详解

    - `OS_TASK_SW()`和`OSCtxSw()`:实现任务之间的上下文切换。 #### 七、系统启动 uCOS-II的启动过程涉及到初始化内核并开始执行第一个任务。主要函数包括: - `OSStart()`:启动uCOS-II; - `OSStartHighRdy()`:...

    vmstat 命令详解

    2. **-i 选项**:该选项用于显示中断和上下文切换的信息,可以帮助我们了解系统中断的情况以及上下文切换的频率,进而判断系统是否存在性能瓶颈。 3. **-s 选项**:使用 `-s` 选项时,`vmstat` 将只输出简化的内存...

    Android中wifi与数据流量的切换监听详解

    在服务中,由于没有Activity上下文,通常选择使用系统弹窗,它具有较高的优先级并能覆盖应用的所有界面。以下是一个简单的系统弹窗示例: ```java private void switchNetwork(final Context context) { ...

    GPRS网络信令实例详解

    4. **信令实例分析**:在提供的资源中,29665号实例可能包含各种GPRS信令场景,如附着、分离、PDP上下文激活/去激活、切换等。通过分析这些实例,读者可以更直观地了解信令的实际应用,学习如何解读信令消息。 5. *...

    Task_Example.rar_LPC2105_lpc2106_实时切换

    通过分析和实现这个例子,开发者不仅可以掌握基本的RTOS概念,还能深入了解嵌入式系统中的任务调度、信号量通信以及上下文切换等关键知识点。这对于进一步探索更复杂的嵌入式系统设计至关重要。

Global site tag (gtag.js) - Google Analytics