Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Міністерство освіти і науки, молоді та спорту України
Хмельницький національний університет
Кафедра системного програмування
Лабораторна робота №3
із дисципліни: «Архітектура компютерів»
Тема: «Ідентифікація процесорів»
Виконав:
ст. гр. КІ-09-X
Перевірив:
Тітова В.Ю.
2012
Мета:
Отримати практичні навички у визначенні типу, сімейства та моделі процесора.
Контрольні питання
Можливість програмного визначення типу процесора закладена в архітектуру 32- та 64-розрядних процесорів. У будь-якому процесорі відразу після апаратного скидання в регістрі (E)DX можна прочитати номер сімейства (3 - 386, 4 - 486, 5 - Pentium, 6 - P6 і т.д.), моделі, типу і степпінгу.
Поле "модель" дозволяє відрізняти, наприклад, Pentium MMX від "просто" Pentium 75-233 МГц або Pentium 60-66 МГц, Celeron від Pentium II або Pentium Pro. По полю "тип" можна відрізнити, наприклад, процесори OverDrive. Поле "степпінг" без таблиць виробника не розшифрувати, воно несе інформацію про нюанси - наприклад, виправлені чи ті чи інші помилки, можливий діапазон частот (визначається опосередковано і не точно).
Поле степпінгу (біти 3:0) - номер версії процесора в межах однієї моделі. Поле "тип" (біти 13:12) розрізняє процесори OEM-версій (00), OverDrive (01) і Dual (10); значення 11 зарезервовано. Найбільш цікава інформація міститься в полях "сімейство" (біти 11:8) і "модель" (біти 7:3). Старші біти (14-31) регістра EDX поки не використовуються (вони нульові).
Процесори 80386 мали дещо інше призначення біт: поле "сімейство" збігається з типом, поле "модель" займає біти 15:11, біти 7:0 відводяться під степпінг.
Для молодших процесорів регістр DH містить ідентифікатор процесора (01 - 8086/88, 02 -80286), DL - номер моделі.
Починаючи з процесорів Pentium з'явилася нова інструкція CPUID, за якою будь-яка програма на будь-якому рівні привілеїв в будь-який момент часу могла отримати ту ж інформацію, що і BIOS після скидання. Отриману інформацію програма може використовувати, наприклад, для вибору виконуваного коду, оптимального для даного процесора (або відмови виконання на "негідному" її процесорі), а також для налаштування констант програмних реалізацій затримок. Інструкція CPUID була реалізована і в ряді пізніх моделей процесорів класу 486. Формат інструкції практично безмежно розширюваний, з її допомогою процесор може видавати хоч весь свій словесний портрет (якщо цю можливість закладуть його розробники). Однак інформація для CPUID "зашивається" у процесор на етапі виготовлення кристалу, що не дозволяє, наприклад, "випитати" у процесора його офіційну тактову частоту (вона визначається пізніше - на етапі тестування вже готового процесора). А ця інформація була б корисна при боротьбі з піратським розгоном (перемаркуванням) процесорів.
Спеціальна постійна (тільки для читання) пам'ять процесорної інформації PIROM, яка зберігає такі дані, як електричні специфікації ядра процесора і кеш-пам'яті (діапазони частот і напруг), S-специфікацію (степпінг) і 64-бітний серійний номер процесора. Крім того, є незалежна пам'ять Scratch EEPROM, яка призначена для занесення системної інформації постачальником процесора (або комп'ютера з цим процесором) і може бути захищена від подальшого запису.
Для взаємодії з PIROM і Scratch EEPROM процесор має додаткову послідовну шину SMBus (System Management Bus) - окремий електричний інтерфейс, з яким працює чіпсет системної плати. Звернення до цих обліковими даними виходить досить складним - це ціла процедура, прив'язана до реалізації чіпсета, а не одна інструкція.
Програмам, завантажуваним операційною системою, та й самій ОС, інформація про процесор з регістра EDX недоступна (апаратне скидання був занадто давно). Задача ідентифікації ускладнюється тим, що покоління процесора заздалегідь невідомо. Коли з'явився процесор 80286, його (і всі наступні) відрізняли від 8086/88 за значеннями, що зберігаються для стеку інструкцією PUSH SP: перші процесори спочатку декрементували покажчик стека, а потім його зберігали. Для ідентифікації процесорів, починаючи ще з 16-розрядних, рекомендується аналіз значення регістра прапорців, збереженого за інструкцією PUSHF після спроби його зміни. Наведемо параметри регістра прапорців у тому порядку, в якому їх аналізують при ідентифікації типу:
у процесорів 8086/88 біти 12-15 завжди встановлені в 1 - спроба їх скидання не вдається;
у 80286 в реальному режимі біти 12-15 завжди скинуті;
у 32-розрядних процесорів в реальному режимі біт 15 завжди скинутий, а біти з 12-14 зберігають останнє завантажене в них значення. У захищеному режимі біт 15 завжди скинутий, а біт 14 зберігає останнє завантажене в нього значення (біти 12, 13 можна змінити тільки за IOPL = 0).
Для 32-розрядних процесорів аналізується EFLAG:
біт 18 доступний, починаючи з процесорів 486, - у 80386 його неможливо змінити;
біти 19 (VIF) та 20 (VIP) у процесорів, що не підтримують розширення віртуального режиму (VME) завжди нульові;
біт 21 (ID) визначає можливість використання інструкції CPUID. Ознакою доступності інструкції є можливість програмної зміни значення цього біта.
Для визначення присутності співпроцесора виконують інструкцію FNINIT, після чого виконують інструкцію FNSTENV і перевіряють коректність образу співпроцесора, збереженого в пам'яті. Тип співпроцесора зазвичай визначається типом CPU, крім процесора 80386, який може працювати як з 80287, так і з 80387. Їх розрізнити можна по способу представлення +нескінченність і -нескінченність: у 287 вони однакові, у 387 - різні.
Інструкція CPUID, доступна, починаючи з Pentium і деяких моделей 486, викликається з параметром, зазначеним у регістрі EAX. Значення EAX при виклику CPUID, зазначені в дужках, визначає функцію виклику:
CPUID (0) - в регістр EAX повертається максимально допустиме значення параметра виклику; в регістрах EBX, EDX і ECX процесор повертає символьний рядок, специфічний для виробника. Символи рядку розміщуються в регістрах у зазначеному порядку, починаючи з молодших байт.
Біт |
Назва |
Призначення |
0 |
FPU |
Floating Poin Unit - наявність математичного співпроцесора |
1 |
VME |
Virtual-8086 Mode Enhancements - розширення режиму V86 (віртуалізація прапора переривань) |
2 |
DE |
Debugging Extensions - розширення налагодження (можливість зупинки за зверненням до портів) |
3 |
PSE |
Page Size Extension - можливість застосування розміру сторінки в 4 Мбайт |
4 |
TSC |
Time Stamp Counter - наявність лічильника міток реального часу |
5 |
MSR |
Model Specific Register - підтримка модельно-специфічних регістрів в стилі Pentium (інструкції RDMSR, WRMSR) |
6 |
PAE |
Physical Address Extension - можливість розширення фізичної адреси до 36 біт |
7 |
MCE |
Machine Check Exception - підтримка виключення машинного контролю # MC |
8 |
CX8 |
Підтримка інструкції CMPXCHG8B |
9 |
APIC |
Наявність вбудованого програмно-доступного контролера переривань APIC |
10 |
- |
Зарезервовано |
11 |
SEP |
SYSENTER Present - підтримка інструкцій швидких системних викликів SYSENTER і SYSEXIT |
12 |
MTRR |
Memory Type Range Registers - наявність регістра керування кешуванням MTRRcap |
13 |
PGE |
Page Global Enable - підтримка біт глобальності в елементах каталогу і таблиць сторінок, а також біта PGE в регістрі CR4 |
14 |
MCA |
Machine Check Architecture - підтримка архітектури машинного контролю |
15 |
CMOV |
Conditional Move - підтримка інструкцій умовної пересилання CMOVcc, а якщо є FPU, то і інструкцій FCMOVCC і FCOMI |
16 |
PAT |
Page Attribute Table - підтримка таблиць атрибутів сторінок (PAT) |
17 |
PSE-36 |
36-bit Page Size Extension - можливість використання 36-бітної фізичної адресації для сторінок в 4 Мб |
18 |
PN |
Processor Number підтримка повідомлень 96-бітного серійного номера за інструкцією CPUID(3) |
1822 |
- |
Зарезервовано |
23 |
MMX |
Підтримка MMX |
24 |
FXSR |
Fast floating point save and restore підтримка інструкцій швидкого збереження і відновлення контексту FPU (інструкцій FXSAVE і FXRSTOR). Вказує на доступність індикатора використання цих інструкцій операційною системою (CR4.OSFXSR) |
25 |
XMM |
Наявність блоку XMM (підтримка нових інструкцій розширення SSE) |
24...31 |
- |
Зарезервовано |