| Адресація оперативної пам'яті
З точки зору процесора, оперативна пам'ять
є масивом пронумерованих вічок. Номер кожного елементу пам'яті називається
її адресою.
Розрядність адреси є одній з найважливіших
характеристик процесора і системи команд, що реалізовується ним. Розрядність
важлива не як самоціль, а тому, що нею обумовлений об'єм пам'яті, що
адресується, — адресного простору. Системи з 16-розрядною
адресою здатні адресувати 64 Кбайт (65 536) елементів пам'яті, а
з 32-розрядним — 4 Гбайт (4 294 967 296) вічок. Пам'ять, що у наш час
адресується, в 4 Гбайт для багатьох застосувань вважається неприйнятний маленькою
і потрібна 64-розрядна адресація.
Процесору зазвичай доводиться здійснювати арифметичні операції над адресами,
тому розрядність адреси біля сучасних процесорів зазвичай збігається
з розрядністю основного АЛУ.
Біля деяких комп'ютерів адресація (нумерація) елементів пам'яті
фіксована: один і той же елемент пам'яті завжди має один і той же номер. Така
адресація називається фізичною. Адреса при цьому розбита на бітові поля,
які безпосередньо використовуються як номер фізичної мікросхеми пам'яті,
і номери рядка і стовпця в цій мікросхемі. Навпаки, більшість сучасних
процесорів загального призначення використовують віртуальну
адресацію коли номер конкретного елементу пам'яті визначається не
фізичним розміщенням цього вічка, а контекстом, в якому відбувається
адресація. Способи реалізації віртуальної пам'яті і необхідність її вживання
обговорюються в главі 5.
У старих
комп'ютерах розмір елементу пам'яті даних, що адресується, збігався з розрядністю
АЛУ центрального процесора і розрядністю шини даних. Вічко, що
адресується, називалося словом. У процесорах манчестерської
архітектури, які можуть використовувати одну і ту ж пам'ять як для команд,
так і для даних, обоє розміру визначалися довжиною команди. Через це
багато процесорів такого типа мали дивні по сучасних представленнях
розрядності — 48, 36, інколи навіть 25 біт.
БЕСМ-6
Так,
БЕСМ-6 мала слово розрядністю 48 біт і команди завдовжки 24 біта, що
складалися з 15-розрядного адресного поля і 9-розрядної коди операції.
Адресне поле дозволяло адресувати 32К слів. У одному слові розміщувалися
дві команди, при цьому команди переходу могли вказувати лише на першу
з упакованих в одне слово команд.
Біля процесорів гарвардської архітектури (що мають роздільні
пам'яті для команд і даних) розрядність АЛУ і розмір команди не зв'язані.
Microchip PIC
Мікроконтроллери сімейства PIC фірми Microchip мають 8-розрядне АЛУ і
накристалльное ОЗУ тієї ж розрядності [www.microchip.com PICMicro]. Команди
цих мікроконтроллерів розміщуються в ПЗП (також накристалльном), в якому
кожне слово має 12 біт і містить одну команду. Аналогічно БЕСМ-6,
команда мікроконтроллера складається з адресного поля (яке може містити
як адресу, так і константне значення довжиною 1 байт) і коди операції.
Під код операції залишається всього чотири біта, тому команд, що мають
повне адресне поле, може бути не більше 16. Адресний простір
мікроконтроллера складає 8 біт, тобто всього 256 слів коди і 256 байт даних. Проте
за допомогою хитрування, званого банковою адресацією (детальніше про цьому
див. в разд. Банки пам'яті), старші моделі сімейства
PIC адресують і по декілька кілобайт як коди, так і даних.
Втім, для багатьох цілей і 256 команд цілком достатньо. Найменший в
світі Web-сервер [www-ccs.cs.umass.edu] реалізований саме на основі PIC. У
512 слів коди удалося упакувати реалізацію повноцінних підмножин протоколів RS232
(використана модель мікроконтроллера не має апаратний реалізованого послідовного
порту), РРР, TCP/IP і HTTP. Web-сервер складається з двох мікросхем
— власне сервера і кристала флэш-памяти, в якому зберігаються HTML-документы,
що експортуються сервером, і зображення. Сервер включається
в послідовний порт комп'ютера і отримує живлення від цього порту.
Розробник сервера рекламує його як основу (або, в усякому разі,
як демонстрацію технічної можливості) створення Web-интерфейсов для
всілякого побутового устаткування.
У сучасних комп'ютерах одиницею адресації є
байт — елемент пам'яті розміром 8 біт. При цьому
і АЛУ, і шина даних можуть мати велику розрядність (хоча, звичайно, ця
розрядність завжди кратна байту -8, 16, 32 або 64 біта). Розрядність АЛУ
і шини даних може не збігатися: так, 18088 мав 16-розрядне АЛУ і 8-розрядну
шину, MC68000 і 180386SX — 32-розрядне АЛУ і 16-розрядну шину. Що при
цьому розуміється під "словом" - залежить від фантазії виготівників
процесора. Наприклад, біля сповна 32-розрядного VAX документація називає
16-бітову структуру словом, а 32-бітову — подвійним или- довгим словом,
хоча, зазвичай, довжиною слова вважається все-таки розрядність АЛУ.
При цьому різні процесори по-різному личать до адресації слів.
По-перше, деякі процесори (PDP-11, SPARC) забороняють звернення до
слів, адреса яких не кратна розміру слова, і генерують при спробах
такого звернення виняткову ситуацію помилки шини. Інші процесори,
наприклад VAX і х86 такі звернення вирішують, але в документації є чесне
попередження, що звернення до невирівняних слів будуть мінімум в два
рази повільніше, ніж до вирівняних (мал. 2.4).
Мал. 2.4. Вирівняні і невирівняні звернення до слів
По-друге, є розбіжності в тому, як слід адресувати
(або, як слід інтерпретувати при арифметичних операціях) байти
одного слова — за якою адресою знаходяться старші 8 бітів, а по якому
— молодші? Біля одних Процесорів (IBM/390, MC68000, SPARC) — старший байт
розташовується за меншою адресою (big endian)
біля інших (VAX, x86) - по більшому (little etidian).
Зустрічаються і процесори із змішаним порядком байтів, коли, наприклад,
з двох байтів півслова за меншою адресою розташований молодший, а з двох
півслів за меншою адресою розташоване старше (мал. 2.5). Деякі
сучасні процесори, наприклад POWERPC, MIPS, SPARC V9 можуть працювати
і з тим, і з іншим порядком байтів, причому інколи навіть в межах однієї
програми.

Мал. 2.5. Порядок байтів в слові
Можливі відмінності в порядку байтів
слід брати до уваги при розробці форматів для передачі даних по мережі або
збереження у файлі. Крім того, деякі помилки програмування (наприклад,
неявне перетворення покажчика на байт в покажчик на 16- або 32-бітове ціле
число) відносно нешкідливі на машинах, біля яких молодший байт перший, і
наводять до негайних катастрофічних результатів на комп'ютерах, що
використовують меншу адресу для старшого байта.
|