第9章 异常、IRQ 与时间:内核获得外部世界的节拍

第9章 异常、IRQ 与时间:内核获得外部世界的节拍

第9章 异常、IRQ 与时间:内核获得外部世界的节拍

内核版本:Linux 7.1.3
架构:x86_64
核心源码路径:

  • arch/x86/kernel/traps.c
  • arch/x86/kernel/idt.c
  • arch/x86/kernel/irqinit.c
  • kernel/irq/irqdesc.c
  • kernel/time/tick-common.c
  • kernel/time/timekeeping.c
  • kernel/time/hrtimer.c

9.1 没有中断和时钟,调度器只是摆好了桌子

第 8 章结束时,内核已经有了页分配器、SLUB、vmalloc、percpu 等基础能力。第 6 章里start_kernel()随后调用sched_init(),调度器的数据结构也开始可用。但这还不等于系统已经能真正多任务运行。

真正的多任务系统需要两个能力:

  • CPU 能被外部事件打断:设备完成 I/O、网卡收到包、键盘输入、IPI、APIC timer。
  • 内核有时间基准:知道现在是什么时间、下一个 tick 什么时候到、定时器什么时候过期。