Процесори зсередини. Процесори зсередини Конструкція системної плати ЕОМ

В даний час основну частку ринку універсальних мікропроцесорів займають 32-бітові та 64-бітні мікропроцесори. Цей розділ містить опис мікропроцесорів корпорації Intel з 32-бітною архітектурою, які складають сімейство IA-32 (Intel Architecture-32). Ця архітектура складає основу 64-розрядної архітектури x86-64 корпорації Intel та архітектури AMD-64 корпорації AMD.

2.1 Склад та функції регістрів

Реєстраминазивають високошвидкісну пам'ять, розташовану всередині ЦПУ та призначену для оперативного зберігання даних та швидкого доступу до них з боку внутрішніх компонентів процесора. Наприклад, при виконанні оптимізації циклів програми швидкості, змінні, до яких виконується доступ всередині циклу, розташовують в регістрах процесора, а не в пам'яті. Сукупність всіх таких регістрів іноді називають надоперативною пам'яттю (СоЗУ).

2.1.1 Основні регістри

На малюнку 2.1 зображено структуру основних регістрів та їх назви. Існує 8 регістрів загального призначення(РОН), 6 сегментних регістрів, регістр прапорів, регістр покажчика команд, а також системні регістри, регістри налагодження та тестування.

Реєстри загального призначення (Рони). Ці регістри використовуються в основному для виконання арифметичних операцій та пересилання даних. До кожного РОН можна звернутися як до 32-розрядного або як до 16-розрядного регістру. До деяких регістрів можна звертатися як до 8-розрядних. Наприклад, регістр ЕАХ є 32-розрядним, проте його молодші 16-розрядів називаються регістром АХ. Старші 8-розряди регістру АХ називаються АН, а молодші 8-розряди - AL. 16-розрядні частини індексних регістрів і регістрів-покажчиків зазвичай застосовуються лише за написанні програм реального режиму адресації, тобто. для MS-DOS або її емуляції у Windows.

Значення абревіатур імен регістрів:

Префікс E на початку імен регістрів – expanded (розширений).

Постфікс X наприкінці імен регістрів означає, власне, регістр.

AX - Accumulator (накопичувач).

BX - Base register (реєстр бази).

CX - Counter (лічильник).

DX – Data (дані).

AL – Accumulator low (найменша половина регістру AX).

AH – Accumulator high (старша половина регістру AX).

BL – Base low (найменша половина регістра BX).

BH – Base high (старша половина регістру BX).

CL – Counter low (молодша половина регістру CX).

CH – Counter high (старша половина регістру CX).

DL – Data low (найменша половина регістру DX).

DH – Data high (старша половина регістру DX).

SI - Source index (індекс джерела). Містить поточну адресу джерела.

DI – Destination index (індекс отримувача). Містить поточну адресу приймача.

BP – Base pointer (покажчик бази). Для довільного доступу до даних усередині стека

SP – Stack pointer (покажчик стека). Містить вказівник вершини стека.

CS – Code segment (сегмент коду).

DS – Data segment (сегмент даних).

ES – Extra Data segment (додатковий сегмент даних).

FS - Extended Data segment (додатковий сегмент даних).

GS - Extended Data segment (додатковий сегмент даних).

SS - Stack segment (сегмент стека).

IP – Instruction pointer (покажчик команд чи лічильник команд).

F – Flags (реєстр прапорів).

GDTR – Global descriptor table register (реєстр глобальної таблиці дескрипторів).

IDTR – Interruption descriptor table register (реєстр таблиці дескрипторів переривань).

TR - Task register (Регістр завдань).

LDTR – Local descriptor table register (реєстр локальної таблиці дескрипторів).

DR – Debug register (реєстр налагодження).

TR – Test register (реєстр тестування).

CR - Control register (керуючий регістр).

Особливості використання регістрів. За виконання команд процесором частина регістрів загального призначення мають спеціальне призначення.

    Вміст регістру ЕАХ автоматично використовується при виконанні команд множення та розподілу. Оскільки цей регістр зазвичай пов'язані з виконанням арифметичних команд, його часто називають розширеним регістром акумулятора (expanded accumulator).

    Регістр ЕСХ автоматично використовується процесором як лічильник циклу.

    За допомогою регістру ESP відбувається звернення до даних, що зберігаються у стеку. Стек- Це системна область пам'яті, звернення до якої здійснюється за принципом FILO (First input - last output) "першим записали, останнім прочитали". Цей регістр зазвичай ніколи не використовується для виконання звичайних арифметичних операцій та команд пересилання даних. Його часто називають розширеним регістром покажчика стека (expanded stack pointer). Регістр ESP вказує на адресу вершини стека (адреса, куди заноситиметься наступна змінна командою PUSH).

    Регістри ESI та EDI зазвичай використовують для команд високошвидкісного пересилання даних з однієї ділянки пам'яті до іншої. Тому їх іноді називають розширеними індексними регістрами джерелаі одержувачаданих (expanded source index і expanded destination index). Регістр ESI - адреса джерела, і містить адресу початку блоку інформації для операції "перемістити блок" (повна адреса DS:ESI), а регістр EDI - адреса призначення (повна адреса ES:EDI).

    Регістр EBP зазвичай використовується компіляторами мов програмування високого рівня для звернення до параметрів функції та посилань на локальні змінні, розміщені у стеку. Він не повинен використовуватися для виконання звичайних арифметичних операцій або для переміщення даних, за винятком випадків застосування спеціальних методик програмування досвідченими програмістами. Його часто називають розширеним регістром покажчика стекового кадру (expanded frame pointer). Реєстр ЄВР містить адресу, починаючи з якої в стек вноситься або забирається інформація (або "глибина" стека). Параметри функцій мають позитивне зрушення щодо ЄВР, локальні змінні - негативний зсув, а повна адреса цієї ділянки пам'яті зберігається в регістровій парі SS:EBP.

    Реєстр EIP зберігає зміщення (offset) адреси команди. Повна адреса на наступну команду зберігається в регістровій парі CS:ЕIP.

    Регістри ESP, EBP, ESI, EDI зберігають усунення адреси даних.

Сегментні регістри. Ці регістри використовуються як базові при зверненні до заздалегідь розподілених областей оперативної пам'яті, які називаються сегментами.Існує три типи сегментів і, відповідно, сегментних регістрів:

    коду (CS), у яких зберігаються лише команди процесора, тобто. машинний код програми;

    даних (DS, ES, FS і GS), в них зберігаються області пам'яті, що виділяються під змінні програми та під дані;

    стека (SS), у яких зберігається системна область пам'яті, звана стеком,в якій розподіляються локальні (тимчасові) змінні програми та параметри, що передаються функціям під час їхнього виклику.

Сегментні регістри завантажуються селекторами сегментів, які є усуненням або глобальної таблиці дескрипторів (GDT – Global Descriptor Table), або локальної таблиці дескрипторів (LDT – Local Descriptor Table).

Біти сегментних регістрів містять таку інформацію:

0 – 1. RPL – Requested Privilege Level. Рівень запитуваних привілеїв.

2. TI – Table Indicator. Біт таблиці індикаторів. Вказує процесору, де шукати вказаний селектор. Якщо біт встановлено, процесор читає селектор з таблиці локальних дескрипторів. Якщо біт скинутий, процесор читає селектор з таблиці глобальних дескрипторів.

3 – 15. У цих бітах зберігається індекс глобальної чи локальної таблиці дескрипторів.

Регістр CS занадто малий для зберігання сегмента коду, тому він повинен бути встановлений на сегмент, що можна здійснити. Регістр SS дуже малий для зберігання сегмента стека, тому він повинен бути встановлений на дозволений за записом сегмент даних.

Рівень привілеїв, встановлений сегментний регістр CS є рівнем привілеїв запущеної програми, і називається поточним рівнем привілеїв (CPL – Current privilege level). Сегментні регістри DS, ES, FS, GS призначені для даних і мають бути встановлені на сегмент даних із роздільною здатністю запису. Рівні привілеїв, потрібні кожним із цих селекторів, мають бути більшими, ніж поточний рівень привілеїв CPL.

З кожним із шести сегментних регістрів пов'язані тіньові регістри дескрипторів. У тіньові регістри в захищеному режимі переписуються 32-розрядна базова адреса сегмента, 20-розрядна межа та атрибути (права доступу) з дескрипторних таблиць.

Регістр покажчика команд. У регістрі EIP зберігається зміщення щодо початку програми (offset) наступної команди. У процесорі є кілька команд, які впливають вміст цього регістру. Зміна адреси, що зберігається в регістрі ЕIP, викликає передачу управління на нову ділянку програми.

Реєстр прапорів EF (EFLAGZ) . Біти цього регістру називаються прапорами і відповідають або особливості виконання деяких команд CPU, або відображають результат виконання команд блоком ALU. Прапори регістру перелічені у таблиці 2.1. Біти з 22 до 31 включно – зарезервовані.

Таблиця 2.1 Реєстр прапорів

Для аналізу бітів цього регістру передбачені спеціальні команди процесора. Кажуть, що прапор встановлений,коли біт прапора дорівнює 1, і що прапор скинутий,коли значення його біта дорівнює 0. Крім цього розширений регістр EF порівняно з регістром F містить п'ять нових прапорів.

Прапори управління.Стан бітів регістру EFLAGS, відповідних прапорам, що управляє, програміст може змінити за допомогою спеціальних команд процесора. Ці прапори (DF, IF, TF) керують процесом виконання деяких команд CPU:

8. TF – Trap flag. Прапор трасування (покрокового режиму). При його встановленні (TF=1) після виконання кожної команди викликається внутрішнє переривання INT 1, яке зупиняє обчислювальний процес, даючи можливість перевірити вміст регістрів.

9. IF – Interrupt-enable flag. Прапор дозволу переривання. При IF=1 дозволяється виконання маскованих апаратних переривань. При IF = 0 – забороняється.

10. DF - Direction flag. Прапор управління напрямом обробки масивів у рядкових командах. При DF=1 індексні регістри SI, DI, які беруть участь у рядкових командах, автоматично декрементуються на кількість байт операнда, здійснюючи тим самим обробку рядків з кінця до початку. При DF=0 – інкрементуються, здійснюючи обробку з початку до кінця рядка.

Прапори стану. Ці прапори відображають різні ознаки результату виконання арифметичних та логічних команди CPU:

0. CF – Carry flag. Прапор перенесення встановлюється у разі, якщо під час беззнакової арифметичної операції виходить число, розрядність якого перевищує розрядність виділеного йому поля результату. У командах зсуву прапор CF фіксує значення старшого біта.

2. PF – Parity flag. Прапор парності/паритету встановлюється при парній кількості одиниць у результаті.

4. AF – Auxiliary Carry. Прапор додаткового перенесення/позика з молодшого зошита до старшої (з третього до четвертого розряду). Використовується у командах обробки 8-бітових даних, найчастіше – двійково-десяткових чисел.

6. ZF – Zero flag. Прапор нуля встановлюється, якщо під час виконання арифметичної чи логічної операції виходить число, рівне нулю (тобто. всі біти результату дорівнюють 0).

7. SF - Sign flag. Прапор знака дублює значення старшого біта результату. SF=0 для позитивного результату, SF=1 для негативного.

11. OF - Overflow flag. Прапор переповнення , або ) встановлюється у разі, якщо під час виконання арифметичної операції зі знаком виходить число, розрядність якого перевищує розрядність виділеного йому поля результату.

Прапори, додані в регістр EF:

12-13. IOPL – I/O Privilege Level. Прапор рівня привілеїв введення-виведення. Використовується у захищеному режимі роботи мікропроцесора контролю доступу до команд вводу-вывода залежно від привілейованості завдання.

14. NT - Nested task flag. Прапор вкладеності задачі. Використовується у захищеному режимі роботи мікропроцесора для фіксації того факту, що одне завдання вкладено в інше.

16. RF - Resume flag. Прапор поновлення. У режимі налагодження одиничне значення RF дозволяє здійснити рестарт команди після переривань. Використовується спільно з регістрами точок зупинки налагодження.

17. VM - Virtual Mode flag. Прапор віртуального режиму. Ознака роботи мікропроцесора як віртуального 8086. 1 – процесор працює у режимі віртуального 8086; 0 – процесор працює у реальному чи захищеному режимі.

18. AC – Alignment Check. Прапор режиму роботи процесора, у якому відбувається контроль вирівнювання. Використовується лише на рівні привілеїв 3. Якщо AC=1 і AM=1 (AM – біт у регістрі управління CR0), то у разі звернення до операнда, не вирівняного за відповідною межею (2 або 4 або 8) байт, буде викликано виключення 17 .Вирівнювання операнда за межами 2,4,8 означає, що адреса операнда кратна відповідно 2,4,8.

19. VIF - Virtual Interrupt Flag. Прапор дозволу переривання у віртуальному режимі роботи процесора.

20. VIP - Virtual Interrupt Pending. Прапор затримки переривання у віртуальному режимі роботи процесора.

21. ID – CPU Identification. Прапор ідентифікації процесора. Прапор можна змінити, якщо процесор підтримує команду CPUID.

У керуючих регістрах CR0-CR3 зберігаються ознаки стану процесора, загальні всім задач. Регістр CR0 має такі біти:

0. PE – Protection Enable. Прапор захищеного режиму. Якщо PE=1, то режим роботи процесора – захищений.

1. MP - Mathematic present. Прапор математичного співпроцесора. Якщо MP=1, то математичний співпроцесор є.

2. EM – Emulate Numeric Extension. Прапор емуляції команд над числами з плаваючою комою. Коли прапор встановлений, команди для роботи з речовими числами можуть бути емульовані програмно.

3. TS – Task Switched. Прапор перемикання завдань. Прапор встановлюється після перемикання завдання.

4. ET – Extension Type. Прапор типу розширення. Встановлюється, якщо є арифметичний співпроцесор 387 і вище.

5. NE – Numeric Error Enable. Прапор дозволу помилки співпроцесора. Якщо прапор встановлений, у разі помилки в співпроцесорі генерується виняткова ситуація 16.

16. WP – Write Protect. Прапор захисту від запису. Якщо прапор встановлений, то ядру операційної системи призначаються сторінки пам'яті як read-only (тільки читання).

18. AM – Alignment Mask. Прапор маскування вирівнювання. Коли прапор встановлений, то у разі звернення до невирівняних операндів буде генеруватися виняткова ситуація 17. Якщо прапор скинутий, така виняткова ситуація маскується.

29. NW - Not Write-Through. Прапор заборони наскрізний запис.

30. CD - Cache Disable. Прапор заборони кешування.

31. PG - Paging Enable. Прапор режиму сторінки організації пам'яті. Коли прапор встановлено, операційна система працює в режимі сторінки організації пам'яті.

Інші біти регістра CR0 зарезервовані.

Регістр CR1 зарезервовано. У регістрі CR2 зберігається 32-розрядна лінійна адреса, за якою отримано відмову сторінки пам'яті. У 20 старших розрядах регістра CR3 зберігається фізична базова адреса таблиці каталогу сторінок і біти управління кеш-пам'яттю. Регістр CR4 містить біти роздільної здатності архітектурних розширень МП. В цілому ці регістри використовуються в системному програмуванні і встановлюють режим роботи процесора (нормальний, захищений і т.д.), посторінковий розподіл пам'яті і т.д.

Системні адресні регістри. У системних регістрах-покажчиках глобальної дескрипторної таблиці GDTR та таблиці переривань IDTR зберігаються 32-розрядні базові адреси та 16-розрядні межі таблиць відповідно. Системні сегментні регістри задач TR та локальної дескрипторної таблиці LDTR є 16-розрядними селекторами. Їм відповідають тіньові регістри дескрипторів, які містять 32-розрядну базову адресу сегмента, 20-розрядну межу та байт права доступу.

У регістрах налагодження DR0-DR3 містяться 32-розрядні адреси точок зупинки в режимі налагодження; DR4–DR5 зарезервовані та не використовуються; DR6 відображає стан контрольної точки; DR7 – керує розміщенням у програмі контрольних точок.

Реєстри тестування TR входять у групу модельно-специфічних регістрів, їх склад і кількість залежать від типу процесора: в МП 386 використовуються два регістри TR6 і TR7 контролю посторінкової системи розподілу пам'яті операційною системою. У Pentium II і вище використовується дванадцять регістрів TR1-TR12. Ця група регістрів містить також результати тестування МП та кеш-пам'яті.

Стаття розкриває зміст терміна «64 біти». У статті коротко розглянуто історію розвитку 64-бітових систем, описані найпоширеніші на даний момент 64-бітові процесори архітектури Intel 64 та 64-бітна операційна система Windows.

Вступ

В рамках архітектури обчислювальної техніки під терміном "64-бітний" розуміють 64-бітові цілі та інші типи даних, що мають розмір 64 біти. Під "64-бітними" системами можуть розумітися 64-бітові архітектури мікропроцесорів (наприклад, EM64T, IA-64) або 64-бітові операційні системи (наприклад, Windows XP Professional x64 Edition). Можна говорити про компілятори, що генерують 64-бітний програмний код.

У статті будуть розглянуті різні моменти, пов'язані з 64-бітними технологіями. Стаття призначена для програмістів, які бажають почати розробляти 64-бітові програми, і орієнтована на Windows-розробників, оскільки для них питання знайомства з 64-бітними системами є найбільш актуальним.

Історія 64-бітових систем

64-бітність тільки недавно увійшла в життя більшості користувачів та прикладних програмістів. Проте робота з 64-бітними даними має вже довгу історію.

1961: IBM випускає суперкомп'ютер IBM 7030 Stretch, в якому використовуються 64-бітові слова даних, 32-бітові або 64-бітові машинні інструкції.

1974: Control Data Corporation запускає векторний суперкомп'ютер CDC Star-100, у якому використовується архітектура 64-бітових слів (попередні системи CDC мали 60-бітну архітектуру).

1976: Cray Research випускає перший суперкомп'ютер Cray-1, в якому реалізовано архітектуру 64-бітних слів і який послужить основою для всіх наступних векторних суперкомп'ютерів Cray.

1985 - Cray випускає UNICOS - першу 64-бітну реалізацію операційної системи Unix.

1991: MIPS Technologies виробляє перший 64-бітний процесор, R4000, в якому реалізовано третю модифікацію розробленої в їхній компанії архітектури MIPS. Цей процесор використовується у графічних робочих станціях SGI, починаючи з моделі IRIS Crimson. Kendall Square Research випускає свій перший суперкомп'ютер KSR1, побудований на основі їхньої власної запатентованої 64-бітної архітектури RISC під операційною системою OSF/1.

1992: Digital Equipment Corporation (DEC) представляє повністю 64-бітну архітектуру Alpha – дітище проекту PRISM.

1993: DEC випускає 64-бітну Unix-подібну операційну систему DEC OSF/1 AXP (пізніше перейменовану в Tru64 UNIX) для своїх систем, побудованих на архітектурі Alpha.

1994: Intel оголошує про свої плани розробки 64-бітної архітектури IA-64 (спільно з компанією Hewlett-Packard) - наступника їх 32-бітних процесорів IA-32. Дата випуску призначено на 1998-1999 роки. SGI випускає IRIX 6.0 з 64-бітною підтримкою чіпсету R8000.

1995 - Sun запускає 64-бітний процесор сімейства SPARC UltraSPARC. HAL Computer Systems, підпорядкована Fujitsu, запускає робочі станції, створені з урахуванням 64-бітного процесора SPARC64 першого покоління, незалежно розробленого компанією HAL. IBM випускає мікропроцесори A10 та A30, а також 64-бітові процесори PowerPC AS. IBM також випускає 64-бітове оновлення для системи AS/400, здатне перетворювати операційну систему, бази даних та програми.

1996: Nintendo представляє ігрову консоль Nintendo 64, створену на основі більш дешевого варіанта MIPS R4000. HP випускає реалізацію 64-бітної версії 2.0 власної архітектури PA-RISC PA-8000.

1997: IBM запускає лінійку RS64 64-бітових процесорів PowerPC/PowerPC AS.

1998 - Sun випускає Solaris 7 з повною 64-бітною підтримкою UltraSPARC.

1999 - Intel випускає набір команд для архітектури IA-64. AMD публічно оголошує про свій набір 64-бітових розширень для IA-32, який був названий x86-64 (пізніше перейменований на AMD64).

2000: IBM випускає перший 64-бітовий мейнфрейм zSeries z900, сумісний з ESA/390, а також нову операційну систему z/OS.

2001: Intel нарешті запускає лінійку 64-бітних процесорів, які тепер одержують назву Itanium і розраховані на високопродуктивні сервери. Проект не відповідає очікуванням через численні затримки під час випуску IA-64 на ринок. NetBSD стає першою операційною системою, яка запускається на процесорі Intel Itanium після його виходу. Крім того, Microsoft також випускає Windows XP 64-Bit Edition для архітектури IA-64 сімейства Itanium, хоча в ній зберігається можливість запускати 32-бітові програми за допомогою прошарку WoW64.

2003: AMD представляє лінійки процесорів Opteron та Athlon 64, створені на основі архітектури AMD64, яка є першою 64-бітною процесорною архітектурою, що базується на архітектурі x86. Apple починає використовувати 64-бітний процесор G5 PowerPC 970 виробництва IBM. Intel стверджує, що процесорні чіпи сімейства Itanium залишаться єдиними 64-бітними процесорами, розробленими у їхній компанії.

2004: У відповідь на комерційний успіх AMD Intel зізнається, що вони розробляли клон розширень AMD64, якому дали назву IA-32e (пізніше перейменований в EM64T, а потім ще раз в Intel 64). Intel також випускає оновлені версіїсімейств процесорів Xeon та Pentium 4 з підтримкою нових команд.

2004: VIA Technologies представляє свій 64-бітовий процесор Isaiah.

2005: 31 січня Sun випускає Solaris 10 з підтримкою процесорів AMD64/Intel 64. 30 квітня Microsoft випускає Windows XP Professional x64 Edition для процесорів AMD64/Intel 64.

2006: Sony, IBM та Toshiba розпочинають випуск 64-бітного процесора Cell для PlayStation 3, серверів, робочих станцій та інших пристроїв. Microsoft випускає Windows Vista з увімкненою 64-бітною версією для процесорів AMD64 / Intel 64, яка підтримує 32-бітову сумісність. Всі Windows-програми та компоненти є 64-бітними, однак багато з них мають 32-бітові версії, включені в систему у вигляді плагінів з метою сумісності.

2009: Як і Windows Vista, Windows 7 компанії Microsoft включає повну 64-бітну версію для процесорів AMD64 / Intel 64, і більшість нових комп'ютерів за замовчуванням встановлюється 64-бітна версія. Виходить операційна система компанії Apple Mac OS X 10.6, «Snow Leopard», яка має 64-бітне ядро ​​і призначена для процесорів AMD64/Intel 64, проте за умовчанням ця система встановлюється тільки на деякі з останніх моделей комп'ютерів компанії Apple. Більшість програм, які постачаються з Mac OS X 10.6, тепер також є 64-бітними.

Більш докладно з історією розвитку 64-бітових систем можна познайомитися у статті Джона Машею "Довга дорога до 64 біт" та в енциклопедичній статті в Wikipedia "64-bit".

Прикладне програмування та 64-бітові системи

На момент написання статті у 2010 році, найбільш відомими та поширеними є дві 64-бітові архітектури мікропроцесорів: IA64 та Intel 64.
  1. IA-64 64-бітна мікропроцесорна архітектура, розроблена спільно компаніями Intel та Hewlett Packard. Реалізована в мікропроцесорах Itanium та Itanium 2. Для більш детального знайомства з архітектурою IA-64 можна звернутися до наступних статей у Wikipedia: "IA-64", "Itanium", "Itanium 2". Архітектуру Itanium підтримує велика кількістьвиробників серверів: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI та Unisys. Ці виробники приєдналися до Intel та безлічі розробників ПЗ для створення Itanium Solutions Alliance, з метою просування архітектури та прискорення темпів портування ПЗ.
  2. Intel 64(AMD64 / x86-64 / x64 / EM64T) - дана архітектура є розширенням архітектури x86 з повною зворотною сумісністю. Існує безліч варіантів назви даної архітектури, що призводить до плутанини, хоча, по суті, всі ці назви позначають одне й те саме: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e, Intel 64, x64. Докладніше дізнатися про те, як з'явилося так багато назв, можна у статті з Wikipedia: "X86-64". Процесори з архітектурою Intel 64 знайшли широке поширення на персональних комп'ютерах. І, швидше за все, ваш комп'ютер оснащений саме процесором з даною архітектурою.
Важливо розуміти, що IA-64 та Intel 64 (AMD64) це абсолютно різні, несумісні один з одним, мікропроцесорні архітектури. Далі у статті ми розглядатимемо лише архітектуру Intel 64 (x64/AMD64), як більш популярну серед розробників прикладного. програмного забезпеченнядля операційної системи Windows. Для стислості програмну модель Intel 64, доступну програмісту в 64-бітній системі Windows, називають Win64.

Архітектура Intel 64 (AMD64)

Розглянута архітектура Intel 64 просте, але в той же час потужне зворотне сумісне розширення застарілої промислової архітектури x86. Вона додає 64-бітний адресний простір і розширює реєстрові ресурси для підтримки більшої продуктивності перекомпільованих 64-бітових програм. Архітектура забезпечує підтримку застарілого 16-бітного та 32-бітного коду додатків та операційних систем без їх модифікації чи перекомпіляції.

Відмінною особливістю Intel 64 є підтримка шістнадцяти 64-бітних регістрів загального призначення (x86-32 було вісім 32-бітних регістрів). Підтримуються 64-бітові арифметичні та логічні операціїнад цілими числами. Підтримуються 64-бітові віртуальні адреси. Для адресації нових регістрів для команд введені префікси розширення регістру, для яких був обраний діапазон кодів 40h-4Fh, що використовуються для команд INC<регистр>та DEC<регистр>у 32- та 16-бітних режимах. Команди INC та DEC у 64-бітному режимі повинні кодуватися у більш спільній, двобайтовій формі.

Реєстри:

16 цілих 64-бітових регістра загального призначення (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15),
8 80-бітних регістрів з плаваючою точкою (ST0 - ST7),
8 64-бітових регістрів Multimedia Extensions (MM0 - MM7, мають загальний простір з регістрами ST0 - ST7),
16 128-бітних регістрів SSE (XMM0 - XMM15),
64-бітний покажчик RIP та 64-бітовий регістр прапорів RFLAGS.

Необхідність 64-бітної архітектури визначається додатками, які потребують великого адресного простору. Насамперед це високопродуктивні сервери, системи управління базами даних, САПР і, звичайно, ігри. Такі програми отримають суттєві переваги від 64-бітного адресного простору та збільшення кількості регістрів. Невелика кількість регістрів, доступна в застарілій архітектурі x86, обмежує продуктивність у обчислювальних завданнях. Збільшена кількість регістрів забезпечує достатню продуктивність для багатьох програм.

Підкреслимо основні переваги архітектури x86-64:

  • 64-бітовий адресний простір;
  • розширений набір регістрів;
  • звичний для розробників набір команд;
  • можливість запуску старих 32-бітових додатків у 64-бітній операційній системі;
  • можливість використання 32-бітових операційних систем

64-бітові операційні системи

Практично всі сучасні операційні системи мають версії для архітектури Intel 64. Наприклад, Microsoft надає Windows XP x64. Найбільші розробники UNIX системтакож постачають 64-бітові версії, наприклад Linux Debian 3.5 x86-64. Однак це не означає, що весь код такої системи є повністю 64-бітним. Частина коду ОС і багато додатків можуть залишатися 32-бітними, так як Intel 64 забезпечує зворотну сумісність з 32-бітними додатками. Наприклад, 64-бітна версія Windowsвикористовує спеціальний режим WoW64 (Windows-on-Windows 64), який транслює виклики 32-бітових програм до ресурсів 64-бітної операційної системи.

WoW64

Windows-on-Windows 64-bit (WoW64) - підсистема операційної системи Windows, що дозволяє запускати 32-бітові програми на всіх 64-бітових версіях Windows.

Підсистема WoW64 не підтримує такі програми:

  • програми, скомпільовані для 16-розрядних операційних систем;
  • програми режиму ядра, скомпільовані для 32-розрядних операційних систем.
Існують відмінності WoW64, залежно від архітектури процесора. Наприклад, 64-бітна версія Windows розроблена для процесора Intel Itanium 2 використовує WoW64 для емуляції x86 інструкцій. Така емуляція дуже ресурсомістка в порівнянні з WoW64 для архітектури Intel 64, оскільки відбувається перемикання з 64-бітного режиму в режим сумісності, при виконанні 32-бітових програм.

WoW64 на архітектурі Intel 64 (AMD64/x64) не вимагає емуляції інструкцій. Тут підсистема WoW64 емулює лише 32-бітне оточення, за рахунок додаткового прошарку між 32-бітним додатком та 64-бітним Windows API. Десь цей прошарок тонкий, десь не дуже. Для середньої програмивтрати у продуктивності через наявність такого прошарку становитимуть близько 2%. Для деяких програм це значення може бути більшим. Два відсотки це небагато, але слід враховувати, що 32-бітові програми працюють трохи повільніше під керуванням 64-бітної операційної системи Windows, ніж у 32-бітовому середовищі.

Компіляція 64-бітного коду не тільки виключає необхідність WoW64, але й дає додатковий приріст продуктивності. Це з архітектурними змінами в мікропроцесорі, як-от збільшення кількості регістрів загального призначення. Для середньої програми очікується в межах 5-15% приросту продуктивності від простої перекомпіляції.

Через наявність прошарку WoW64 32-бітові програми працюють менш ефективно у 64-бітовому середовищі, ніж у 32-бітному. Але все-таки, прості 32-бітові програми можуть отримати одну перевагу від їх запуску в 64-бітному середовищі. Ви, напевно, знаєте, що програма, зібрана з ключем /LARGEADDRESSAWARE:YES, може виділяти до 3-х гігабайт пам'яті, якщо 32-бітна операційна система Windows запущена з ключем /3gb. Так ось, ця ж 32-бітна програма, запущена на 64-бітній системі, може виділити майже 4 GB пам'яті (на практиці близько 3.5 GB).

Підсистема WoW64 ізолює 32-розрядні програми від 64-розрядних шляхом перенаправлення звернень до файлів та реєстру. Це запобігає випадковому доступу 32-бітових програм до даних 64-бітових програм. Наприклад, 32-бітна програма, яка запускає файл DLL з каталогу %systemroot%\System32, може випадково звернутися до 64-розрядного файлу DLL, який несумісний з 32-бітною програмою. Щоб уникнути цього, підсистема WoW64 перенаправляє доступ із папки %systemroot%\System32 до папки %systemroot%\SysWOW64. Це перенаправлення дозволяє запобігти помилкам сумісності, оскільки при цьому потрібний файл DLL, створений спеціально для роботи з 32-розрядними програмами.

Детальніше з механізмами перенаправлення файлової системита реєстру можна познайомитися в розділі MSDN "Running 32-bit Applications".

Програмна модель Win64

Як і Win32 розмір сторінок Win64 становить 4Кб. Перші 64Кб ​​адресного простору ніколи не відображаються, тобто найменша правильна адреса це 0x10000. На відміну від Win32, системні DLL завантажуються вище за 4Гб.

Особливість компіляторів для Intel 64 в тому, що вони можуть найбільш ефективно використовувати регістри для передачі параметрів функції замість використання стека. Це дозволило розробникам Win64 архітектури позбавитися такого поняття як угода про виклики (calling convention). У Win32 можна використовувати різні угоди: __stdcall, __cdecl, __fastcall і таке інше. У Win64 є лише одна угода про виклики. Розглянемо приклад, як передаються в регістрах чотири аргументи типу integer:

  • RCX: перший аргумент
  • RDX: другий аргумент
  • R8: третій аргумент
  • R9: четвертий аргумент
Аргументи після перших чотирьох integer передаються на стеку. Для float аргументів використовуються XMM0-XMM3 регістри, а також стек.

Різниця в угодах про виклик призводить до того, що в одній програмі не можна використовувати і 64-розрядний, і 32-розрядний код. Іншими словами, якщо програма скомпільована для 64-бітного режиму, то всі бібліотеки (DLL), що використовуються, також повинні бути 64-бітними.

Передача параметрів через регістри є одним із нововведень, які роблять 64-бітові програми більш продуктивними, ніж 32-бітові. Додатковий виграш у продуктивності можна отримати за допомогою 64-бітових типів даних.

Адресний простір

Хоча 64-бітний процесор теоретично може адресувати 16 екзабайт пам'яті (2 64), Win64 зараз підтримує 16 терабайт (2 44). Тому є кілька причин. Поточні процесори можуть забезпечувати доступ лише до 1 терабайту (2^40) фізичної пам'яті. Архітектура (але не апаратна частина) може розширити цей простір до 4 петабайт (2^52). Однак у цьому випадку потрібна величезна кількість пам'яті для сторінкових таблиць, що відображають пам'ять.

Крім перерахованих обмежень, обсяг пам'яті, який доступний у тій чи іншій версії 64-бітної операційної системи Windows, залежить також від комерційних міркувань компанії Microsoft. Нижче наведено інформацію щодо обсягу пам'яті, що підтримується різними версіями 64-біними версіями Windows:

Windows XP Professional – 128 Gbyte;
Windows Server 2003, Standard – 32 Gbyte;
Windows Server 2003, Enterprise – 1 Tbyte;
Windows Server 2003, Datacenter – 1 Tbyte;
Windows Server 2008, Datacenter – 2 Tbyte;
Windows Server 2008, Enterprise – 2 Tbyte;
Windows Server 2008, Standard – 32 Gbyte;
Windows Server 2008, Web Server – 32 Gbyte;
Vista Home Basic – 8 Gbyte;
Vista Home Premium – 16 Gbyte;
Vista Business – 128 Gbyte;
Vista Enterprise – 128 Gbyte;
Vista Ultimate – 128 Gbyte;
Windows 7 Home Basic – 8 Gbyte;
Windows 7 Home Premium – 16 Gbyte;
Windows 7 Professional – 192 Gbyte;
Windows 7 Enterprise – 192 Gbyte;
Windows 7 Ultimate – 192 Gbyte;

Розробка 64-бітних програм

Найбільш повно питання розробки 64-бітових програм розглянуті в курсі "

1985 року фірма Intelвипустила 32-розрядний мікропроцесор, який став родоначальником сімейства IA-32. Розвиток цього сімейства пройшов ряд етапів, серед яких можна виділити такі: реалізація блоку обробки чисел з плаваючою комою безпосередньо на кристалі МП (мікропроцесор I486), Вступ MMX-технології обробки даних із фіксованою точкою за принципом SIMD - sinl instruction multi data(один потік команд - безліч потоків даних) у мікропроцесорі Pentium MMXта розвиток цієї технології на числа з плаваючою комою ( SSE - streaming SIMD Extention), що з'явилося вперше в МП Pentium III. Проте основні риси цієї архітектури до нашого часу залишаються незмінними.

Архітектура 32-розрядного мікропроцесора суттєво відрізняється від архітектури 16-розрядного. Деякі з цих відмінностей чисто кількісні, інші мають важливий характер.

Головна зовнішня відмінність – збільшення розрядності шини даних та шини адреси до 32 біт. Це, своєю чергою, пов'язані з змінами у розрядності внутрішніх елементів мікропроцесора й у механізмі виконання деяких процесів, наприклад, формування фізичної адреси.

Регістри блоку обробки чисел із фіксованою точкою стали 32-розрядними. До кожного з них можна звертатися як до одного подвійного слова (32 розряди). До молодших 16 розрядів цих регістрів можна звертатися так само, як і в 16-розрядному мікропроцесорі.

У блоці сегментних регістрів відбулися як кількісні, і якісні зміни. До чотирьох регістрів CS, DS, SS і ES, що використовуються в реальному режимі, додані ще два: FS і GS. Хоча розрядність регістрів цього блоку залишилася незмінною (кожен по 16 біт), у формуванні фізичної адреси оперативної пам'яті вони використовуються по-іншому. При роботі мікропроцесора в так званому захищеному режимі вони призначаються для пошуку дескриптора (описувача) сегмента у відповідних системних таблицях, а вже в дескрипторі зберігається базова адреса та атрибути сегмента. Формування адреси у разі виконує блок сегментації диспетчера пам'яті.

Якщо, крім сегментів, пам'ять розбита ще й на сторінки, то остаточне обчислення фізичних адрес виконує блок управління сторінками.

Починаючи з мікропроцесора I486, до складу кристала мікропроцесора входить блок обробки чисел з плаваючою комою, що включає вісім 80-розрядних регістрів для представлення знаків, мантис і порядків таких чисел.

На кристалі мікропроцесора розташовується також внутрішня кеш-пам'ять, яка являє собою особливим чином організовану буферну пам'ять, що швидко діє, призначену для зберігання найбільш часто використовуваної інформації (команд і даних). У різних моделях мікропроцесорів обсяг кеш-пам'яті становить від 8 Кбайт до 512 Кбайт.

Мікропроцесор на апаратному рівні підтримує мультипрограмний режим роботи ЕОМ, тобто можливість мати в пам'яті одночасно кілька готових до виконання програм, запуск яких здійснюється операційною системою відповідно до алгоритмів її функціонування або залежно від особливих ситуацій, що складаються у роботі зовнішніх пристроїв.

З цією можливістю нерозривно пов'язані засоби захисту пам'яті, які забезпечують контроль над невирішеними взаємодіями між окремими програмами. Вони включають захист при керуванні пам'яттю і захист за привілеями.

Головні особливості розширеного формату команди - можливість використовувати будь-який із регістрів загального призначення в будь-якому з режимів адресації, а також додавання ще одного режиму адресації - відносного базового індексного масштабування. При цьому ефективна адреса формується таким чином:

ЕА = (base) + (index) · scale + disp,

де (base) – значення базового регістру; (index) – значення індексного регістру; scale – величина масштабного множника (scale = 1,2,3,4); disp - значення усунення, закодованого у самій команді.

Зазначимо, що в 32-розрядній архітектурі ефективну адресу зазвичай називають зміщенням (offset), водночас відрізняючи його від зсуву, що кодується в самій команді (displacement).

Розрядна архітектура ПЕОМ.

Win64-код поєднує в собі основні можливості 32-розрядного коду, а також включає зміни, пов'язані з підвищенням розрядності. У розпорядженні програміста виявляються:

· 64-розрядні покажчики;

· 64-розрядні типи даних;

· 32-розрядні типи даних;

· Інтерфейс Win64 API.

Зверніть увагу, що 32-розрядні типи даних не зникли при підвищенні розрядності платформи (як було з 16-розрядними типами даних під час переходу до Win32). Це пов'язано з тим, що навіть у 64-розрядних додатках у більшості випадків змінні не вимагають обсягу пам'яті 8 байт, тому використання 64-розрядних типів у таких випадках виявилося б вкрай неефективним. Операційної системидовелося б дописувати нулі у старші розряди, щоб збільшити розмір даних до 8 байт (такі дані ще й незручно зчитувати). Це спричинило б зниження продуктивності.

Інша доля спіткала 32-розрядні покажчики: вони повністю зникли. Справа в тому, що використання 32-розрядних покажчиків накладає обмеження на обсяг пам'яті, що адресується. Наприклад, однією з головних переваг плоскої моделі пам'яті (вона є основною для програмування 32-розрядних програм для платформи NT), що використовує 32-розрядні покажчики, є можливість створення сегментів об'ємом до 4 Гбайт. Нові 64-розрядні покажчики забезпечують можливість адресації до 16 Тб пам'яті (1 Тб = 1012 Мб). Сучасними бізнес-додатками цей обсяг цілком затребуваний.

Функції у Win64 API зазнали незначних змін. Тільки назви деяких із них були змінені так, щоб відобразити приналежність до 64-розрядної платформи. У більшості випадків зміни зазнали лише типи параметрів, які є аргументами виклику функцій. Всі інші переваги (можливість відмовитися від використання файлів підкачки і т. д.) пов'язані або з обсягом адресації, що збільшився, або з новими типами даних.

Конструктивне виконання системних плат. Форм фактор

Конструкція системної плати ЕОМ

Материнська плата(англ. motherboard, MB, також використовується назва англ. mainboard - головна плата; сленг. мама, мати, материнка) - це складна багатошарова друкована плата, на якій встановлюються основні компоненти персонального комп'ютера(Центральний процесор, контролер ОЗУ та власне ОЗУ, завантажувальне ПЗУ, контролери базових інтерфейсів введення-виведення). Як правило, материнська плата містить роз'єми (слоти) для підключення додаткових контролерів, для яких зазвичай використовуються шини USB, PCI і PCI-Express.

центральний процесор

Набір системної логіки (англ. chipset) - набір мікросхем, що забезпечують підключення ЦПУ до ОЗП та контролерів периферійних пристроїв. Як правило, сучасні набори системної логіки будуються на базі двох НВІС: «північного» та «південного мостів».

Північний міст(Англ. Northbridge), MCH (Memory controller hub), системний контролер - забезпечує підключення ЦПУ до вузлів, що використовують високопродуктивні шини: ОЗУ, графічний контролер.

Для підключення ЦПУ до системного контролера можуть використовуватись такі FSB-шини, як Hyper-Transport та SCI.

Зазвичай до системного контролера підключається ОЗП. У разі він містить у собі контролер пам'яті. Таким чином, від типу застосованого системного контролера зазвичай залежить максимальний обсягОЗП, а також пропускна здатність шини пам'яті персонального комп'ютера. Але в даний час є тенденція вбудовування контролера ОЗП безпосередньо в ЦПУ (наприклад, контролер пам'яті вбудований в процесор AMD K8 і Intel Core i7), що спрощує функції системного контролера і знижує тепловиділення.

Як шина для підключення графічного контролера на сучасних материнських платах використовується PCI Express. Раніше використовувалися загальні шини (ISA, VLB, PCI) та шина AGP.

Південний міст(англ. Southbridge), ICH (I/O controller hub), периферійний контролер - містить контролери периферійних пристроїв ( жорсткого диска, Ethernet, аудіо), контролери шин для підключення периферійних пристроїв ( шини PCI, PCI-Express та USB), а також контролери шин, до яких підключаються пристрої, що не вимагають високої пропускної здатності (LPC - використовується для підключення завантажувального ПЗП; також шина LPC використовується для підключення мультиконтролера (англ. Super I/O) - мікросхеми, що забезпечує підтримку «застарілих» низькопродуктивних інтерфейсів передачі даних: послідовного та паралельного інтерфейсів, контролера клавіатури та миші).

Як правило, північний та південний мости реалізуються у вигляді окремих НВІС, проте існують і одночіпові рішення. Саме набір системної логіки визначає все ключові особливостіматеринської плати та те, які пристрої можуть підключатися до неї.

Оперативна пам'ять (також оперативний пристрій, ОЗУ) - в інформатиці - пам'ять, частина системи пам'яті ЕОМ, в яку процесор може звернутися за одну операцію (jump, move і т. п.). Призначена для тимчасового зберігання даних та команд, необхідних процесору для виконання операцій. Оперативна пам'ять передає процесору дані безпосередньо або через кеш-пам'ять. Кожен осередок оперативної пам'яті має свою індивідуальну адресу.

ОЗП може виготовлятися як окремий блок або входити в конструкцію однокристальної ЕОМ або мікроконтролера.

Завантажувальне ПЗП - зберігає ПЗ, яке виконується відразу після включення живлення. Як правило, завантажувальне ПЗУ містить BIOS, проте може містити ПЗ, що працюють в рамках EFI.

Особливості архітектури 64 – розрядних МП


5.1. Itanium 2 Intel

Процесор розроблявся з нуля, причому паралельно відразу в двох версіях: інженерами Intel і Hewlett-Packard. Втім, в основі обох чіпів лежали, природно, одні і ті ж ідеї, оскільки створювалися вони все ж таки спільно, і повинні були обидва стати родоначальниками одного й того ж сімейства. Цементуючим складом були, природно, єдина ідеологія, що прийшла на зміну CISC - EPIC (Explicitly Parallel Instruction Computing), і нова архітектура - IA-64, що включає набір інструкцій, опис регістрів, та інші подібні речі. Втім, архітектура якраз – річ мінлива, досить згадати як відрізняються між собою такі CISC процесори, як 8086 та i80486, обидва створені на базі 80x86.
Так само і з Merced і McKinley, Itanium і Itanium 2 - обидва побудовані на базі однієї ідеології, але в різних різновидах архітектури. Свого часу та ж історія, загалом, була і з Pentium і Pentium Pro. Втім, спільні риси були й у тих, що є й у цих, за це "відповідає" EPIC. Насамперед йдеться про повноцінну масштабну суперскалярність, тобто здатність виконувати одночасно кілька інструкцій. Для чого, природно, процесор містить виконавчі модулі - для операцій з цілими числами, з числами з плаваючою комою, і т.д.
На відміну від Pentium і його послідовників, які знаються на коді самостійно, EPIC-процесори сильно покладаються на компілятор, який повинен сам проаналізувати код на предмет знаходження оптимальних місць для розпаралелювання його виконання, і забезпечити процесор цією інформацією. Тому і використовується «explicitly» - процесор не повинен сам намагатися зрозуміти, що можна виконувати паралельно, а що ні, і т.д. - усе це вже заздалегідь пояснить компілятор. Плюс, потужні механізми по передбаченню переходів, попередньому виконанню кусків коду, попередньому завантаженню даних, і тому подібні речі - завантаження виконавчих блоків має бути розподілено максимально рівномірно.
Кардинально вирішене питання з регістрами, кількість яких збільшена в кілька разів: у Itanium їх кількість становить 128 загального призначення (рис.1), 128 - для зберігання чисел з плаваючою комою, 8 регістрів переходів, і 64, відповідальних за ра -боту механізмів передбачення. Тут все очевидно - такої кількості регістрів, та ще реально 64-бітних, вистачить для зберігання будь-яких необхідних чисел для будь-якої розумної кількості виконавчих модулів. У Itanium, першого представника сімейства, таких регістрів всього п'ять - два цілих, два для операцій з пам'яттю і чотири - для операцій з плаваючою точкою. Фізична пам'ять адресується 44-біт числами, що насправді обмежує її обсяг "лише" 17.6 Терабайт, блоки для операцій з плаваючою точкою працюють з числами в 82-біт поданні.

Від ідеї реалізувати 32-біт 80x86 ядро ​​в апаратному вигляді Intel відмовився, вважаючи це занадто неефективним використанням площі кристала. Так що для того, щоб отримати можливість виконання Itanium 80х86 коду, була створена система трансляції, яка на льоту перетворює 80x86 код в IA-64.
Очевидно, що за інших рівних, продуктивність такого рішення буде нижчою, ніж чистого x86, що працює на тій же частоті. Втім, ніхто і не чекав від Itanium швидкісного виконання x86 програм - підтримка цієї архітектури відноситься швидше до витрат перехідного періоду. Тим не менш, факт залишається фактом: це сімейство для вирішення 32-біт завдань не пристосовано. Втім, навряд чи хтось буде використовувати Itanium для подібних цілей за наявності повноцінного 64-бітного ПЗ.
До того ж, сам по собі Itanium був значною мірою пілотним проектом, як і Pentium Pro, тому процесор взагалі варто розглядати більше як демонстрацію можливостей архітектури. Характерний штрих - чіпсет для Itanium, 460GX, підтримує в якості пам'яті лише PC100 SDRAM, це дещо говорить про швидкість, з якої здатний перетравлювати дані процесор. З іншого боку, однак, якоюсь мірою не надто швидкий інтерфейс з оперативною пам'яттюкомпенсується дуже великий кеш-пам'яттю L3 - 2 або 4 Мбайт, що працює на повній частоті процесора (733 або 800 МГц) з пропускною здатністю до 12.8 Гбайт/с.
Ще одним завданням Itanium було вирішити питання з компіляторами - адже EPIC-процесори, як уже згадувалося, дуже сильно від них залежать. На відміну від компіляторів для 80x86 процесорів, які на їх продуктивність майже не впливали, тут компілятори є повноправними партнерами процесора - адже вони забезпечують його вкрай необхідною для роботи інформацією, і від того, наскільки якісною вона буде, буде за -висіти швидкість виконання цієї програми процесором.
Itanium 2 є вже більш комерційно цікавим продуктом. Створений Hewlett-Packard, що набила руку на створенні 64-біт процесорів серії PA-RISC, чіп вийшов набагато досконалішим. З дещо меншою кількістю L3 (1.5 або 3 Мбайт) і дещо вищою частотою, 900 МГц або 1 ГГц, він забезпечує в півтора-два рази більшу продуктивність на тих же задачах, що й Itanium. Він є, фактично, першим представником архітектури IA-64.
Далі планується ще більше розпаралелювання максимально модним на сьогоднішній день шляхом: процесор повинен буде перейти на два фізичні ядра, що дозволить практично подвоїти продуктивність за досить прийнятною ціною - принаймні, результат вийде набагато дешевше, ніж якби тієї ж кількості виконавчих модулів, регістрів і т.д., намагалися досягти на єдиному кристалі.

5.2. Athlon 64 AMD

Насамперед зауважимо, що процесор Athlon 64 – це саме той 64-бітний процесор для настільних систем, який спочатку планувала випустити AMD. Згодом, у світлі виходу швидкісних процесорів Pentium 4, появи в них 800-мегагерцовой шини і технології Hyper-Threading, AMD в терміновому порядку вирішила націлити на ринок настільних систем і однопроцесорний Opteron, давши йому ім'я Athlon 64 FX. Однак Athlon 64 FX через своє серверне походження виявився дорогим і малопоширеним. По-справжньому ж просунути архітектуру AMD64 для масового використання повинен саме Athlon 64.
Нижче представлена ​​таблиця 1 зі специфікаціями 64 - розрядних МП Athlon 64 3200+, Athlon 65 FX-51 та Athlon XP 3200+:

Таблиця 1

* Зауважимо, що пам'ять Athlon 64 і Athlon 64 FX такту-ется щодо частоти ядра, тому реальні частоти для пам'яті у разі складають 129.4, 157.1 і 200 МГц.
Фактично, Athlon 64 відрізняється від свого старшого побратима Athlon 64 FX, крім форми і розмірів корпусу, тільки контролером пам'яті. Хоча, при цьому, і той і інший процесори виробляються з тих самих кристалів. Контролер пам'яті Athlon 64 одноканальний і в цьому полягає як його слабкість, так і перевага в порівнянні з Athlon 64 FX. Недолік одноканального контролера пам'яті в Athlon 64 очевидний: це нижча теоретична пропускна здатність.
Враховуючи, що Athlon 64 здатний працювати з DDR400 пам'яттю, максимальна пропускна здатність вбудованого в CPU контролера пам'яті становить 3.2 Гбайт на секунду. Це вдвічі менше, ніж аналогічна характеристика Athlon 64 FX. Перевага ж контролера пам'яті Athlon 64 полягає в тому, що він, на відміну від контролера Athlon 64 FX, підтримує звичайні нереєстрові модулі пам'яті. Такі модулі в порівнянні з регістровими дешевші, має більш агресивні таймінги і працюють швидше, навіть при однакових з регістровими модулями налаштуваннях. Тобто при більш низькій пропускній здатності, що забезпечується контролером пам'яті Athlon 64, підсистема пам'яті, що його використовує, має нижчу латентність, що ми покажемо нижче.
АMD Athlon 64 зовнішньому виглядусхожий на Opteron та Athlon 64 FX.
Відмінності виявляються тільки в маркуванні і в меншому числі ніжок на звороті, оскільки процесори Athlon 64 встановлюються в Материнські платиз Socket 754 і не сумісні з Socket 940 платами, призначеними для CPU сімейств Athlon 64 FX і Opteron.
Крім перерахованих вище особливостей, є в нових процесорах Athlon 64 і ще одна. Ці процесори володіють підтримкою технології Cool'n'Quiet, що фактично прийшла в них з мобільних варіантівМП. По суті, Cool'n'Quiet є такою собі подібністю технології енергозбереження PowerNow!, яка вже давно використовується в мобільних МП від AMD. Але тепер ця технологія, нарешті, прийшла і в настільні процесори компанії. Підтримка Cool’n’Quiet – ще одна перевага Athlon 64 над Athlon 64 FX/Opteron, що не мають поки що подібних технологій. Компанія AMD досить давно приділяє пильну увагу зниження рівня тепловиділення своїх настільних процесорів.
Треба сказати, що в цьому компанія вже давно перевершує Intel: старші моделі процесорів AMD при максимальному навантаженні виділяють значно менше тепла, ніж старші моделі Pentium 4. Також, в процесорах застосовуються технології, що знижують тепловиділення і при низькому навантаженні. Ще МП сімей
ства Athlon XP мали можливість переходу в «ждущий режим» (Halt/Stop Grant) при виконанні команди HALT, що виливалося в зниження температури процесора при його завантаженні нижче 100%. Але тепер AMD пішла ще далі. У нових процесорах Athlon 64 реалізована ще більш інтелектуальна схема зниження тепловиділення.
На додаток до станів Halt/Stop Grant, Athlon 64 вміє скидати свою тактову частоту та напругу живлення для ще сильнішого зниження тепловиділення. У роботі з використанням цієї технології тактовою частотою МП управляє драйвер процесора, який скидає або підвищує її, ґрунтуючись на даних про його завантаження. Дійсно, якщо процесор повністю справляється з роботою, що покладається на нього, і його завантаження сильно менше 100%, то можна без шкоди для функціонування системи в цілому знизити його тактову частоту: на роботі системи це ніяк не позначиться. Наприклад, при простоях, роботі в офісних додатках, перегляді відео, дефрагментації дисків і в подібних завданнях потужності процесора повною мірою не використовуються. Саме в таких випадках процесорний драйвер переводить Athlon 64 меншу тактову частоту. Коли ж від процесора потрібно повна віддача, наприклад, в іграх, при вирішенні обчислювальних задач, в завданнях кодування даних і т.п., частота процесора піднімається до номіналу. Саме таким чином працює технологія Cool'n'Quiet.
Насправді це виглядає так. У звичайних умовах, за мінімального завантаження МП процесорний драйвер скидає частоту Athlon 64 3200+ зі штатних 2 ГГц до 800 МГц. Напруга живлення процесора у своїй знижується до 1.3В. Як бачимо, зниження тактової частоти забезпечується за рахунок зменшення множника процесора до 4x. Це, до речі, зумовлює і той факт, що процесори Athlon 64 3200 + поставляються з незафіксованим коефіцієнтом множення. У такому режимі процесор продовжує працювати доти, доки його завантаження не перевищить 70-80%. Зокрема, ми змогли запустити одночасно дефрагментацію диска, програвання файлів з розширенням mp3 (аудифайлів) і перегляд MPEG-4 (відеофайлів) ролика, в той час як процесор продовжував працювати на частоті 800 МГц.
Коли ж завантаження процесора Athlon 64 при частоті 800 МГц перевищує допустиму межу, МП переводиться драйвером в наступний стан, при якому частота Athlon 64 3200+ становить 1.8 ГГц, а напруга живлення 1.4В. Досягається це знову за рахунок зменшення множника цього разу до 9x. І тільки якщо в даному випадку навантаження процесора знову виявляється надмірно високим, драйвер переводить МП у штатний режим: частота 2 ГГц, напруга живлення – 1.5В.
Зазначимо, що в режимах зі зниженим живленням і часто тепловиділення процесора Athlon 64 3200+ різко падає. Для порівняння наведемо таблицю 4 з тепловиділенням цього процесора в основних режимах.

Таким чином, використання технології Cool'n'Quiet дозволяє значно знизити температуру процесора не тільки в моменти простою, але і під час виконання ряду завдань, що не вимагають від МП максимальної продуктивності. Що немаловажно, швидкодія МП у завданнях, вимогливих до процесорних ресурсів, при цьому зовсім не знижується. У результаті, при застосуванні систем охолодження з вентиляторами зі змінною швидкістю, використання технології Cool'n'Quiet може значно знизити рівень шуму.