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

操作系统 进程(4)上下文切换与系统调用

目标问题:

“当系统切换进程时,CPU里到底发生了什么?”

学习重点:

  • 上下文切换的过程(保存/恢复寄存器、堆栈指针)
  • 系统调用与用户态、内核态的切换机制
  • 调度器(Scheduler)在操作系统中的位置与职责

📘 建议思考:
为什么上下文切换太频繁会导致性能下降?(提示:CPU cache 失效、保存/恢复寄存器代价)


🧩 一、什么是上下文(Context)

“上下文”可以理解为:
👉 CPU 执行某个进程时所需的全部状态信息。

包括:

类型内容示例
CPU寄存器程序计数器(PC)、通用寄存器、标志位等eax, ebx, eip…
内存信息栈指针(SP)、页表、段寄存器esp, ebp…
程序状态用户态 / 内核态、调度优先级等current_mode

⚙️ 就像游戏存档:
你退出游戏前要保存主角位置、血量、装备……
CPU 也是在切换前保存“进程的执行现场”。


🔄 二、上下文切换(Context Switch)

定义:

操作系统从一个进程切换到另一个进程的过程。

🧠 举个例子:

假设有两个进程 P1、P2。
P1 正在执行计算任务,此时:

  1. P1 时间片用完(或触发中断)
  2. 操作系统暂停 P1
  3. 把 P1 的寄存器、程序计数器、栈指针等信息保存到 P1 的PCB(进程控制块)
  4. 从就绪队列中选中 P2
  5. 把 P2 之前保存的寄存器状态、计数器等信息恢复到 CPU 寄存器
  6. CPU 从 P2 停下的那一条指令继续执行

📍这个“保存 + 恢复”的动作,就是 上下文切换


📦 三、上下文切换的开销

切换并不是“免费”的!

代价主要来自:

  1. 寄存器保存与恢复
    保存几十个寄存器状态,恢复另一个进程的状态;
  2. 内核态切换
    切换需要进入内核态执行;
  3. 缓存失效(Cache Miss)
    CPU Cache 里是上一个进程的数据,新进程要重新加载;
  4. TLB(页表缓存)失效
    虚拟内存页表切换后,也要刷新。

💡 所以:

“过于频繁的上下文切换 = 时间浪费在切人上,不在干活上。”

举个形象比喻:

  • 每个人都只说一句话就换人,会议效率极低;
  • 给每人多点时间说完一句完整的话,再换人,效率更高。
    (这就是时间片设计的平衡思想)

🧱 四、系统调用(System Call)

操作系统是内核(Kernel),而普通程序在用户态(User Mode)
用户态程序不能直接操作硬件,比如访问磁盘、网络、I/O 设备。
于是它必须请求内核代为执行 —— 这就叫系统调用。


🔒 用户态与内核态的区别

项目用户态内核态
权限低,只能执行普通指令高,可执行特权指令
可访问内存自己的虚拟内存全系统内存
举例应用程序(浏览器、QQ)操作系统内核、驱动程序

🧩 系统调用过程(比如 read 文件)

  1. 程序调用 read()
  2. 通过**软中断(trap)**进入内核态
  3. 内核检查权限 → 执行文件系统操作
  4. 把结果(或错误码)返回给用户程序
  5. CPU 切回用户态,程序继续执行

📍 核心区别在于:

从用户态到内核态,是一次“受控的特权切换”。


🔄 用户态 vs. 上下文切换

操作类型是否切换进程是否切换态
系统调用(read/write)❌ 否✅ 用户态 → 内核态(同进程)
上下文切换✅ 是(换进程)✅ 通常也会切换内核态

换句话说:

  • 系统调用:同一个人,换个身份(普通人→管理员);
  • 上下文切换:换了一个人(P1→P2)。

🧭 五、调度器的角色

调度器(Scheduler)是操作系统内核中管理 CPU 分配的核心组件,它负责:

  • 挑选哪个进程获得 CPU;
  • 控制上下文保存 / 恢复;
  • 根据调度策略(FCFS, RR, MLFQ等)决策切换顺序。

💡 调度器 + 上下文切换 = CPU多任务的本质机制。


http://www.dtcms.com/a/517272.html

相关文章:

  • Kotlin和Java在匿名内部类和接口的使用中的区别及对比
  • mysql做网站怎么查看数据库坪山住房及建设局网站
  • 河北省建设局网站网站建设公司深圳
  • Request method ‘POST‘ not supported,问题分析和解决
  • KH|记录KingHistroian4.0卸载过程
  • Spring MVC 接口匹配性能优化:.do后缀引发的性能瓶颈分析
  • ps图做ppt模板下载网站有哪些创意设计生活用品
  • Windows API 文件结构与功能分类详解
  • 网站建设费开票收候开在哪个类别里做用户名验证的网站服务器
  • 常熟制作网站的地方wordpress解决速度慢
  • 自己可以做网站推广吗最新的新闻 最新消息
  • Redis不停机升级5.0.3->8.0.4
  • 做网站语言排名2018网站开发的方法和步骤
  • 网页设计入门首先要学什么企业网站优化与推广
  • 抓住园艺消费升级!亚马逊卖家如何从“卖单品”升级为“做品牌”
  • FPGA-ZYNQ学习对BD的保存与应用
  • 博罗县建设局网站免费好玩的网页游戏
  • 强化运动控制领域布局,杰美康机电授权世强硬创代理
  • 容器适配器、关联容器的相关算法题目
  • 微网站的好处优秀产品设计公司哪家好
  • 树莓派Pico 2W 开发环境搭建
  • 零基础从头教学Linux(Day 54)
  • Dexmal原力灵机发布Dexbotic,从此具身智能研发有了“加速器”
  • 电子商务网站建设步网页打不开验证码图片
  • 怎样做自己的微商网站个人网站备案建设方案书
  • 《用于触觉感知的电阻式传感器技术的最新进展》IEEE SENSORS 2022综述文章解读
  • Redis vs RabbitMQ 对比总结
  • 初识C语言11.数据在内存中的存储
  • 操作系统存储管理核心知识点与例题详解
  • 人工智能风险与伦理(3)