逐段解读------深入理解计算机系统------1.7 操作系统管理硬件
2026/4/16 12:52:23 网站建设 项目流程

1.7.1 进程

  • 将进程看成演员,程序看成剧本。单核系统只有一个演员,但他可以在不同的剧本之间切换,当这个切换时间缩小到微秒这个级别,就可以造成几个剧本同时运行的假象(有点微积分的感觉)

  • 并发运行≠并行运行:
    并发运行:一个CPU在不同程序中快速切换,使得宏观上感觉同时运行
    并行运行:多个CPU核心同时执行不同程序(多核处理器依旧有并发运行)

  • 上下文就是演戏喊“咔”时的
    演员的姿态-------寄存器(CPU正在计算的数据的存储器)
    背景布局------栈指针……(进程的内存布局)
    台词念到哪一句------程序计数器(PC)(下一条指令的地址)

  • 阻塞态:进程 A 执行 read 系统调用读取磁盘数据。由于磁盘操作较慢(例如需要 5ms 寻道),数据无法立即返回,内核便将进程 A 踢出运行队列,标记为 “阻塞态”。

  • 首次上下文切换:内核保存进程 A 的上下文(寄存器、PC、栈指针等),然后恢复另一个就绪进程 B 的上下文,将 CPU 控制权交给 B。在这 5ms 的磁盘等待时间里,进程 B 得以执行大量计算,CPU 丝毫没有浪费。

  • 磁盘中断:当磁盘控制器将数据读入内部缓冲区后,立即向 CPU 发出一个硬件中断信号(磁盘中断)。

  • 中断处理:CPU 收到中断信号,立即暂停正在执行的进程 B,转入内核态执行磁盘中断处理程序。内核将数据从磁盘缓冲区搬运到进程 A 的内存地址空间,并将进程 A 的状态由 “阻塞态”改为“就绪态”,将其放入就绪队列等待调度。

  • 中断返回:中断处理结束后,内核返回到刚才被暂停的进程 B,进程 B 若无其事地继续执行后续用户代码。注意:此时进程 A 尚未运行,仅仅进入了就绪队列。

  • 二次上下文切换:在未来的某个调度时机(例如进程 B 的时间片用完,或进程 B 主动执行阻塞操作),操作系统调度器从就绪队列中选中进程 A,真正执行一次从 B 到 A 的上下文切换,将 CPU 控制权交给 A。

  • 进程 A 恢复运行:进程 A 从自己的 read 系统调用返回,获得读取到的数据,并接着执行 read 之后的下一行代码。

  • 磁盘中断:计算机中有各种外设,它们运行慢,都需要在完整任务后给CPU发送完成信号,磁盘中断就是磁盘发出的信号

阶段CPU 上运行的实体发生的事件进程 A 状态进程 B 状态
1进程 A(用户态)进程 A 执行read系统调用,请求磁盘数据运行就绪/不存在
2内核态(代表 A)内核发起磁盘读操作,发现数据未就绪阻塞
3调度器上下文切换 ①:保存 A 的上下文,恢复 B 的上下文阻塞(等待磁盘)运行
4进程 B(用户态)进程 B 正常执行用户代码,利用磁盘等待时间做计算阻塞运行
5硬件(磁盘控制器)磁盘数据读取完成,向 CPU 发出磁盘中断阻塞运行(被暂停)
6内核态(中断处理)CPU 暂停 B,执行中断处理程序:搬运数据,将 A 标记为就绪态,放入就绪队列就绪暂停(现场保留)
7进程 B(用户态)中断处理结束,内核返回到被中断的进程 B继续执行就绪(排队)运行
8进程 B(用户态)进程 B 继续运行(A 此时尚未获得 CPU)就绪运行
9调度器未来某调度时机(如时钟中断或 B 主动阻塞)到来就绪运行 → 就绪/阻塞
10调度器上下文切换 ②:保存 B 的上下文,恢复 A 的上下文运行就绪/阻塞
11进程 A(用户态)进程 A 从read系统调用返回,获得数据,继续执行后续指令运行

1.7.2 线程

一个进程由多个称为线程的执行单元组成

1.7.3 虚拟内存


在此处,通过区分物理内存和虚拟内存来更好地理解虚拟内存

  • 物理内存:真实的物理条
  • 虚拟内存:每个进程自己的内存+所有进程共有的内存
  • 注意:共有内存是在物理上共有,但是在每个进程各自的视角里,共有内存是属于它自己的(就像国家间的领土争议,认为争议领土是自己的)

在图中,物理意义上的共享部分是内核虚拟内存和共享库的内存映射区域

总结:进程活在虚拟的幻觉里,内核掌握着物理的真相。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询