|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#2
|
||||
|
||||
Все просто. Получить ID проще всего действительно через ЦПУИД. Можно считать из АПИКа. Номер процессора обычно равен номеру его Local APIC (хотя в таблице ACPI 2 номера - один ACPI CPU ID , и второй для его LAPIC'а; но делать их разными не имеет смысла). А HTT - который HyperThreading? Если да, то по спецификации SMP от интела для системы нет разницы между разными процессорами, разными ядрами одного камня и разными тредами процессора. LAPIC'у каждого из них назначается свой ID, по которому он уже работает.
Проверял своей осью на компе. 4 ядра, гипертрединг. Нашлось 8 нормальных ядер и 8 заблокированных (в таблице ACPI помечены недоступными). [offtop]Что, кстати, подтверждает слухи о том, что у интела один конвеер на серверные 8-ми ядерные процы и на остальные. Просто ядра блокируются для десктопов.[/offtop] Я, например, в обработчике прерывания локального таймера использую такое определение: Код:
LOCAL_APIC_ID_REG = 20h mov rbx, [LAPICAddr] mov eax, [rbx+LOCAL_APIC_ID_REG] shr eax, 24 ; Get LAPICID Где LAPICAddr - виртуальный адрес страницы, которая отображена на пространство MMIO локал апика. Физический адрес я получаю при инициализации системы из ACPI таблицы. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 03.09.2012 в 19:10. |