Raphine/Raph_Kernelのメモ

CpuCtrlクラスによる動的CPU割り付けインターフェースの作成

CPUのコア割りあてに関する戦略

apic id と cpuid の変換

source/kernel/apic.hApicCtrl::Lapic::GetApicIdFromCpuId(int cpuid)

_apicIds[]という配列を参照している。この配列での添え字番号がcpuid,そこにある値がapicidとなっている。

"apic.cc" 197 行で_apicIds[]は初期化されている。

この元データは、MADT(Multiple APIC Description Table)に存在する。

madtStLAPIC構造体がそのエントリである。

エントリの出現順に、0からcpuidを付与する。(これはOS側でそう決めている)

madtStLAPICに書かれているInitial APIC ID (Processor ID)は、最小単位がスレッドなので、必ずしもコア単位で連続しない。そのため、OS側でCPU番号を再度振っている。

From: ACPI Spec. 6.1 5.2.12.1 MADT Processor Local APIC / SAPIC Structure Entry Order

To ensure that the boot processor is supported post initialization, two guidelines should be followed. The first is that OSPM should initialize processors in the order that they appear in the MADT. The second is that platform firmware should list the boot processor as the first processor entry in the MADT.

上記より、cpuid==0となるプロセッサコアは、ブートプロセッサである。

計画

現在の状況

cpuid int -> tekitou struct taskに対してcpuid TODO: cpuid