Кіріспе

Код пен деректерді ортақ шина бөлісетін компьютерлік архитектура.

Фон Нейман архитектурасы – сондай-ақ Фон Нейман моделі немесе Принстон архитектурасы деп те аталады. Бұл 1945 жылы Джон фон Нейман және басқалар EDVAC есебінің бірінші нұсқасында сипаттаған компьютерлік архитектура. «Фон Нейман архитектурасы» термині кез келген сақталған бағдарламалық компьютерге қатысты қолданылады, онда нұсқауды алу және деректермен операция бір уақытта жүзеге аспайды (өйткені олар ортақ шинаны пайдаланады). Бұл Фон Нейманның тұйыққа тірелуі деп аталады, ол тиісті жүйенің өнімділігін шектейді. Фон Нейман архитектурасы Гарвард архитектурасынан қарапайым (онда жадтан оқу және жазу үшін арналған адрес және деректер шиналарының бір жиынтығы, ал нұсқауларды алу үшін басқа жиынтығы бар). Сақталған бағдарламалық компьютер бағдарламалық нұсқаулар мен деректерді кодтау үшін бірдей негізгі механизмді қолданады, бұл дискретті қосылымдар немесе нұсқауларды орындау үшін бекітілген басқару схемасы сияқты механизмдерді пайдаланатын жобалардан өзгеше. Сақталған бағдарламалық компьютерлер 1940 жылдардағы Коллос және ENIAC сияқты қолмен қайта конфигурацияланатын немесе белгілі бір функцияға бағытталған компьютерлерге қарағанда жетістік болды. Олар түрлі функционалдық блоктар арасында деректер мен басқару сигналдарын бағыттау үшін коммутаторларды орнату және қосымша кабельдерді қосу арқылы бағдарламаланды. Қазіргі заманғы компьютерлердің көпшілігі деректерді және бағдарламалық нұсқауларды кодтау және сақтау үшін бірдей аппараттық механизмді қолданады, бірақ процессор мен жад арасында кэштерді пайдаланады, ал процессорға жақын кэштерде нұсқаулар мен деректер үшін бөлек кэштер болады, сондықтан көптеген нұсқаулар мен деректерді алу операциялары бөлек шиналарды (бөлінген кэш архитектурасы) қолданады.

Тарих

Алғашқы есептеу машиналарында бекітілген бағдарламалар болған. Кейбір өте қарапайым компьютерлер әлі де осы конструкцияны қарапайымдық үшін немесе оқыту мақсатында пайдаланады. Мысалы, үстел калькуляторы (принцип бойынша) – бұл бекітілген бағдарламалық компьютер. Ол қарапайым математикалық амалдарды орындай алады, бірақ мәтіндік редакторды немесе ойындарды іске қоса алмайды. Бекітілген бағдарламалық машинаның бағдарламасын өзгерту үшін машинаны қайта сымдау, құрылымын өзгерту немесе қайта жобалау қажет. Алғашқы компьютерлер белгілі бір міндетті орындау үшін "бағдарламаланған" емес, "жоспарланған". "Қайта бағдарламалау" – мүмкін болған жағдайда – еңбекке толы процесс болды, ол ағын схемаларымен және қағазға жазылған жазбалармен басталып, содан кейін егжей-тегжейлі инженерлік жобалар жасалып, одан кейін машинаны физикалық түрде қайта сымдау және қайта құрастырудың көбінесе қиын процесі жүзеге асырылды. ENIAC-та бағдарламаны орнату және қателерді жою үш аптаға созылуы мүмкін еді. Сақталатын бағдарламалық компьютер ұсынылғанда бұл өзгерді. Сақталатын бағдарламалық компьютер өз құрамында нұсқаулар жиынтығын қамтиды және есептеудің мәліметтерін көрсететін нұсқаулар жиынтығын (бағдарламаны) жадында сақтай алады. Сақталатын бағдарламалық конструкция кодты өздігінен өзгертуге де мүмкіндік береді. Мұндай мүмкіндікті жасаудың алғашқы себептерінің бірі – бағдарламаның нұсқаулардың адрестік бөлігін арттыру немесе басқаша өзгерту қажеттілігі болды, бұл бастапқы конструкцияларда операторлар қолмен жасауы керек еді. Индекстік тіркегіштер мен тікелей емес адрестеу машина архитектурасының қалыпты ерекшеліктері болған кезде бұл маңыздылығы азайды. Тағы бір қолданылуы – бірден адрестеуді пайдаланып, жиі қолданылатын деректерді нұсқаулар ағынына ендіру.

Қуаттары

Кең ауқымда нұсқауларды дерек ретінде қарастыру мүмкіндігі құрастырушыларды, компиляторларды, байланыстырғыштарды, жүктегіштерді және басқа да автоматтандырылған бағдарламалау құралдарын жасауға мүмкіндік береді. Ол "бағдарлама жазатын бағдарламаларды" жасауға мүмкіндік береді. Бұл фон Нейман архитектурасына негіделген машиналардың өзін-өзі қамтамасыз ететін күрделі есептеу экожүйесінің дамуына ықпал жасады. Кейбір жоғары деңгейлі тілдер фон Нейман архитектурасын пайдаланып, орындалатын кодты орындау кезінде манипуляциялаудың абстрактілі, машинаға тәуелсіз әдісін ұсынады (мысалы, LISP) немесе орындалу уақытындағы ақпаратты пайдаланып, дереу компиляцияны жасайды (мысалы, Java виртуалды машинасына орналастырылған тілдер немесе веб-браузерлерге енгізілген тілдер). Шағын ауқымда BITBLT сияқты кейбір қайталанатын операциялар немесе пиксел және vertex шейдерлері жалпы мақсаттағы процессорларда дереу компиляциялау әдістерімен үдетілуі мүмкін. Бұл өзін-өзі өзгертетін кодтың танымал түрінің бірі болып табылады.

Алғашқы сақталған бағдарламалы компьютерлер

Келесі хронологиядағы күндерді дұрыс реттеп табу қиын. Кейбір күндер тесттік бағдарламаны бірінші рет іске қосуға, ал кейбіреулері компьютерді алғаш көрсетуге немесе аяқтауға, ал енді біреулері алғашқы жеткізілімге немесе орнатуға қатысты. IBM SSEC нұсқауларды дерек ретінде өңдеуге қабілетті болды және 1948 жылдың 27 қаңтарында көпшілік алдында көрсетілді. Бұл мүмкіндік АҚШ патентінде жарияланды. Дегенмен, ол толыққанды электрондық емес, ішінара электромеханикалық болды. Іс жүзінде, оның жады шектеулі болғандықтан нұсқаулар қағаз лентадан оқылды. Эндрю Бут пен Кэтлин Буттың Лондон университетінің Біркбек колледжінде әзірлеген ARC2 компьютері 1948 жылдың 12 мамырында ресми түрде іске қосылды. «Манчестер Бэби» сақталған бағдарламаны іске қоса алған алғашқы толық электрондық компьютер болды. 1948 жылдың 21 маусымында ол қарапайым бөлу бағдарламасын және екі санның өзара жай екенін көрсететін бағдарламаны іске қосып, содан кейін 52 минут бойы сан табу бағдарламасын іске қосты. ENIAC бастапқы оқу-сақтау бағдарламалық компьютері ретінде (программалық ROM үшін Функционалдық кестелерді пайдалана отырып) жаңартылды және 1948 жылдың 16 қыркүйегінде Адель Голдстайнның фон Нейман үшін жазған бағдарламасын іске қосып көрсетілді. БИНАК 1949 жылдың ақпан, наурыз және сәуір айларында бірнеше сынақ бағдарламаларын іске қосты, бірақ толыққанды аяқталуы 1949 жылдың қыркүйегіне дейін күтілді. «Манчестер Mark 1» «Бэби» жобасының негізінде құрылды. Mark 1-дің аралық нұсқасы 1949 жылдың сәуірінде бағдарламаларды іске қосу үшін қолжетімді болды, бірақ ол 1949 жылдың қазанында ғана аяқталды. EDSAC өзінің алғашқы бағдарламасын 1949 жылдың 6 мамырында іске қосты. EDVAC 1949 жылдың тамызында жеткізілді, бірақ 1951 жылға дейін тұрақты жұмыс істеуге кедергі келтіретін мәселелер болды. CSIR Mk I өзінің алғашқы бағдарламасын 1949 жылдың қарашасында іске қосты. SEAC 1950 жылдың сәуірінде көрсетілді. Pilot ACE өзінің алғашқы бағдарламасын 1950 жылдың 10 мамырында іске қосты және 1950 жылдың желтоқсанында көрсетілді. SWAC 1950 жылдың шілдесінде аяқталды. Whirlwind 1950 жылдың желтоқсанында аяқталды және 1951 жылдың сәуірінде нақты қолданысқа енгізілді. Алғашқы ERA Atlas (кейіннен коммерциялық ERA 1101/UNIVAC 1101) 1950 жылдың желтоқсанында орнатылды.

Эволюция

1960 және 1970 жылдардағы онжылдықтар бойы компьютерлер көбінесе кішірейіп, жылдамдады, бұл олардың архитектурасының өзгеруіне алып келді. Мысалы, жадқа бейімделген I/O (кіріс-шығыс) құрылғыларын жад сияқты қарастыруға мүмкіндік береді. Бір жүйелік шинаны пайдаланып, төмен құнмен модульдік жүйе құруға болады. Бұл кейде архитектураны «жетілдіру» деп аталады. Келесі онжылдықтарда қарапайым микроконтроллерлер шығынды және көлемді азайту үшін модельдің кейбір мүмкіндіктерін қысқартатын. Ал үлкен компьютерлер жоғары өнімділікке қол жеткізу үшін қосымша мүмкіндіктермен жабдықталды.

Фон Нойманның бөтелкесі

Бағдарламалық жад пен деректер жады арасындағы ортақ шина фон Нейманның тұйыққа тірелуіне (бөтелкесіне) әкеледі, яғни орталық процессор (CPU) пен жад арасындағы шектелген өнімділікке (деректерді беру жылдамдығына) жад көлемімен салыстырғанда. Бір шинаның бір уақытта екі жад класының біреуіне ғана қол жеткізе алуы себебімен, өнімділік CPU жұмыс істей алатын жылдамдықтан төмен болады. Бұл, егер CPU үлкен көлемдегі деректерді минималды өңдеумен орындау қажет болса, тиімді өңдеу жылдамдығын күрт шектейді. CPU қажетті деректерді жадтан алу немесе жадқа салу үшін үнемі күтуге мәжбүр. CPU жылдамдығы мен жад көлемі олардың арасындағы өнімділікке қарағанда әлдеқайда жылдам өскендіктен, тұйыққа тірелу мәселесі күшейді, және әрбір жаңа CPU буынымен оның ауырлығы артады. Фон Нейманның тұйыққа тірелуі туралы Джон Бэкус 1977 жылғы ACM Тьюринг сыйлығының лекциясында айтқан. Бэкус айтқандай:

Дүкенде үлкен өзгерістер жасау үшін, фон Нейманның тұйыққа тірелуі арқылы көптеген сөздерді алға-артқа итеруден гөрі, әлдеқайда жетілдірілген тәсіл болуы керек. Бұл құбыр тек проблеманың дерек ағыны үшін ғана нақты тұйыққа тірелу емес, сонымен қатар, маңыздырақсы, бұл бізді қолдағы міндеттің үлкен тұжырымдамалық бірліктерімен ойлауға шақырудың орнына, бір сөзбен ойлауға байланыстырып ұстаған интеллектуалды тұйыққа тірелу. Осылайша, бағдарламалау – негізінен фон Нейманның тұйыққа тірелуі арқылы сөздердің орасан зор ағынын жоспарлау және егжей-тегжейлі сипаттау, ал осы ағынның көп бөлігі маңызды деректердің өзіне емес, оны қайдан табуға қатысты.

Өзін-өзі өзгертетін код

Фон-Нойманның бөтелке тұсынан басқа, бағдарламаға енгізілген өзгерістер кездейсоқ немесе қасақана түрде зиянды болуы мүмкін. Кейбір қарапайым сақталатын бағдарламалық компьютерлерде, қате жұмыс істейтін бағдарлама өзін, басқа бағдарламаларды немесе операциялық жүйені зақымдап, компьютердің істен шығуына себеп болуы мүмкін. Дегенмен, бұл мәселе шекаралық тексеруі жоқ стандартты бағдарламаларға да қатысты. Жадты қорғау және түрлі қол жеткізу бақылаулары көбінесе бағдарламаны кездейсоқ және қасақана өзгерістерден сақтайды.