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 虚拟内存在此处通过区分物理内存和虚拟内存来更好地理解虚拟内存物理内存真实的物理条虚拟内存每个进程自己的内存所有进程共有的内存注意共有内存是在物理上共有但是在每个进程各自的视角里共有内存是属于它自己的就像国家间的领土争议认为争议领土是自己的在图中物理意义上的共享部分是内核虚拟内存和共享库的内存映射区域总结进程活在虚拟的幻觉里内核掌握着物理的真相。