当前位置: 首页 > news >正文

Linux 进程上下文切换详解

Linux 中的进程上下文切换是多任务操作系统的核心机制之一。它允许单个 CPU 通过快速切换执行不同的进程,制造出多个进程同时运行的假象。下面我将为你详细解释这个过程及其作用。

🖥️ Linux 进程上下文切换详解

1 什么是进程上下文切换?

进程上下文指的是进程在运行时所需要的全部环境信息和环境状态。CPU 上下文切换是指操作系统从一个任务(或进程)切换到另一个任务时,​​保存当前任务的状态并加载新任务的状态的过程​​。

​CPU 上下文主要包括​​:

  • ​CPU 寄存器​​:包括通用寄存器、状态寄存器等,是 CPU 内置容量小但速度极快的内存。

  • ​程序计数器(PC)​​:存储 CPU 正在执行的指令位置或即将执行的下一条指令位置。

而 ​​进程上下文​​ 则范围更广,它不仅包含了 CPU 的硬件上下文(寄存器和程序计数器),还包括了进程的​​虚拟内存空间、打开的文件列表、信号处理信息等​​整个运行环境的信息。

​上下文切换(Context Switch)​​,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳到程序计数器所指的新位置运行新任务。这些保存下来的上下文会存储在系统内核中,并在任务重新调度执行时再次加载进来,这样才能保证任务原来的状态不受影响,让任务看起来还是连续运行。

2 上下文切换的详细过程

当操作系统决定进行进程切换时(例如通过 schedule() 函数),上下文切换的大致过程如下:

  1. ​决定切换​​:操作系统内核中的调度器从就绪队列中选择一个进程来运行。

  2. ​保存当前上下文​​:将当前正在运行的进程的硬件上下文(所有CPU寄存器的值、程序计数器等)保存到其进程控制块(PCB,即 task_struct)中。

  3. ​切换地址空间(对于用户进程)​​:这是进程上下文切换的关键步骤之一。每个进程都有自己独立的虚拟地址空间,通过 mm_struct 结构体描述,其中 pgd(页全局目录)指向该进程的页表。切换时,内核会将新进程的 pgd 物理地址加载到 CPU 的 TTBR0_EL1 寄存器(在 ARM64 架构上),从而切换虚拟地址空间到新进程。

  4. ​恢复新进程上下文​​:从新进程的 PCB 中加载之前保存的硬件上下文(寄存器值、程序计数器等)到 CPU 的各个寄存器。

  5. ​跳转执行​​:将程序计数器(PC)指向新进程要执行的下一条指令地址,开始执行新进程。

这个过程确保了每个进程都认为自己独占 CPU, unaware 被切换的事实。

3 何时发生上下文切换?

上下文切换并非随意发生,而是由特定事件触发:

  • ​时间片耗尽​​:为防止一个进程长时间独占 CPU,系统将 CPU 时间划分为一段段的时间片。当某个进程的时间片耗尽,就会被系统挂起,切换到其他等待 CPU 的进程运行。

  • ​系统资源不足​​:进程在系统资源不足(如等待 I/O 操作完成)时,需要等待资源满足后才可以运行,这时进程也会被挂起,并由系统调度其他进程运行。

  • ​睡眠或阻塞​​:当进程通过睡眠函数(如 sleep())主动挂起时,也会发生调度和切换。

  • ​更高优先级进程​​:当有更高优先级的进程就绪时,为了保证高优先级进程的运行,当前进程可能会被挂起。

  • ​硬件中断​​:发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序(ISR)。中断处理完毕,可能恢复原进程,也可能调度一个新进程。

需要注意的是,​​系统调用本身通常不被认为是完整的进程上下文切换​​。系统调用会导致 CPU 从用户态切换到内核态(模式切换),但通常还是在​​同一个进程的上下文​​中(从进程的用户态切换到进程的内核态)。

4 上下文切换的性能开销与监控

上下文切换是一项​​开销较大​​的操作,其成本可分为:

  • ​直接开销​​: - 保存和恢复寄存器状态所需的时间。 - 调度器自身选择下一个进程所运行的时间。

  • ​间接开销​​: - ​​CPU 缓存失效​​(TLB、数据缓存、指令缓存):新进程切换上来后,其内存访问模式与旧进程不同,导致原有缓存命中率下降,需要重新加载缓存,这对性能影响很大。 - 内存访问的局部性被破坏。

监控工具

你可以使用以下工具监控系统的上下文切换情况:

  • vmstat​:查看系统整体的上下文切换次数(cs列)和中断次数(in列)。 vmstat 1

  • pidstat -w​:查看每个进程的详细上下文切换情况。 pidstat -w 1 重点关注: - ​​cswch/s​​:每秒自愿上下文切换次数(Voluntary Context Switches),指进程无法获取所需资源(如I/O、内存)而主动发生的切换。 - ​​nvcswch/s​​:每秒非自愿上下文切换次数(Non-voluntary Context Switches),指进程因时间片耗尽等原因,被系统强制调度发生的切换。

  • perf​:更精确地测量上下文切换事件。 perf stat -e context-switches -a sleep 10

​多少上下文切换是正常的?​

这个数值取决于系统本身的 CPU 性能。如果系统的上下文切换次数比较稳定,从数百到一万以内,通常算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级增长时,很可能意味着性能问题。如果​​非自愿上下文切换(nvcswch/s)变多​​,通常说明进程都在争抢 CPU,CPU 可能成为瓶颈;而​​自愿上下文切换(cswch/s)变多​​,则可能意味着进程常在等待资源(如 I/O)。

5 进程上下文切换的关键作用

进程上下文切换是现代操作系统的基石,它的核心作用主要体现在以下几个方面:

  1. ​实现多任务并发(Concurrency)​​:通过快速切换 CPU 时间片,使得多个进程能够“同时”运行在数量有限的 CPU 上。这是多任务操作系统最基础的功能,极大地提高了计算机系统的整体效率和资源利用率。

  2. ​保障系统公平性与响应性(Fairness and Responsiveness)​​:调度器通过时间片轮转和优先级调度等策略,确保所有进程都能公平地获得 CPU 时间,防止单个进程长时间垄断 CPU。这对于保证交互式程序(如用户界面、服务器响应)的及时响应至关重要。

  3. ​支持进程间隔离与保护(Isolation and Protection)​​:上下文切换过程中的​​地址空间切换​​(加载新进程的页表)是实现进程间隔离的关键。每个进程都运行在自己的独立虚拟地址空间中,一个进程的错误操作不会破坏其他进程或内核的内存空间,极大地增强了系统的稳定性和安全性。

  4. ​高效处理外部事件(Handling External Events)​​:当硬件中断发生时,CPU 会暂停当前进程,切换到中断处理程序上下文。这使得系统能够及时响应键盘敲击、网络数据包到达等异步事件,处理完毕后可以再恢复被中断的进程或调度新的进程。

6 总结

Linux 中的进程上下文切换是一个精巧而核心的机制,它通过保存和恢复进程的运行现场,结合地址空间的切换,完美地实现了​​多任务并发、公平调度、进程隔离和及时响应​​等重要特性。

理解上下文切换的机制、开销和监控方法,对于分析系统性能瓶颈、编写高效程序(例如,避免不必要的锁竞争、减少系统调用频率)以及深入理解操作系统的工作原理都至关重要。虽然切换本身有开销,但它是实现现代计算环境中强大功能和灵活性的必要代价。

http://www.agseo.cn/news/86/

相关文章:

  • 第十天 C#学习事件 021
  • 事半功倍是蠢蛋52 使用docker-compose.override.yml
  • Elasticsearch
  • MySQL单表查询DQL
  • PyQt5 之QMenu菜单栏
  • [TJOI2015] 概率论 题解
  • Linux进程与线程
  • 事半功倍是蠢蛋51 大上黑白屏反色
  • Linux 启动耗时优化 1s 内启动(RK3588 平台)
  • 周总结报告5
  • 使用模拟库进行测试的意义是什么?
  • MyEMS:开源领域的能源管理创新解决方案
  • 【Containerd交互命令】ctr、crictl常用基本命令
  • DAG Matters! GFlowNets Enhanced Explainer For Graph Neural Networks | |
  • abap字符串操作
  • [完结16章]COZE AI 智能体开发体系课(从入门到高级)零基础零代码
  • 推出其新一代高性能Sub-GHz射频收发芯片UM2011A
  • 在 Athena UDF 中使用 Java 将数据写入 DynamoDB
  • Pychram 激活
  • 掌控AI编程全链路:Cline让你随意选模型、透明成本、零信任安全 - 公众号
  • 数据库事务隔离级别引发的应用安全竞态条件漏洞分析
  • Node-Red学习笔记
  • 隧道工程LoRa无线监测设备集成方案 直击隧道深部监测痛点
  • 【k8s】为什么ctr导入后通过crictl查看不到导入的镜像
  • Swift 结合 Tesseract 进行验证码识别
  • 当虚拟机目录空间不足时的扩容
  • 使用IText创建PDF
  • MyEMS 深度解析:碳管理赋能与系统集成的实践路径
  • uv包管理 - 小学弟
  • 对口型视频创作指南:AI如何让“假唱”变成真艺术?