xv6_chapter7 Scheduling
7.2 Code: Context switching 7.3 Code: Scheduling graph TD subgraph "scheduler() 执行流程" S1["遍历进程表"] --> S2["找到 RUNNABLE 进程"] S2 --> S3["`**swtch(&c->context, &p->context)** 切换到进程`"] S3 -.->|"立即切换"| P1 S4["`**从 swtch 返回** c->proc = 0`"] --> S1 end subgraph "进程执行与切换" P1["⚙️ 进程执行"] --> P2{"何时需要切换?"} P2 -->|"主动让出CPU"| Y1["yield()"] P2 -->|"进程退出"| E1["exit()"] P2 -->|"等待资源"| SL1["sleep()"] Y1 --> Y2["p->state = RUNNABLE"] E1 --> E2["p->state = ZOMBIE"] SL1 --> SL2["p->state = SLEEPING"] Y2 --> SCHED1["`**sched()**`"] E2 --> SCHED2["`**sched()**`"] SL2 --> SCHED3["`**sched()**`"] SCHED1 --> SWTCH1["`**swtch() 切换回scheduler**`"] SCHED2 --> SWTCH2["`**swtch() 切换回scheduler**`"] SCHED3 --> SWTCH3["`**swtch() 切换回scheduler**`"] SWTCH1 -....