Skip to content

方法Method

上下文切换与线程派发

Context switch and dispatch · Ready running blocked

用就绪、运行、阻塞三态解释CPU执行权交接,逐步核对用户trap frame、内核续点和地址空间恢复。

形式陈述 ​

线程的上下文是暂停后继续执行所需的状态。用户态暂停点包括用户PC、寄存器与用户栈;当线程停在内核服务内部,还要保存内核栈指针、恢复位置和调用约定要求保留的寄存器。进程的地址空间、文件表等资源引用也必须与恢复的线程匹配。

OS-16在每个调度边界维护线程状态:RUNNING占用唯一CPU,READY可以运行但尚未获得CPU,BLOCKED等待指定谓词或事件,EXITED不再运行。阻塞不是“低优先级”:调度器不能通过更积极选择一个尚未得到输入的线程,令输入凭空出现。

一次切换分四步:保存A的内核续点;在内核保护下把A放入相应状态或队列;选择READY线程B并标为RUNNING;恢复B的地址空间控制与内核续点。B随后可能在先前的系统调用里继续,最终才恢复自己的用户trap frame。一个线程的trap frame与切换上下文不是同一份记录。

本模型在调度边界暂停普通线程执行,状态与队列修改不可被其他调度动作穿过。其安全不变量为:单核至多一个RUNNING线程,每个READY线程恰在就绪队列一次,BLOCKED线程不会同时在就绪队列,当前地址空间身份属于当前用户线程。

直觉

切换的是执行位置及其环境,不是复制整份进程内存。A的堆通常仍留在原处;内核保存足够的信息,使A下次能从原调用层级接着做。不同进程需要切换地址空间,同进程线程可以共享地址空间而只换寄存器与栈。

调度政策决定下一位是谁,切换机制负责真的把那一位恢复正确。轮转、优先级与最短作业策略可以使用同一机制;把它们都归结为“保存PC”会漏掉栈、寄存器和资源身份。

例子与边界

输入等待与定时器抢占 ​

初始P运行,Q就绪。P在内核read中发现设备队列空,保存用户trap frame,其内核续点记为P:check_input。内核把P登记为等待输入并标BLOCKED,派发Q。此时CPU使用Q的地址空间,即使P、Q都将在虚地址0x12AB访问,仍必须分别得到各自数据。

随后输入中断到来。处理器先保存Q的中断返回状态;驱动把字节放入输入队列并使P变为READY。OS-16选择让Q继续,不要求唤醒立即抢占。下一次时间片边界,Q变READY、P变RUNNING;P恢复到check_input,重新检查队列,取得字节,最后返回P的用户调用点。

边界 P Q CPU所属地址空间
初始 RUNNING READY P
P等待输入后 BLOCKED RUNNING Q
中断唤醒后 READY RUNNING Q
时间片切换后 RUNNING READY P

把“中断返回”直接解释成“返回P”会在第三行出错:当时被打断的线程是Q,只有另一次明确派发才把CPU交给P。

检查到入睡之间不能漏通知 ​

若P先看到队列空,再无保护地稍后登记等待,中断可在两步之间放入字节并发现没有等待者。P随后睡去,输入虽已存在却无人再次唤醒它。正确做法让谓词检查、等待登记及交出保护锁构成不可丢通知的协议;这里复用条件变量已有的while重检逻辑,不把“发中断”当成自动消除竞争。

推论与应用

对N个READY线程,简单数组扫描派发可为O(N),队列取首可为O(1),但两者必须分别计入队列维护。保存固定数量寄存器的直接工作是常数,切换带来的TLB、缓存冷却和I/O等待并不因此是常数时间保证。

若OS-16采用轮转,每段运行不超过q时间单位,每次交接成本为c,且目标线程入队时CPU正在运行另一线程。设含当前运行者和目标在内,始终至多N个可运行线程,目标排在队尾,等待期间无新线程插队或优先级抢占。目标之前至多有N−1段运行及N−1次交接,因此等待上界为(N−1)(q+c)。若CPU原本空闲且目标是唯一可运行者,只需一次派发,另计成本c。去掉有界时间片或允许无限优先级插队,这个界立即失效;正确状态保存只给安全,不单独给公平。

翻译缓存必须随地址空间身份解释。即使栈和PC恢复完全正确,若沿用另一进程同VPN的缓存翻译,仍会破坏隔离。多核实现还要防同一线程被两个CPU同时派发,并对等待和唤醒建立真实同步关系,超出本文单核状态表的证明范围。

参考资料
  • Cox、Kaashoek、Morris,xv6教材 rev5,§8.1–8.4、§9.1–9.2;内核续点、调度与睡眠唤醒的分工。
  • Remzi与Andrea Arpaci-Dusseau,OSTEP: Mechanism—Limited Direct Execution,受控执行和计时器入口。本文队列次序与边界动作是明确选取的教学政策。
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具