Архітектура фон Неймана — Вікіпедія
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Von_Neumann_architecture.svg/languk-280px-Von_Neumann_architecture.svg.png)
Архітекту́ра фон Неймана (англ. Von Neumann architecture) — архітектура електронних обчислювальних машин, основною відмінністю якої від інших подібних архітектур є спільне зберігання даних та машинних команд в комірках однієї й тієї ж пам'яті, що унеможливлює їх розрізнення за способом представлення або кодування. Названа так на честь відомого математика та теоретика обчислювальної техніки Джона фон Неймана, та по сьогодні залишається домінуючою схемою організації ЕОМ загального призначення.
Авторство концепції, покладеної в основу фон-нейманівської архітектури, насправді належить колективу авторів (фон Нейман, Дж. Екерт, Дж. Моклі), які працювали над створенням однієї з перших ЕОМ загального призначення з можливістю перепрограмування — ENIAC (1943, зокрема фон Нейман був консультантом в цьому проекті), а потім вже глибше реалізована в машині EDVAC (1952). Самі принципи були сформульовані в декількох публікаціях, серед яких слід виділити таку як Burks, A. W., Goldstine, H. H., and von Neumann, J. Preliminary discussion of the logical design of an electronic computing instrument, 1945 («Попередня дискусія про логічний устрій електронного обчислювального інструмента») та Von Neumann, J. First draft of a report on the EDVAC, 1946 («Перший варіант доповіді про EDVAC»).
Власне, головною проблемою, яка поставала перед «піонерами» обчислювальної техніки була надзвичайна складність введення алгоритму обчислень в ЕОМ, для чого доводилось мати справу з численними перемикачами, тумблерами, роз'ємами та іншими комутуючими елементами. Це ускладнювало процес, призводило до величезної кількості помилок та аж ніяк не додавало цим машинам універсальності.
Фон Нейман в своїй «Попередній дискусії» запропонував натомість зберігати алгоритм разом з даними для обчислень в пам'яті обчислювальної машини, що б давало можливість по-перше оперативно перепрограмувати систему, а по-друге поводитись з командами як з даними, проводити над ними такі ж обчислювальні операції, тобто фактично відкривало можливість для написання програм, які самі себе модифікують (і це було зовсім не екзотикою на той час, а практичною необхідністю). Таким чином пропонувалась організація обчислень, яка дійсно робила обчислювальну машину універсальним інструментом.
Така структура унеможливлювала розрізнення команд від даних в пам'яті машини за структурою представлення, але фон Нейманом було вказано, що таке розміщення можливе «за умови, якщо машина якимось чином зможе розрізнити їх». Для того, щоби вказати машині на те, де є команди, а де є дані, була згодом запропонована концепція лічильника команд (program counter), в якому зберігалась адреса поточної команди, а після її виконання замінювалась адресою наступної. Адреси ж самих операндів (даних) зберігались безпосередньо в команді.
Також в «Попередній дискусії» була досить докладно розглянута чотирикомпонентна структура обчислювального інструмента, яка зараз вважається класичною структурою фон-нейманівської машини, а саме: арифметичний пристрій, пристрій керування, пам'ять та пульт оператора.
Обчислювальна машина є машиною з архітектурою фон Неймана, якщо:
- Програма та дані зберігаються в одній загальній пам'яті. Це дає можливість виконувати над командами ті ж дії, що і над даними.
- Кожна комірка пам'яті машини ідентифікується унікальним номером, який називається адресою.
- Різні слова інформації (команди та дані) розрізняються за способом використання, але не за способом кодування та структурою представлення в пам'яті.
- Кожна програма виконується послідовно, починаючи з першої команди, якщо немає спеціальних вказівок. Для зміни цієї послідовності використовуються команди переходу.
Машина фон Неймана, як і практично кожна сучасна ЕОМ загального призначення, складається з чотирьох основних компонентів:
- Арифметико-логічний пристрій (АЛП, англ. arithmetic logic unit), який виконує команди з визначеного набору, який називається системою (набором) команд, над порціями інформації, яка зберігається відокремленій від операційного пристрою пам'яті (хоча сучасні архітектури мають в складі операційного пристрою додаткову пам'ять (зазвичай банк регістрів), в якій операнди зберігаються порівняно короткий час безпосередньо в процесі проведення обчислень.
- Пристрій керування процесором (англ. control unit), який організує послідовне виконання алгоритмів, розшифрування команд, які надходять із пристрою пам'яті (див. нижче), реагує на аварійні ситуації та виконує загальні функції керування всіма вузлами обчислювальної машини. Зазвичай АЛП та пристрій керування об'єднуються в структуру, яка називається центральним процесором. Слід звернути увагу, що вимога саме послідовного, в порядку надходження з пам'яті (в порядку зміни адрес в лічильнику команд) виконання команд є принциповою. Архітектури, які не додержуються такого принципу, взагалі не вважаються фон-нейманівськими.
- Комп'ютерна пам'ять (англ. primary storage) — масив комірок з унікальними ідентифікаторами (адресами), в яких зберігаються команди та дані.
- Пристрої вводу/виводу, які забезпечують зв'язок ЕОМ з зовнішнім світом, передають інформацію на переробку в ЕОМ та приймають результати.
Після завантаження програми (алгоритму й даних для обробки) в запам'ятовуючий пристрій, машина фон Неймана може працювати автоматично, без втручання оператора. Кожна комірка пам'яті машини має унікальний номер — адресу, спеціальний механізм, найчастіше — лічильник команд — забезпечує автоматичне виконання необхідної послідовності команд, і визначає на кожному етапі адресу комірки, з якої необхідно завантажити наступну команду.
Перед початком виконання програми в лічильник записується адреса її першої команди. Визначення адреси наступної команди відбувається за одним з наступних сценаріїв:
- Якщо поточна команда не є командою переходу (тобто це просто арифметична або логічна операція над даними), то до поточного значення лічильника додається число, яке дорівнює довжині поточної команди в мінімально адресованих одиницях інформації (зрозуміло, що це можливо за умови, якщо звичайні команди в блоках, не розділених командами переходу, розташовуються послідовно в пам'яті, інакше адреса наступної команди може зберігатись, наприклад, безпосередньо в команді).
- Якщо поточна команда — команда переходу (умовного або безумовного), яка змінює послідовний хід виконання програми, то в лічильник примусово записується адреса тої команди, яка була замовлена при виконанні переходу, де б вона не знаходилась.
Можна виділити два основних вектори критики архітектури фон Неймана:
Хоча це не стосується безпосередньо принципів фон Неймана, але часто апелюють саме до «класичної архітектури фон Неймана» в критиці її досить примітивного та низькорівневого набору команд, який, на думку критиків, абсолютно не відповідає сучасному стану справ в індустрії розробки програмного забезпечення, зокрема в наявності мов високого рівня, які набагато підвищують продуктивність праці програміста за рахунок пропонування йому більш високорівневих абстракцій, і потрібно зазвичай до декількох сот машинних команд замість однієї команди мови високого рівня. Цей дисбаланс в принципі успішно вирішується на програмному рівні за допомогою компіляторів, але в 60—70 роки XX століття було досить багато намагань реалізувати машинні мови високого рівня апаратно (див. Архітектура з розвинутими засобами інтерпретації). Серед вітчизняних розробок в цьому напрямі слід виділити ЕОМ серії «МИР», а серед серйозних критиків системи фон-Неймана, в тому числі і за низький семантичний рівень команд, академіка В. М. Глушкова. Певною мірою, намаганням «підвищити семантичний рівень» можна вважати і CISC-архітектури системи команд, хоча як довів час, перспективнішим виявився прямо зворотний напрямок максимальної «примітивізації» набору команд, реалізований в RISC-архітектурах.
Розділення операційного пристрою та пам'яті в класичній архітектурі фон-Неймана вважається її суттєвим недоліком. Полюбляють казати про так звану «шийку пляшки» фон-нейманівської архітектури (термін, запропонований Джоном Бекусом (John Backus) в 1977. Ця «шийка» виникає між операційним пристроєм (центральним процесором) і пам'яттю, адже швидкість обробки інформації в процесорі зазвичай є набагато більшою, аніж швидкість роботи пристрою пам'яті, який не встигає забезпечувати процесор новими порціями інформації, що призводить до простоїв. Проблема вирішується за рахунок побудови складнішої ієрархії пам'яті, зокрема введенням кеш-пам'яті (швидшої, але й дорожчої за основну). У кеш-пам'ять зберігаються дані, які часто використовуються в обчисленнях, що зменшує кількість звертань до повільнішої основної пам'яті. Існують також і радикальні пропозиції, які в останній час почали втілюватись в життя, і полягають в створенні так званої «розумної пам'яті», яка б інтегрувала комірки пам'яті зі схемами обробки даних.
Іншим прикладом часткового вирішення цієї проблеми є гарвардська архітектура, в якій пам'ять команд та даних розділена, що дозволяє інтенсифікувати обмін між пристроєм пам'яті та центральним процесором.
Архітектура фон Неймана є принципово послідовною. І це є суттєвим обмежуючим фактором в підвищенні швидкодії машин з такою організацією, унеможливлює введення явного паралелізму в систему. Передусім це питання не технічне, а концептуальне і пов'язане з самою парадигмою програмування для фон-нейманівських машин. Саме тому паралельні обчислювальні машини, хоча й успішно виконують свої завдання, ще довго, мабуть, не зможуть витіснити цю класичну архітектуру.
Разом з тим, хоча майже всі ЕОМ загального призначення є фон-нейманівськими, вони суттєво використовують механізми розпаралелювання обчислень, хоча це відбувається й неявно, на рівні внутрішньої організації процесора, який непомітно для програміста виявляє схований паралелізм в послідовних програмах для фон-нейманівських машин.
Така «непомітність» є принциповою. Фактично фоннейманівською в сучасних ЕОМ залишається саме архітектура обчислювальної машини (тобто програмна організація). Внутрішня організація сучасних процесорів радикально використовує нефоннейманівські принципи виконання команд, але «виведення» цих принципів безпосередньо в архітектуру ЕОМ, тобто відкриття їх для програміста, яке на перший погляд може здаватись доцільним, насправді може зруйнувати всю індустрію, і саме в цьому є секрет привабливості фоннейманівської архітектури. Фактично, ця концепція пропонує програмісту надзвичайно просту модель виконання програми, послідовну модель, яка збігається з образом мислення більшості програмістів, і тому найчастіше використовується при створенні програм. Явне паралельне програмування — це надзвичайно складна галузь, яка потребує повної перебудови образу мислення програміста, оперування складнішими абстракціями, застосування зовсім інших алгоритмів та структур даних. Тому збереження фоннейманівської архітектури, яким би стримуючим фактором воно не було, є абсолютно принциповим для проектувальників ЕОМ загального призначення.
- H. Norton Riley, The von Neumann Architecture of Computer Systems
- von Neumann J. The First Draft report on the EDVAC (PDF)
- Майерс Г. Архитектура современных ЭВМ. В 2-х книгах. М.: Мир, 1985
- John L. Hennessy, David A. Patterson, Computer Architecture: A Quantitative Approach, Third Edition, Morgan Kaufmann, 2002, 1100 p. (ISBN 1-55860-329-8)