Фон Нојманова архитектура

**Фон Нохманова архитектура** (**Фон Нојманов модел** или **Принстонска архитектура**) — сметачка архитектура заснована на истото опишано во 1945 од страна на матиматичарот и физичар Џон фон Нојман и други во First Draft of a Report on the EDVAC. Ова опишува дизајн на архитектура за електронски дигитален сметач со делови кои се содрќат од обработувачка единица која содржи аритметичко-логична единица и обработувачкки регистри, контролна едицина која содржи инструкциски регистар и програмски бројач, меморија за да чува податоци и инструкции, надворешна чување на големи податоци и влезно/излезни механизми. Значењето на ова еволуирало да биде такво што се асоцира со секој сметач кој инструкција може да биде преземена и операција на податоци не може да се случи во исто време бидејќи тие делат заедничка магистрала. Ова се нарекува Фон Нојманово тесно грло и ги ограничува перформансите на системот.

Дизајнот на фон Нојмановата архитектура е поедноставен од модерната Харвард архитектура која што е исто така складирачко-програмски копмјутер но има само еден посветен сет од адреси и податочни магистрали за читање и пишување податоци во меморија, и уште еден сет од адреси и магистрали за преземање инструкции.

Складирачко-програмски дигитален сметач е оној кој ги чува своите програмски инструкции, како и податоци, во RAM меморија. Сладирачко-програмски сметачи биле напредок во однос на програмски контролираните сметачи во 1940-тите, како Colossus и ENIAC кои биле програмирани со местење на прекинувачи и вметнување на patch leads за да рутираат податоци и контролираат сигнали помеѓу повеќе функционални единици. Во мнозинството современи сметачи, истат меморија се користи за податоци и програмски инструкции, фон Нојман против Харвардска архитектура се аплицира на кеш архитектурите, не и на главната меморија.

## Историја

Најраните компјутирачки машини имале фиксни програми. Некои многу еднотавно сметачи сè уште го користат овој дизајн, од едноставни причини или за тренинг и вежби. На пример, обичен калкулатор (во принцип) е сметач со фискна програма. Може да пресметува основна математика, но не може да биде користен како текст обработувач или конзола за игри. Менување на програмата на фиксно-програмска машина бара препишување, пре-структурирање или редизајнирање на машината. Најраните сметачи не биле до толку ‘програмирани’ колку што биле ‘дизајнирани’. ‘Репорограмирање’, кога воопшто било можно, бил напорен процес, започнувајќи со табели и хартиени забелешки, следени со детални инженерски дизајни и тогаш често напорен процес од физичко пре-поврзување и градење на машината. Било потребно три недели да се намести програма во ENIAC и истата притоа да работи.
Со предлогот за складирачко-програмски сметач ова се променило. Ваков сметач вклучува дизајн за инструкциски сет и може во меморија да чува сет од инструкции (програма) која детално ја знае компјутацијата.

Складирачко-програмски дизајн исто така дозволува самостојно-менувачки код. Рана мотивација за ваква можност била потребата од програма да инкрементира или промени адресен дел од инструкции, кои претходно морало да се направи рачно. Ова настанало помалку важно кога индекс регистри и индиректно адресирање настанало вообичаена функција во машинска архитектура. Друг корист било да се вградат често користени податоци во инструкцискиот проток користејќи итно адресирање. Самостојно-менувачки код бил многу не пожелен за користење, бидејќи било тешко да се разбере и дебагира, исто така бил неефикасен под новите обработувачкки протоци и шеми на кеш.

На поголема скала, способноста да ги третираат инструкциите како податоци е тоа што ги прави асемблерите, компајлерите, линкерите, полначите и другите автоматски програмски алатки можни. Личност може ‘да напише програма што пишува програми’. На помала скала, повторувачките влезно/излезни операции како BITBLT манипулаторот на слики или пиксел и вертекс засенувачи во модерната 3D графика, биле сметани како неефикасни да се изведуваат без специјален хардвер. Овие операции кои би можеле да бидат забрзани на општо целните обработувачи со ‘компилирање додека работат’ (‘точно на време компилирање’) технологии пр. програми кои генерираат код—една форма од само модифирачки код кои останале популарни.

## Развивање на складирачко-програмски концепт

Математичарот Alan Turing, кој бил известен за проблем од математичка логика од страна на предавањата на Max Newman на Универзитетот Кејмбриџ, напишал труд во 1936 со наслов On Computable Numbers, with an Application to the Entscheidungsproblem, кој бил издаден во списанието Proceedings of the London Mathematical Society. Во тоа, тој опишал хипотетичка машина која што ја нарекол ‘универзална компјутирачка машина’, истата сега е позната како ‘Универзална Туринг машина’. Хипотетичката машина имала бесконечна меморија (во денешна терминологија) која содржела и инструкции и податоци. Џон фон Нојман се запознал со Turing додека бил професор на Кејмбриџ во 1935 исто така за време на PhD на Turing при Институтот за Напредни Науки во Принстон, Њу Џерси помеѓу 1936-37. Не е јасно дали знаел за трудот на Turing од 1936 година.

Во 1936 година, Konrad Zuse исто така предвидел две апликации за патент со кои машинските инструкции би можеле да бидат зачувани во иста меморија која се користела и за податоци.

Независно, J. Presper Eckert и John Mauchly, кои го развивале ENIAC во Moore School of Electrical Engineering на Универзитетот во Пенсилванија напишале за складирачки-програм концепт во декември 1943 година. При планирање нова машина, EDVAC, Eckert напишал во јануари 1944 година дека тие би можеле да чуваат податоци и програми во нова адресабилна мемориска направа, одложување на мемориска лини со метал од жива. Тоа било првиот пат кога било предложено конструкција на практична складирачко-програмска машина. Во тоа време тој и Mauchly не биле свесни за работата на Turing.

Фон Нојман бил вклучен во проектот Менхетн во Националната лабораторија „Лос Аламос“, која што имал потреба од големи количини на пресметки. Ова го привлекло кон ENIAC Проектот, за времене летото во 1944 година. Таму тој се приклучил на постоечката дискусија за дизајнирање на овој складирачко-програмски сметач, наречен EDVAC. Како дел од таа група, тој напишал опис наречен First Draft of a Report on the EDVAC заснован на работата од Eckert и Mauchly. Тоа било недовршено кога неговиот колега Herman Goldstine го пронашол со само името на фон Нојман напишано на истото. Трудот бил прочитан од голема бројка на колеги на фон Нојман во Америка и Европа и влијаело врз следната рунда сметачки дизајни.

Jack Copeland го смета тоа за ‘историски неадекватно, да се референцира на електронските складирачко-програмски дигитални сметачи како “фон Нојманови машини”’. Неговиот колега од Los Alamos, Stan Frankel, изјавил за фон Нојмановиот поглед на идеите на Тјуринг:

  *Знам дека во или околу 1943/44 фон Нојман беше целосно свесен за основната важност на Turing-овиот труд од 1936… фон Нојман ми го посочи тој труд и поради неговото инсистирање длабого го проучив. Многу луѓе го сметаат фон Нојман како „таткото на сметачот“ (во модерна смисла на зборот) но јас сум сигурен дека он никогаш не би ја направил таа грешка самиот. Слободно може да се нарече бабица, можеби, но тој строго ми го посочи тоа, сигурен сум дека и на другите, дека основната замисла се должи на Turing-дури не предвидена од страна на Babbage… И Тјуринг и фон Нојман, секако, направија значајјни придонеси кон ‘намалувањето на примена’ на овие концепти но не би ги сметал овие како споредливи во важност со претсавувањето и експлицитација на концептот за сметач кој е способен да ја чува својата меморија, програма на активности и изменување на програмата во однос на тие активности.*

Во времето кога ‘First Draft’ извештајот почнал да кружи Turing направил извештај со наслов Proposed Electronic Calculator кој опишал во инженерски и програмерски детал, неговата идеја за машина која била наречена Automatic Computing Engine (ACE). Тој ја претставил идејата на Извршниот Комитет при Британската Национална Физичка Лабораторија на 19 Февруари 1946 година. Иако Turing знаел од неговото воено искуство во Bletchery Park дека тоа што го предложил било изводливо, тајноста околу Colossus, која што била одржувана неколку декади му го забранувала истото. Неколку успешни имплементации на ACE дизајнот биле направени.

Трудовите на фон Нојман и Turing опишуваат складирачко-програмски сметачи, но претходниот труд на фон Нојман постигнал поголема циркулација и затоа опишаната архитектура станала позната како ‘фон Нојмановата архитектура’. Во 1953 година, во објавеното Faster than Thought: A Symposium on Digital Computing Machines (едитирано од страна на B.V Bowden) дело од поглавјето на Сметачи во Америка следува:

  **Машинскиот Институт за Напредни Студии, Принстон **

  *Во 1945, професорот Џ. фон Нојман, кој тогаш работел во Муровото школо за инженерство во Филаделфија, каде што E.N.I.A.C бил изграден, на барање од своите колеги објавил извештај на логичниот дизајн на дигиталните сметачи. Извештајот содржел мошне детален предлог за дизајнот на машината која од тогаш е позната како E.D.V.A.C (електронски диксретен варијабилен автоматски сметач). Оваа машина е неодамна завршена во Америка, но извештајот на фон Нојман ја инспирираше конструкцијата на E.D.S.A.C (електронски автоматски калкулатор со задоцнување на меморијата) во Кејмбриџ.

Во 1947, Burks, Goldstine и фон Нојман објавија уште еден извештај во кој е опишан дизајнот на уште еден тип на машина (овој пат паралелна) којшто се покажувала како многу брза и способна за можни 20 000 операции во секунда. Тие посочиле дека најголемиот проблем со конструирање на таква машина е развивањето на соодветна меморија, чија содржина била инстантно пристапна, и првично предложиле користење на специјална вакуумска туба - нареченеа ‘Selectron’ - која што била изработена од страна на Принстонските R.C.A лаборатории. Овие цевки биле скапи и комплицирани за изработка, така што фон Нојман последователно решил да изгради машина заснована на Williams меморија. Оваа машина, која била завршена во јуни 1952 година во Принцстон била популарно позната како Maniac. Дизајнот на оваа машина е инспирацаија за голем дел од други машини кои моментално се изработуваат во Америка, познати како ‘Johniacs’. *

Во истата книга, првите два параграфи од поглавје на ACE следуваат:

  **Автоматска Компјутација во Националната Лабораторија за Физика**

  *Еден од најмодерните дигитални сметачи кои поттикнуваат развој и подобрувања во техниката на автоматско електронско копмјутирање беше неодамна демонстриран во Националната Лабораторија за Физика, во Тедингтон, каде беше дизајнирано и изградено од мал тим на математичкари и инженери за елетронско истражување како дел од персоналот на Лабораторијата, асистирани од продуктски инженери од English Electric Company, Limited. Досегашната покрената опера во Лабораторијата е единствениот почетен модел од многу поголема инсталација која ќе биде позната како Автоматскиот Сметачки Мотор, но покрај тоа што е мал во големина и содржи само 800 термионички вентили, како што може да се заклучи од Plates X//, X/// и X/V, таа е мошне брза и разновидна калкулирачка направа.*

Основните концепти и апстрактни принципи на компутанција од страна на машина беше формулирани од д-р Алан Трјуринг, F.RS, во труд читан пред Математичкото Општество на Лондон, во 1936 година, но работата на ваква машина во Британија беше одложена поради војната. Во 1945 година, истражување на проблемите беше направено од Националната Лабораторија за Физика од страна на г-дин J. R. Womersley, тогаш надлежен во Математичкиот Оддел на Лабораторијата. Тој беше придружен од страна на г-динот Тјуринг и мал персонал од специјалисти, кои, во 1947 ги напреднаа прелиминарните планирања доволно за да веќе напоменатата група била воспоставена. Во април 1948 година, истата прераснала во Електронскиот Оддел од Лабораторијата, под надлежност на г-дин F. M. Colebrook. *

== Рани сметачи кои содржат фон Нојмановата архитектура ==

Во First Draft е опишан дизајн кој бил користен од многу универзитети и корпорации за констркуцкија на нивните сметачи. Меѓу овие повеќе видови на сметачи, само ILLIAC и ORDVAC имале компатабилни инструкциски сетови.
*Манчестеровата машина за мало-размерни експерименти (SSEM), со прекар ‘бебе’ (Универзитетот во Манчестер, Англија) го направил своето прво успешно пуштање на складирана програма на 21 јуни 1948 година.
*EDSAC (Универзитетот во Кејмбриџ, Англија) бил првиот практичен складирачко-програмски електронски сметач (мај 1949)
*Манчестер Марк 1 (Универзитетот во Манчестер, Англија) развиен од SSEM (јуни 1949 година)
*CISRAC (Совен за Научено и Индустриско истражување) Австралија (ноември 1949 година)
*EDVAC (Балистичка лабораторија за истражување, Сметачка лабораторија во Aberdeen Proving Ground, 1951 година)
*ORDVAC (У-Илиноис) во Aberdeen Proving Ground, Мериленд (завршен во ноември 1951 година)
*IAS машина во универзитетот Принстон (јануари 1952 година)
*MANIAC I во Научната Лабораторија на Лос Аламос (март 1952 година)
*ILLIAC на Универзитетот во Илиноис (септември 1952 година)
*BESM-1 во Москва (1952 година)
*AVIDAC во Националната Лабораторија на Аргон (1953 година)
*ORACLE во Националната Лабораторија на Oak Ridge (јуни 1953 година)
*BEST во Стокхолм (1953 година)
*JOHNNIAC на RAND корпорацијата (јануари 1954 година)
*DASK во Данска (1955 година)
*WEIZAC во Rehovoth (1955 година)
*PERM во Минхен (околу 1956 година)
*SILLIAC во Сиднеј (1956 година)

==Рани складирачко-програмски сметачи==

Информациите за датумите околу хронолошкиот редослед е тешко да се подреди. Некои датуми се за прво работење на тест програми, некои датуми се за првиот пат кога сметачот бил завршен или демонстриран, а некои датуми се на привата испорака и инсталација.
*IBM SSEC ја имала можноста да ги третира инструкциите како податоци, јавно бил претставен на 27 јануари 1948 година. Оваа можност била патентирана во Сооединетите Американски Држави. Но била делумно електромеханичка, не целосно електронска. Практично инструкциите биле читани од хратиена лента поради неговата лимитирана меморија.
*SSEM на Манчестер (Бебето) бил првиот вистински електронски сметач кој пуштил складирана програма. Пуштила факторска програма со времетраење од 52 минути на 21 јуни 1948 година, после пуштање на едноставна програма која делела и прогама која покажувала дека броевите биле парни броеви.
*ENIAC бил изменет да пушти примитивна складирана програма (со помош на Функционални Табели за програмскиот ROM) и бил демонстриран на таков начин на 16 септември, 1948 година работејќи програма на Адел *Голдстин за фон Нојман.
*BINAC пуштил неколку тест програми во февруари, март и април 1949 г., но не бил завршен до септември 1949 година.
*Manchester Mark 1 бил развиен од SSEM проект. Средна верзија од Mark 1 имал можност да пушта програми во април 1949, но не бил завршен до октомври 1949 година.
*EDSAC ја пуштил својата прва програма на 6 мај 1949 година.
*EDVAC бил испорачан во август 1949 година, но имал проблеми кои го спречувале да биде користел до 1951 година.
*CSIR Mk 1 ја пуштил својата прва програма во ноември 1949 година.
*SEAC бил демонстиран во април 1950 година.
*Pilot ACE ја пуштил својата прва програма на 10 мај 1950 година и бил демонстриран во декември 1950 година.
*SWAC бил завршен во јули 1950 година.
*Whirlwind бил завршен во декември 1950 година, а бил користен во април 1951 година.
*Првиот ERA Atlas (подоцна познат како ERA 1101/UNIVAC 1101) бил инсталиран во декември 1950 година.

==Еволуција==

Низ 1960-тите и 70-тите сметачите станале генерално помали и побрзи, што донело до еволуција на нивните архитектури. На пример, мемориско-мапираниот влезно/излезен уред дозволува влезно/излезни направи да се третирани како меморија. Едена системска магистрала можела да биде искористена со пониска цена. Ова е понекогаш наречено ‘streamlining’ на архитектурата. Во подоцни декади, едноставни микроконтролери понекогаш би изоставиле одлики од моделот за да се намали големината и цената на истата. Поголеми сметачи додавале одлики за да поголеми перформанси.

==Дизајнерски Ограничувања==

===фон Нојманово тесно грло===

Заедничката магистрала помеѓу програмската меморија и податочната меморија води кон т.н фон Нојманово тесно грло, ограничен проток (податочен трансфер) помеѓу обработувачот и меморијата во споредба со количината на меморија. Бидејќи една магистрала може да пристапи во една од две класи на меморија истовремено, протокот е понизок од ратата при што може обработувачот да работи. Ова сериозно ја лимитира делотворната обработувачкка брзина при големи количини на податоци. Обработувачот континуирано е присилен да почека за потребните податоци да бидат префрлени од меморијата. Бидејќи обработувачкката брзина и мемориската големина се имаат зголемено многу побрзо отколку протокот помеѓу нив, bottleneck-от е настанат повеќе како проблем, проблем кој повеќе се зголемува со секоја нова генерација на обработувачи.

Дон Нојмановото тесно грло е опишано од Џон Бакус во неговото предавање во 1977 на Тјриновата награда. Според Бакус:

  *Сигурно мора да има помалку примитивен начин за да се направат големи промени во продавницата отколку туркање на голем број од зборови натака-навака низ тесното грло на фон Нојман. Не само што оваа туба е буквален bottleneck за податочниот собраќај на еден проблем, туку, поважно, тоа е интелектуален bottleneck кој не има нам приврзано на размислувајќи збор-по-збор наместо да не охрабри да размислуваме подолгорочно за големинте концептуални единици за дадената задача. Со ова програмирањето се сведува на детално планирање на оргомниот сообраќај на зборовите низ тесното гро на фон Нојман и многу од тие сообраќајните проблеми не се со самите податоци, туку со тоа каде да ги најдеме.''

### Митигација

Има повеќе познати методи за ублажување на фон Нојмановото тесно грло во перформансите. На пример следните можат да се подобрат во перформанси:
*вметнување на кеш меморија помеѓу обработувачот и главната меморија
*вметнување на посебни кешови или посебни пристапни патеки за податоци и инструкции (т.н Изменетата Харвардска архитектура)
*користење на алгоритми за предвидување на разгранување и логика
*користење на лимитиран обработувачкки стек или дури мемории кои се директно на чипот за да се намали пристапот на меморијата

Проблемот може да биде надминат донекаде со користење на паралелни сметачи, пример. користење на NUMA архитектурата - овој пристап е често користен од суперсметачи. Помалку е јасно дали интелектуалниот bottleneck кој Backus го критикувал се има многу променето од 1977 година. Предложеното решение на Backus немало значајно влијание. Модерното функционално програмирање и објектно-ориентираното програмирање се помалку насочени кон ‘разменување големи количини натака-навака’ отколку претходните јазици како Фортран, но внатрешно, на тоа сè уште сметачите трошат поголем дел од времето; дури и суперсметачите.

Од 1996 година, бенчмарк на паза на податоци има откриено дека три од четири обработувачкки циклуси се поминати чекајќи на меморијата. Истражувачите очекуваат дека зголеменоста на истовремени инструкциски протоци со мулти-тредирање или мултипроцесирање на еден чип ќе го направи bottleneck-ирањето полошо.

### Само-модифицирачки код
На страна од фон Нојмановото тесно грло, програмските модификации може да бидат мошне штетни, ненамерно или од дизајнерска гледна точка. Во некои едноставно складирачки сметачки дизајни, дисфункционална програма може да се оштети самата себеси, другите програми или оперативниот систем, кој би довело до сметачка несреќа. Мемориско заштитување и други форми на контрола на пристап можат обично да заштитат од ненамерна и злонамерна модификација на програма

## Обработувачи кои не користат фон Нојмановата архитектура

Националниот Полупроводник COP8 бил претставен во 1986: тој има Изменета Харвардска архитектура. Reduceron е обид да се создаде обработувач за директна изведба на Функционална Програма. Можеби најчестатат структура што не е на фон Нојман се користи во содржински адресинрана меморија (CAM).

## Наводи

Категорија:Сметачка архитектура