JOS Lab4 SMP system and LAPIC
JOS进入Lab4过后困惑我的一个问题是SMP(symmetric multiprocessing)究竟是怎么实现的,即操作系统是如何管理多CPU工作的?多CPU将如何影响我们设计JOS。
我下面写一下我目前的理解,如果有错误,请读者斧正。
APIC
首先要明确一点:当我们要新运行一个进程时,选用哪个CPU不归OS管,这全由Intel的提供的APIC硬件帮助你决定。
APIC是”Advanced Programmable Interrupt Controller”(高级可编程中断控制器),它位于Intel CPU内部,每一个CPU都有一个Local的APIC(叫做LAPIC),APIC是可编程(正如名字里的programmable)的,我们通过对LAPIC的寄存器进行读写,来和CPU进行交互。
LAPIC寄存器 memory-maped IO
一个问题是——既然我们是要读写LAPIC的寄存器,那他们的地址是在哪里呢?
Intel默认把他们的地址映射到了虚拟内存空间FEC00000的地方。(而在jos实验中我们把它重新map到了一个比较低的地址,因为他太高了,对于我们一kernbase为基础的映射方式来说,这段话对于理解LAPIC无关。)
于是我们就像读写内存一样,可以读写APIC的寄存器。
那么下一个问题是,究竟APIC为我们提供了哪些信息呢?
在kern/lapic.c的顶部可以看到&#x