Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.29. Команда CPUID

Команда CPUID документирована, начиная с Pentium, хотя реально появилась в старших моделях МП 486. Прикладная программа может определить доступность этой команды, если ей удается менять значение флага ID (21-й бит регистра ef). Надо отметить, что эта проверка имеет смысл только для МП 486, поскольку более ранние процессоры эту команду однозначно не поддерживают, а более поздние ‑ однозначно поддерживают.

Старые трансляторы, которыми пользуется в реальной жизни, эту команду «не понимают», потому ее приходится задавать в программе в машинных кодах:

db 0fh

; это CPUID

db 0a2h

 

Команда может использовать несколько функций, задаваемых в регистре еах. Результаты возвращаются в регистрах еах, евх, есх и еdx. При этом имеются два набора функций, задаваемых в еах:

- первый набор (еах = 0, 1, 2, или 3) возвращает базовую информацию  о процессоре;

- второй набор (значение в еах лежит в диапазоне от 80000000h до 80000004h) возвращает расширенную информацию о процессоре.

При этом различные процессоры поддерживают различные подмножества этих наборов (см. табл. 3.21).

Таблица 3.21

Семейство

Базовый набор

Расширенный набор

Поздние 486 и Pentium

Максимальный ЕАХ = 1

Не поддерживается

Pentium Pro, Pentium IIи Celeron

Максимальный ЕАХ = 2

Не поддерживается

Pentium III

Максимальный ЕАХ = 3

Не поддерживается

Pentium IV

Максимальный ЕАХ = 2

ЕАХ от 80000000h до 80000004h

Но и без табл. 3.21 всегда можно определить набор функций, который поддерживает неизвестный нам процессор. Делается это следующим образом:

                   mov eax, 0

                   cpuid.

     После этого в регистре al вернется максимальная функция базового набора для данного процессора, например, для Pentium вернется 1.

Аналогично можно определить максимальное число и для расширенного набора:

                   mov eax, 80000000h

                   cpuid.

После этого в регистре eax вернется максимальное для данного процессора число для расширенного набора. Если вернулось число, меньшее 80000000h, то расширенный набор не поддерживается.

Если в ЕАХ загрузить число, превышающее максимально допустимое для данного процессора, будет выполнена максимально возможная функция для базового набора. Например, для Pentium IV при ЕАХ = 5 будет выполнена функция ЕАХ = 2 и при ЕАХ = 80000005h будет выполнена та же функция ЕАХ = 2.

Далее рассмотрим сведения о процессоре, возвращаемые командой CPUID.

Функция 0 (ЕАХ = 0).

В ЕАХ возвращается максимальный номер функции  базового набора, разрешенный для данного процессора.

В остальных регистрах возвращаются сведения о производителе. Например:

EBX

ASCII ‘u

ASCII’n

ASCII’e

ASCII’G

EDX

ASCII’I

ASCII’e

ASCII’n

ASCII’i

ECX

ASCII’l

ASCII’e

ASCII’t

ASCII’n

Это означает GenuineIntel («Настоящий Intel») (47h 65h 6eh 75h 69h 6eh 65h 49h 6eh 74h 65h 6ch).

Для AMD возвращается  AuthenticAMD («Натуральный AMD»).

Функция 1 (EAX = 1).

В ЕАХ возвращается сигнатура процессора:

- биты 3‑0 – степпинг (Stepping ID);

- биты 7‑4 – модель (Model Number);

- биты 11‑8 – семейство (Family Code);

- биты 13‑12 – тип (Processor Type);

- биты 15‑14 – резерв;

- биты 19‑16 – расширение модели (Extended Model);

- биты 27‑20 – расширение семейства (Extended Family);

- биты 31‑28 – резерв.

Основным здесь является поле Семейство. В нем возвращается номер семейства процессора. Например, для МП 486 в этом поле вернется 4, для Pentium – 5, для P6 – 6 и для Pentium IV ‑ 0fh. (К Р6 относятся Pentium Pro, Pentium II, Pentium III и Celeron). Поле Расширение семейства должно использоваться совместно с полем Семейство, но в настоящее время оно еще не используется, так как даже для Pentium IV в этом поле возвращаются нули. Поле Модель (и совместно с ним поле Расширение модели, в котором на сегодняшний день также всегда возвращаются нули) позволяет определить номер модели внутри семейства, а поле Степпинг ‑ номер варианта внутри модели. Поле Тип трактуется следующим образом:

     00      Original OEM processor (обычный процессор);

     01      OverDrive ® processor;

     10      Dual processor (поддерживает двухпроцессорные конфигурации);

     11      Intel reserved (Do not use).

Существуют справочные таблицы, в основном позволяющие по сигнатуре однозначно идентифицировать процессор. Например: Семейство ‑ 0101, Модель – 0100, Тип – 01, Степпинг – хххх, остальные поля – нули, это Pentium OverDrive процессор с ММХ-технологией. Однако имеется ряд случаев, когда по сигнатуре невозможно однозначно идентифицировать процессор. В частности процессоры  Pentium II 5-й модели, Pentium II Xeon 5-й модели и Celeron 5-й модели имеют одинаковую сигнатуру. Поэтому для их более точной идентификации приходится исследовать наличие и размер L2-кэша (CPUID при ЕАХ = 2). И даже в этом случае невозможно различить Pentium II и Xeon с кэшем на 512 Кбайт.

Для Pentium III, поддерживающего PSN (бит 18 в табл. 3.23), сигнатура одновременно представляет собой старшие 32 бита 96-битного сериального номера процессора (Serial Number). Младшие 64 бита этого номера возвращаются командой CPUID при ЕАХ = 3.

Например (для ЕАХ = 1):

МП 486 возвратил в ЕАХ = 480h,

5x86 ‑ EAX = 4F4h,

Pentium ‑ EAX = 543h,

Pentium II – EAX = 633h.

Естественно и эти, и приводимые ниже результаты были получены на конкретных моделях процессоров. Для других моделей цифры могут быть другими.

В ЕВХ (при ЕАХ = 1), как правило, возвращаются нули. Однако, начиная с Pentium III модель 8 (а возможно и ранее), информация, возвращаемая в этом регистре, имеет следующий смысл:

- биты 7‑0 ‑ идентификатор марки процессора (Brand ID);

- биты 15‑8 ‑ размер строки кэша (chunks);

- биты 23‑16 ‑ резерв;

- биты 31‑24 ‑ физический идентификатор встроенного в процессор контроллера прерываний APIC (APIC ID).

Поле BRAND ID (если там не нули) упрощает идентификацию процессора (см. табл. 3.22).

Поле CHUNKS задает размер строки кэша (число в поле надо умножить на 8), который будет использоваться в команде CLFLUSH, если последняя в процессоре поддерживается.

Таблица 3.22

Brand ID

CPU

00h

Не поддерживается

01h

Intel® Celeron™ processor

02h

Intel® Pentium® III processor

03h

Intel® Pentium® III Xeon™ processor

04h

Intel® Pentium® III processor

08h

Intel® Pentium® 4 processor

09h

Intel® Xeon™ processor

Другие

Резерв

В EDX (при ЕАХ = 1) возвращаются особенности, которые поддерживает данный процессор. Смотри табл. 3.23.

Таблица 3.23

№ БИТА

ИМЯ

ОПИСАНИЕ

Бит 0 = 1

FPU

Есть встроенный сопроцессор

Бит 1 = 1

VME

Поддерживается VME

Бит 2 = 1

DE

Поддерживается DE

Бит 3 = 1

PSE

Поддерживается PSE

Бит 4 = 1

TSC

Поддерживается TSC (команда RDTSC)

Бит 5 = 1

MSR

Поддерживается MSR (команды RDMSR и WRMSR)

Бит 6 = 1

PAE

Поддерживается РАE

Бит 7 = 1

MCE

Поддерживается MСE

Бит 8 = 1

CXB

Поддерживается команда СМРХСНG

Бит 9 = 1

APIC

Есть встроенный APIC

Бит 10

 

Резерв

Бит 11 = 1

SEP

Поддерживаются команды SYSENTER и SYSEXIT

Бит 12 = 1

MTRR

Поддерживается MTRR

Бит 13 = 1

PGE

Поддерживается PGE

Бит 14 = 1

MCA

Поддерживается MGE_CAP (machine check global capability) MSR

Бит 15 = 1

CMOV

Поддержка команд CMOV cc (mov and compare), cc‑условие

Бит 16 = 1

PAT

Поддерживается РАТ (Page Attribute Table)

Бит 17 = 1

PSE-36

Поддерживается PSE-36

Бит 18 = 1

PSN

Процессор имеет сериальный номер

Бит 19 = 1

CLFSH

Поддерживается команда CLFLUSH

Бит 20

 

Резерв

Бит 21 = 1

DS

Поддерживается возможность записи отладочной информации и «истории переходов» в созданный в памяти резидентный буфер

Бит 22 = 1

ACPI

Поддерживается контроль температу-ры и регулировка производительности процессора под управлением ПО

Бит 23 = 1

MMX

Поддерживается ММХ

 Бит 24 = 1

FXSR

Поддерживаются команды  FXRSTOR и FXRSAVE

Бит 25 = 1

SSE

Поддерживается набор команд SSE

Бит 26 = 1

SSE2

Поддерживается набор команд SSE2

Бит 27 = 1

SS

Самослежение процессора за собственными кэшами (Self-Snoop)

Бит  28

 

Резерв

Бит 29 = 1

TM

Встроенный аппаратный контроль температуры.

Биты 31-30

 

Резерв

Например:

5х86 вернул EDX = 1,

486 ‑ ЕDX = 3,

Pentium c MMX ‑ EDX = 8001bfh,

Pentium II – EDX = 80fbffh.

Функция 2 (EAX = 2).

Данная функция возвращает сведения о всех видах кэш-памяти процессора. В al возвращается число, задающее, сколько раз надо запустить CPUID с ЕАХ = 2 для получения полных сведений об имеющихся кэшах. Реально в al всегда возвращается 1. В остальных байтах регистров EAX, EBX, EDX и ECX возвращаются дескрипторы кэшей. Список дескрипторов проведен в табл. 3.24.

Таблица 3.24

Дескриптор

Описание

00h

Пустой

01h

TLB команд 4 Kбайт; 4 w.s., 32 строки

02h

TLB команд 4 Мбайт; fully., 2 строки

03h

TLB данных 4 Kбайт; 4 w.s., 64 строки

04h

TLB данных 4 Мбайт; 4 w.s.,  8 строк

06h

Кэш команд, 8 Кбайт; 4ws, строка-32байта

08h

Кэш команд, 16 Кбайт; 4ws, строка-32байта

0ah

Кэш данных, 8 Кбайт;2ws, строка-32байта

0ch

Кэш данных, 16 Кбайт; 4ws, строка-32байта

40h

Нет L2 кэша для P6 или L3 для Pentium IV

41h

Кэш L2, 128 Кбайт; 4ws, строка-32байта

42h

Кэш L2, 256 Кбайт; 4ws, строка-32байта

43h

Кэш L2, 512 Кбайт; 4ws, строка-32байта

44h

Кэш L2, 1 Mбайт; 4ws, строка-32байта

45h

Кэш L2, 2 Mбайт; 4ws, строка-32байта

50h

Общий TLB команд, fully, 64 строки

51h

Общий TLB команд, fully, 128 строк

52h

Общий TLB команд, fully, 256 строк

5bh

Общий TLB данных, fully, 64 строки

5ch

Общий TLB данных, fully, 128 строк

5dh

Общий TLB данных, fully, 256 строк

66h

Кэш данных, 8 Кбайт ;4ws, строка‑64 байта

67h

Кэш данных, 16 Кбайт ;4ws, строка‑64 байта

68h

Кэш данных, 32 Кбайт ;4ws, строка‑64 байта

70h

Trace-кэш команд 8ws, 12K mops

71h

Trace-кэш команд 8ws, 16K mops

72h

Trace-кэш команд 8ws, 32K mops

79h

Кэш L2, 128 Кбайт ;8ws, строка‑64байта

7ah

Кэш L2, 256 Кбайт ;8ws, строка‑64байта

7bh

Кэш L2, 512 Кбайт ;8ws, строка‑64байта

7ch

Кэш L2, 1 Mбайт ;8ws, строка‑64байта

82h

Кэш L2, 256 Kайт ;8ws, строка‑32байта

83h

Кэш L2, 512 Kбайт ;8ws, строка‑32байта

84h

Кэш L2, 1 Mбайт ;8ws, строка‑32байта

85h

Кэш L2, 2 Mбайт ;8ws, строка‑32байта

В табл. 3.24 4ws ‑ частично ассоциативный кэш с четырьмя строками на горизонтали. (4 way-set), fully – полностью ассоциативный кэш, «общий TLB» – используе-мый и для обычных и для больших страниц, trace-кэш микроопераций (декодированных команд) введен в архитектуру Pentium IV. Например, Pentium II вернул:

EAX = 03020101h,

EBX = 0,

ECX = 0,

EDX = 0c040843h.

Intel приводит пример того, что возвращает Pentium IV:

EAX = 665b5001h,

EBX = 0,

ECX = 0,

EDX = 007a7040h.

Функция 3 (ЕАX = 3).

ЕАХ и ЕВХ зарезервированы. В ЕСХ и ЕDX возвращаются 64 младших бита 96-битного сериального номера процессора (старшие 32 бита этого номера берутся из сигнатуры, см. ЕАХ = 1). В ЕСХ биты 31‑0, а в EDX биты 63‑32.

Расширенный набор функций.

ЕАХ = 80000000h.

В ЕАХ – максимальное значение расширенного набора. EBX, ECX, EDX – зарезервированы.

ЕАХ = 800000002h – 80000004h.

B EAX, EBX, ECX, EDX последовательно возвращается Маркерная строка (Brand String) процессора в формате ASCIIZ. Строка состоит из 47 ASCII-символов и завершается (48-м) нулем. Она идентифицирует процессор и содержит его максимальную рабочую частоту. Расширенный набор доступен, начиная с Pentium IV.

Intel при определении процессора предлагает следующую последовательность действий.

1. Запустить CPUID при ЕАХ = 80000000h. Если в ЕАХ вернулось большее число (чем 80000000h), то прочесть Маркерную строку и определить процессор. Если вернулось меньшее число, то перейти к следующему пункту.

2. Запустить CPUID при ЕАХ = 1. Если bl>0, то есть BRAND ID и им пользуемся для определения процессора.

3. Если bl = 0, используем сигнатуру процессора.

Этот алгоритм пригоден, если уверены в том, что программа не будет запускаться на процессорах ниже Pentium. Если это не так, то перед тем как запускать CPUID, придется стандартным образом поработать с регистром флагов. В табл. 3.25 приводятся коротко все описанные выше сведения о команде CPUID.

Таблица 3.25

Функция  в ЕАХ

Информация о процессоре

Базовая информация

0

ЕАХ ‑Максимальное значение функции для базового набора

ЕВХ ‑ Genu

ЕСХ ‑ ntel

EDX ‑ ineI

1

ЕАХ ‑ Сигнатура процессора или, если установлен бит 18 в  особенностях, старшие разряды сериального номера.

ЕВХ ‑ Brand ID, chunks, APIC ID

ЕСХ ‑ Резерв

EDX ‑ Особенности процессора

2

ЕАХ, ЕВХ, ЕСХ, EDX  Дескрипторы кэшей

3

ЕАХ, ЕВХ ‑ Резерв

ЕСХ ‑ Биты 31-0 сериального номера

EDX ‑ Биты 63-32 сериального номера

Расширенная информация

80000000h

ЕАХ ‑ Максимальное значение функции для расширенного набора

 ЕВХ, ЕСХ, EDX ‑ Резерв

80000001h

ЕАХ ‑ Расширение сигнатуры и битов особенностей  (пока зарезервир.)

ЕВХ, ЕСХ, EDX ‑ Резерв

80000002h

ЕАХ  ‑  Маркерная строка

ЕВХ ЕСХ, EDX ‑ Продолжение маркерной строки

80000003h

ЕАХ, ЕВХ, ЕСХ, EDX ‑ Продолжение маркерной строки

80000004h

ЕАХ, ЕВХ, ЕСХ, EDX ‑ Продолжение маркерной строки




*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.