apic

https://wiki.osdev.org/APIC

https://wiki.osdev.org/IOAPIC

https://zhuanlan.zhihu.com/p/26464793

https://www.bbsmax.com/A/kjdwX7BzNp/

apic 发展历程:

pic(8259) -> apic(早期P6) -> xapic(PENTIUM 4 AND XEON) -> x2apic

检测APIC版本可以用CPUID指令。

在xAPIC模式中,寄存器是通过内存映射到一段物理地址。有一个默认值。防止同其他地址冲突,这个基地址又可以重新指定到另外一个地方。BIOS开发人员在对付APIC时可能会用到这个功能。

在x2APIC模式中,取消了内存映射方式来读取APIC的寄存器,而是采用了MSR的方式。MSR的全写是Model-specific register(每个型号特有的寄存器)这样的好处是不用再担心内存地址的冲突问题。

不同的APIC模式的开启,关闭以及状态切换之间又有一些规则。如果你要自己改这些地方,就要按照规定来。同时注意在x2APIC模式下,写入寄存器的时候不保证顺序,所以要自己小心,比如用个BARRIER之类的。