Видео: YouTube
Особенностью первых ЭВМ по принципам фон Неймана было то, что программа вычислений была записана в память этой машины и могла быть так же легко изменена, как и данные, с которыми проводились вычисления.
Архитектура фон Неймана: состав и принципы
В состав этого вычислителя входят регистры для промежуточного хранения данных.
Зачастую эти регистры называют регистровым файлом. Арифметико-логическое устройство служит для выполнения арифметических операций над данными. Управляет всеми процессами дешифратор команд. Так его чаще всего называют. Еще он имеет название декодер команд. По сути это более корректно, потому что команда в виде двоичного кода поступает из памяти, на выходе появляются двоичный код, управляющий всеми внутренними блоками. Необходимо отметить, что единый набор шин служит для передачи адреса, данных и управляющих сигналов как к памяти, так и периферийному оборудованию, через которое осуществляется ввод и вывод данных. Рассмотренная архитектура носит название архитектура фон Неймана. Еще одно название — Принстонская архитектура.
Гарвардская архитектура: принципы и особенности, отличия от архитектуры фон Неймана
В отличии от нее гарвардская архитектура предусматривает разделение программы и данных на разные физические устройства памяти, что позволяет организовать к ним доступ разными наборами шин. Это, в свою очередь, позволяет вести операции с данными и командами одновременно и независимо друг от друга. Кроме того, никто не мешает организовать доступ к оборудованию обмена данными еще через один набор шин. Основные части вычислителя остаются теми же.
Гарвардская архитектура несколько удорожает конструкцию вычислителя, делает ее менее гибкой, однако, основным преимуществом ее становится скорость обработки данных.
Кэш память процессора: уровни и структура
На рисунке изображена многоядерного процессора. Это когда на одной интегральной схеме расположены несколько процессоров. Зеленым цветом показаны ядра процессоров. Желтым цветом показана память программ и память данных у каждого ядра. Память в каждом из ядер процессора называется кэш памятью первого уровня. Во-первых, она обладает меньшей задержкой доступа к данным. Во-вторых, ее можно разделить на память программ и память данных, что ускорит работу процессора. Поскольку быстрая память имеет сложную конструкцию ячеек и занимает большую площадь, то разместить ее в большом количестве внутри ядра процессора не получается. Кэш память первого уровня имеет очень небольшой размер.
Современные процессоры общего назначения объединяют в себе достоинства двух архитектур. Гарвардская дает скорость, принстонская — гибкость. Не важно, какой объем в программе занимают команды и данные по отдельности. Память для них общая. На рисунке оранжевым цветом показана кэш память второго уровня, общая для команд и данных. В случае необходимости доступа ядра процессора к новой порции данных, она подкачивается в кэш первого уровня из кэша второго уровня. Механизм, который это обеспечивает называется страничное управление памятью. О нем поговорим позднее. Коммутатор обеспечивает разделение во времени обращений ядер процессора к общей кэш памяти второго уровня.
Связь процессора и оперативной памяти
Теперь рассмотрим место оперативной памяти. Как мы помним, процессор работает с ней через контроллер, который на рисунке изображен в нижнем правом углу. Он обеспечивает сложную процедуру доступа к командам и данным, расположенным в оперативной памяти. Довольно большие задержки доступа объясняются именно многоступенчатым механизмом записи и чтения из этой памяти. Между кэш памятью второго уровня и оперативной памятью также происходит перекачка страниц при необходимости. По сравнению с кэш памятью первого уровня на ядре процессора, доступ к оперативной памяти это как поездка на склад за данными в самый дальний тупик. Довольно большая масса программистов рассматривает работу программы как операции с данными в длинном линейном пространстве. И они по своему правы. Аппаратура процессора, конечно же, вас от таких подробностей уберегает, но незнание таких простых вещей способствует написанию довольно медленного и неоптимизированного приложения. Если в большинстве случаев это не так важно, то в специфических областях, таких как, например, разработка игр, работа без задержек это солидное конкурентное преимущество. Теперь рассмотрим конструкцию простейшего ядра процессора.
Структура ядра простейшего микропроцессора
Арифметико-логическое устройство
Часть аппаратуры связано с выполнением арифметических и логических операций. На рисунке изображен регистр, назовем его аккумулятор. Он связан с одним из входов арифметико-логического устройства, которое, в свою очередь, связано с памятью данных. Пара мультиплексоров управляет потоками прохождения данных между всеми узлами. Такая конструкция позволяет совершать ряд полезных операций. Первой операцией является загрузка числа в аккумулятор.
Это довольно просто. Управление мультиплексора установлено в единицу, значит на вход регистра пройдут данные с нижнего входа мультиплексора. Данные запишутся в аккумулятор по переднему фронту тактового импульса. Еще одной операцией можно загрузить аккумулятор числом из памяти данных. Это тоже не сложно. На шину адреса памяти выставляется номер ячейки с нужным числом. Число выставляется на выход памяти. На два управления мультиплексорами выставляются нули чтобы данные проходили через верхние входы. По тактовому сигналу происходит запись числа в регистр.
Еще такая конструкция способна совершить арифметические операции.
Сложение или вычитание, в зависимости от сигнала управления арифметико-логическим устройством. Число, изъятое из памяти складывается или вычитается из содержимого аккумулятора. Результат сложения или вычитания записывается обратно в аккумулятор по тактовому импульсу. Наконец, операция сохранения содержимого аккумулятора в памяти. Адрес нужной ячейки выставляется на шину адреса. На линию разрешения записи памяти ставится единица. По тактовому импульсу содержимое аккумулятора записывается в память.
Устройство выборки команд
Рассмотрим конструкцию, задача которой производить выборку команд из памяти программ.
Она состоит из регистра номера текущей команды. PC. Арифметико-логического устройства, которое прибавляет к содержимому регистра единицу. Память программ и мультиплексор, управляющий потоком данных. Такая конструкция позволяет на выход памяти программ выставлять двоичный код очередной команды.
На вход регистра постоянно выставляется число на единицу больше чем там находится. Это число и есть адрес очередной инструкции. Каждый новый тактовый импульс вызывает появление новой команды (инструкции) на выходе памяти программ. Если на управление мультиплексором подать единицу, то по тактовому импульсу в регистр можно записать число, которое будет совершенно произвольным адресом новой команды.
Набор инструкций процессора
Итого сколько разных команд способно выполнить ядро процессора? Составим некоторый документ, называемый набором инструкций процессора. Для простоты будем считать, что команда это восьмибитное двоичное слово. Выделим в этом слове три старших бита. Они отвечают за то какая инструкция (команда) будет выполняться. Эти три бита называются кодом операции. Остальные пять бит выделим под так называемый операнд. В операнде код вспомогательной информации.
Пусть для сложения код операции — 000. Операндом является адрес ячейки, с содержимым которой необходимо сложить содержимое аккумулятора. Результат будет помещен в аккумулятор. Эти восемь бит образуют машинный код команды. Сокращенная запись команды при помощи букв, более удобная для программиста называется мнемоникой.
Код операции вычитания это 001. Операндом также является адрес ячейки памяти. Содержимое ячейки вычитается из аккумулятора и результат записывается в аккумулятор. Код операции загрузки аккумулятора из памяти это 010. В операнде адрес ячейки, содержимое которой заносится в аккумулятор. Код операции сохранения содержимого аккумулятора это 011. Операндом является адрес ячейки памяти, в которую сохраняется содержимое аккумулятора. Операция перехода на новый адрес команды имеет код 100. Операндом является адрес новой команды. Команда загрузки числа в аккумулятор непосредственно из инструкции имеет код 110. Операндом является число, которое занесется в аккумулятор. Последней командой будет завершение выполнения программы. Она имеет код 111 и не будет иметь операнда. То есть содержимое пяти бит операнда безразлично и ни на что не влияет.
Схема ядра процессора
Перейдем к полной схеме ядра процессора.
В верхней части устройство выборки команд. В нижней части арифметико-логическое устройство. Управляет всеми процессами внутри ядра дешифратор команд. На вход дешифратора команд приходят команды в виде восьмибитных двоичных слов. Каждая команда своим кодом команды и операндом вызывает изменение состояния управляющих линий, изображенных красным цветом. Как уже говорилось, простейший кодопреобразователь способен решить эту задачу. Он преобразует двоичный код на входе в другой двоичный код на выходе.
Итак, по архитектуре процессоры делятся на принстонскую и гарвардскую. Принстонская также называется архитектурой фон Неймана. Современные процессоры общего назначения используют достоинства обеих архитектур. Для высокоскоростной работы с данными используется кэш память процессора, делящаяся на память команд и память данных. Большие массивы данных и программ перекачиваются для хранения в кэши последующих уровней и в конце концов в оперативную память, расположенную отдельно от процессора на материнской плате компьютера.