第9章 异常、IRQ 与时间:内核获得外部世界的节拍
内核版本:Linux 7.1.3
架构:x86_64
核心源码路径:
arch/x86/kernel/traps.carch/x86/kernel/idt.carch/x86/kernel/irqinit.ckernel/irq/irqdesc.ckernel/time/tick-common.ckernel/time/timekeeping.ckernel/time/hrtimer.c
9.1 没有中断和时钟,调度器只是摆好了桌子
第 8 章结束时,内核已经有了页分配器、SLUB、vmalloc、percpu 等基础能力。第 6 章里start_kernel()随后调用sched_init(),调度器的数据结构也开始可用。但这还不等于系统已经能真正多任务运行。
真正的多任务系统需要两个能力:
- CPU 能被外部事件打断:设备完成 I/O、网卡收到包、键盘输入、IPI、APIC timer。
- 内核有时间基准:知道现在是什么时间、下一个 tick 什么时候到、定时器什么时候过期。