|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Определение № ядра процессора
Привет всем!
Ситуация такова: код у меня расположен на нулевом кольце, это код обработки прерывания. Процессор, предположим попался двухядрёный. Как программно узнать, какой именно из пары камней выполняет данный код? Трамблёрить пытался, но к сожалению, почти безрезультатно, нашёл только про Local APIC ID: Код:
mov eax, 01h cpuid ;get APIC ID from EBX[31:24] shr ebx, 24 and ebx, 0ffh ; not really necessary but makes the code nice Потом догуглил, что правильнее будет считывать базу APIC из MSR 0x0000001Bh, а только затем выдёргивать один байт по адресу BASE_APIC + 23H, ибо cpuid сбрасывает конвейера процессора в аут. В результате нарисовался код: Код:
movl $1, %eax cpuid movl %ebx, cpuid_ebx Код:
int procnum = (cpuid_ebx >> 16) & 0xFF; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |