Відмінності між версіями «Модифікована Гарвардська архітектура»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][неперевірена версія]
Рядок 32: Рядок 32:
   
 
=== Архітектура «пам'ять даних як інструкції» ===
 
=== Архітектура «пам'ять даних як інструкції» ===
  +
Деякі процесори Гарвардської архітектури (такі, як MAXQ)<ref>{{Cite book|last=Catsoulis|first=John|title=Designing Embedded Hardware: Create New Computers and Devices|date=2005|page=329}}</ref>, можуть виконувати інструкції з будь-якого сегмента пам'яті. Відмінність від фон-Нейманівської архітектури полягає в тому, що такі процесори можуть читати інструкцію і дані одночасно, якщо вони розташовуються у різних сегментах. Це є можливим завдяки тому, що процесор має як мінімум дві незалежних апаратних шини, для читання адрес і даних відповідно. При програмуванні слід зауважувати, що читання даних з того ж самого сегменту, де виконуюється поточний код, не може бути здійснене водночас з виконанням інструкції.<ref>[http://www.maxim-ic.com/MAXQUG MAXQ Family User's Guide]. Sections 1.2 "Harvard Memory Architecture" and 2.5 "Pseudo-Von Neumann Memory Access".</ref><ref>Konark Goel et al. [https://gcc.gnu.org/ml/gcc-patches/2004-12/txt00149.txt About MAXQ GCC port].</ref>
 
   
 
== розділ ==
 
== розділ ==

Версія за 21:07, 21 січня 2018

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

Архітектура фон Неймана

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

Гарвардська архітектура

Найперша обчислювальна машина, від якої пішла назва архітектури — Harvard Mark I — мала повністю розділені системи пам'яті для збереження програм і даних. Процесор здійснював вибірку інструкції і завантаження даних одночасно і незалежно одне від одного. Такий механізм є фундаментальною відмінністю в порівнянні з архітектурою фон Неймана, де інструкції і дані зберігаються в одній і тій самій пам'яті, і (за відсутності кеш-пам'яті) можуть бути завантажені лише послідовно.

Блок-схема гарвардської архітектури комп'ютера.

У «чисто» гарвардській ЕОМ адресні простори програм і даних мають бути повністю розділені: адреса інструкції і адреса даних — це різні сутності, що ідентифікують, відповідно, команду процесора і байт чи слово даних у двох різних просторах пам'яті. Через таку розділеність гарвардська архітектура уможливлює різну розрядність (і взагалі, різні характеристики) пам'яті програм і даних. Наприклад, спеціалізований процесор може мати 10-розрядну шину адреси (тобто, адресувати не більше ніж 1024 машинних слів), при цьому оперувати 128-розрядними даними.

Модифікована Гарвардська архітектура

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

Розділений кеш («майже фон Нейманівська архітектура»)

Найблішь розповсюдженою модифікацією є організація ієрархії пам'яті у вигляді запровадження роздільного кешу для інструкцій і для даних. Такий підхід зберігає фон Нейманівську уніфікацію адресних просторів майже повністю.[1] Більшість програмістів можуть навіть не здогадуватись, що невелика частина кешу (L1) є розділеною, і що ця особливість суттєво підвищує швидкодію ЦП. Системні програмісти, що потребують максимальної швидкості виконання низькорівневого коду, повинні зважати на питання когерентності кешу.

Архітектура «пам'ять інструкцій як дані»

Інша модифікація, хоча і зберігає принцип «розділені адресні простори» Гарвардської архітектури, забезпечує кілька спеціальних машинних команд для доступу до пам'яті інструкцій. При такій зміні дані не можна «запустити» як серію інструкцій (через це таку архітектуру не завжди розглядають як «модифіковану Гарвардську».

  • Читання з пам'яті інструкцій: спеціальні команди можуть копіювати вміст пам'яті інструкцій у пам'ять даних. У випадку констант (таких як пі чи текстові дані, що не будуть змінюватися), можливе також збереження їх прямо у пам'яті інструкцій, без копіювання у пам'ять даних.
  • Запис у пам'ять інструкцій: потрібна для можливості зміни програми. Наприклад, мікроконтролери зазвичай мають можливіть запису програми у флеш-пам'ять.[2]

Архітектура «пам'ять даних як інструкції»

Деякі процесори Гарвардської архітектури (такі, як MAXQ)[3], можуть виконувати інструкції з будь-якого сегмента пам'яті. Відмінність від фон-Нейманівської архітектури полягає в тому, що такі процесори можуть читати інструкцію і дані одночасно, якщо вони розташовуються у різних сегментах. Це є можливим завдяки тому, що процесор має як мінімум дві незалежних апаратних шини, для читання адрес і даних відповідно. При програмуванні слід зауважувати, що читання даних з того ж самого сегменту, де виконуюється поточний код, не може бути здійснене водночас з виконанням інструкції.[4][5]

розділ

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

Застосування двох системних шин для звернення до пам'яті програм і пам'яті даних в Гарвадській архітектурі має два недоліки — високу вартість і велику кількість зовнішніх виводів мікропроцесора. При використанні двох шин для передачі команд і даних, мікропроцесор повинен мати майже вдвічі більше виводів, оскільки шина адреси і шина даних складають їх основну частину. Для зменшення кількості виводів процесора фірми-виробники мікросхем об'єднали шини даних і шини адреси для зовнішньої пам'яті даних і програм, залишивши тільки різні сигнали управління (WR, RD, IRQ), а усередині мікропроцесора зберегли класичну гарвардську архітектуру. Таке рішення отримало назву модифікована Гарвардська архітектура.

Модифікована гарвардська структура застосовується в сучасних мікросхемах сигнальних процесорів. Ще далі по шляху зменшення вартості кристала за рахунок зменшення площі, займаної системна шина пішли виробники однокристальних ЕОМ — мікроконтролерів. У цих мікросхемах застосовується одна системна шина для передачі команд і даних (модифікована Гарвардська архітектура) і всередині кристала.

У сигнальних процесорах для реалізації таких алгоритмів є швидке перетворення Фур'є і цифрова фільтрація; часто потрібна ще більша кількість внутрішніх шин. Зазвичай застосовуються дві шини для читання даних, одна шина для запису даних і одна шина для читання інструкцій. Подібна структура мікропроцесора отримала назву розширеної гарвардської архітектури. Цей підхід практикують виробники сигнальних процесорів — фірми Analog Devices (сімейства сигнальних процесорів BlackFin і Tiger Shark), Texas Instruments (сімейства сигнальних процесорів C5000™ і C6000™), Freescale (сімейства сигнальних процесорів MSC8251 і DSP56K).

Сучасне застосування модифікованої Гарвардської архітектури

Кеш-пам'ять сучасних процесорів, зокрема кеш першого рівня, зазвичай розділена на окремі частини для команд і для даних.

Існують також процесори, що можуть вважатися гарвардськими у найбільш строгому сенсі (програма і дані знаходяться у різних адресних просторах), «модифіковані» лише з метою можливості запису програми у пам'ять як послідовності байтів (даних). Для прикладу, інструкції LPM (Load Program Memory) і SPM (Store Program Memory) у контролерах Atmel AVR реалізують таку модифікацію. Схожі рішення застосовані і в інших мікропроцесорах, таких як PIC і Z8 Encore!, і у багатьох цифрових сигнальних процесорах (наприклад, TMS320 від Texas Instruments). Через те, що виконання програми строго лімітоване окремим адресним простором, такі процесори дуже несхожі на традиційні фон-Нойманівські.

Розділені адресні простори створюють певні незручності при програмуванні на мовах високого рівня. Не всі компілятори підтримують модель, де дані лише для читання розташовуються в абсолютно іншому адресному просторі (і, як наслідок, вимагають особливих інструкцій для читання), в порівнянні з даними на читання і на запис. Компілятори з мови C, що підтримують розділені адресні простори, роблять це або за допомогою нестандартних розширень, або через механізми Embedded C, що лише нещодавно став стандартом.

Див. також

  1. Modified Harvard Architecture: Clarifying Confusion
  2. AVR109: Self Programming (Application note). Atmel. June 2004. Процитовано 29 January 2015. 
  3. Catsoulis, John (2005). Designing Embedded Hardware: Create New Computers and Devices. с. 329. 
  4. MAXQ Family User's Guide. Sections 1.2 "Harvard Memory Architecture" and 2.5 "Pseudo-Von Neumann Memory Access".
  5. Konark Goel et al. About MAXQ GCC port.