История
Современные компьютеры устроены в соответствии с архитектурой Джона фон Неймана
Исследовательская группа в 1940-х думала над тем, как же построить электронный вычислитель
К тому времени уже сделали несколько больших компьютеров (ENIAC — Electronic Numerical Integrator and Computer)
ENIAC был большой и десятичный, то есть считал в десятичных разрядах, которые были сделаны на основе все тех же двоичных логических схем
На нем было множество кнопочек и рычажков, и когда вы собирались на нем что-нибудь посчитать, вы сначала писали программу на бумажке (много человек в течение нескольких недель писали инструкции для тех, кто потом нажимал на кнопочки и рычажки).
Таким образом, компьютер переконфигурировался, и получалсь новая электронно-вычислительная машина (ЭВМ), которая умела исполнять какую-то новую программу
(Современные компьютеры, очевидно, на это не похожи)
Что придумала группа во главе с фон Нейманом? (и что осталось с нами до сих пор)
- цифровое кодирование — компьютеры все еще двоичные
Группа в МГУ придумала троичный компьютер Сетунь. Каждую элементарную единицу информации — трит (то есть ячейку не с двумя, а с тремя состояниями) — было проще всего сделать из двух бит и не использовать какое-то одно из четырех состояний. Таким образом, компьютер Сетунь называли "троичным" условно
- у компьютера есть память
Память состоит из конечного количества одинаковых ячеек, и в этих ячейках лежат какие-то последовательности бит
- память адресуемая
У каждой ячейки есть номер, мы можем по номеру добыть значение из этой ячейки или положить туда новое значение
- все, с чем оперирует компьютер (данные/программы) лежит в этой памяти (оперативная память/RAM/ОЗУ)
Посмотрев на ячейку памяти, мы увидим какую-то последовательность бит, но вообще ничего не сможем о ней сказать (команда/число/целое число). Интерпретация 0 и 1, лежащих в памяти, лежит выше уровнем. Память не тегированная
- помимо памяти в компьютере есть арифметическо-логическое устройство и контрольное устройство, которое за ним следит
У этих устройств есть ограниченное количество инструкций, которые они могут выполнять
АЛУ может что-нибудь складывать, умножать, вычитать; добыть какое-то значение из памяти, сложить что-нибудь обратно в память
Инструкции лежат, каким-то образом закодированные, в той же самой памяти
Инструкции выполняются последовательно:
Взяли одну инструкцию
Декодировали ее
Посмотрели, что она требует от нас сделать
Выполнили (сложили/умножили/...)
Положили результат, куда сказано в инструкции
Взяли следующую инструкцию
Хватит ли этого, чтобы провести произвольные вычисления? Нет
Последовательность инструкций закончится, компьютер свалится с конца этой последовательности инструкций, и на этом все закончится
Кроме того, "если так посмотреть на эту картинку", то порядок исполнения никак не зависит от данных
Есть какие-то инструкции про то, какие данные где взять и куда положить