第14章:任务调度
本章概述
有了进程管理后,我们需要一个调度器让多个进程”同时”运行。本章将实现定时器驱动的上下文切换和轮转调度算法。
学习目标
- 理解抢占式调度的原理
- 配置可编程间隔定时器(PIT)
- 实现上下文切换(context switch)
- 实现轮转(Round-Robin)调度算法
- 看到多个任务交替运行!
前置知识
- 中断处理(第9章)
- 进程管理(第13章)
知识要点
调度器工作原理
时钟中断(IRQ0) → 定时器处理器 → 调度决策 → 上下文切换
│
┌─────────────┼─────────────┐
↓ ↓ ↓
继续当前进程 切换到下一个 抢占当前进程
上下文切换流程
保存当前进程: 恢复下一进程:
push edi mov esp, next->esp
push esi pop edi
push ebx pop esi
push ebp pop ebx
mov [prev->esp], esp pop ebp
ret (→ 新进程的EIP)
文件结构
14-任务调度/
├── README.md ← 本文件
├── 理论讲解.md
├── code/
│ ├── timer.h ← 定时器接口
│ ├── timer.c ← PIT配置和定时器中断
│ ├── scheduler.h ← 调度器接口
│ ├── scheduler.c ← 轮转调度实现
│ ├── switch.asm ← 上下文切换汇编
│ ├── kernel.c
│ ├── Makefile
│ └── [共享文件]
├── 常见错误.md
└── 练习题.md
构建与测试
cd code
make
make run
# 应该能看到多个任务交替打印输出!本章收获
- ✅ PIT定时器配置
- ✅ 上下文切换实现
- ✅ Round-Robin调度器
- ✅ 多任务并发运行