Микропроцессоры: эволюция вычислений с запрограммированной памятью
В ранние дни вычислительной техники пионеры вроде Алан Тьюринга и Джон фон Нейман осознали, что по-настоящему полезная машина должна делать больше, чем просто выполнять список команд — она должна уметь хранить, извлекать и модифицировать данные в том же пуле памяти. Этот инсайт привел к концепции компьютера с запрограммированной памятью (stored-program computer).
Теоретическая машина Тьюринга полагалась на последовательно-доступную ленту для хранения как инструкций программы, так и данных. Контрольная схема читала ленту, выполняла операции и перезаписывала результаты обратно на ленту или двигала ленту для чтения новых данных. Современные системы заменяют эту ленту на оперативную память с произвольным доступом (ОЗУ/РАМ), достигая той же цели с гораздо большей скоростью и гибкостью.
Полезная аналогия исходит из раннего автоматического управления станками. Системы открытого цикла или числового управления (NC) управляли токарным или фрезерным станком, следуя инструкциям, закодированным как дырки в бумажной ленте. Станок двигался слепо, следуя ленте без осведомленности о состоянии заготовки.
Поскольку устройство было «слепо» к окружению, оно не могло компенсировать изменения вроде термического расширения металла или износа инструмента. Программист также должен был предвосхитить каждую возможную последовательность инструкций, так как лента была только для чтения, а у машины не было внутренней памяти для отслеживания своего состояния.
Переход к конечному автомату (FSM) дал инструменту рудиментарную память: возвращая некоторые биты данных обратно в адресную логику, система могла запоминать простые состояния вроде «смазка включена» или «инструмент в позиции». Но это все еще не давало истинной гибкости.
Прорыв пришел с числовым управлением с замкнутым циклом (CNC), где программа могла писать новые данные в перезаписываемую память (ОЗУ). Система управления могла тогда записывать, что она сделала, и адаптироваться к изменениям, обнаруженным датчиками — почти как токарь, делающий пометки на черновике для последующего обращения.
Ученые-информатики давно мечтают о машинах, способных модифицировать свой собственный код, отражая то, как человеческий мозг укрепляет синапсы через опыт. Для возможности таких самомодифицирующихся программ исполняемый код должен находиться в той же перезаписываемой памяти, что хранит данные — идея, остающаяся на переднем крае исследований до сегодняшнего дня.
Большинство ПО все еще следует фиксированным последовательностям инструкций, изменяя только отдельное поле данных. Для истинной поддержки модели запрограммированной памяти нам нужно больше, чем FSM; нам нужно перезаписываемая память, блок обработки данных и сложный контроллер.
Перезаписываемая память легко предоставляется статическими или динамическими чипами ОЗУ — доступными и быстрыми. Логические операции выполняются Арифметико-логическим устройством (АЛУ), способным выполнять арифметические и булевы функции.
Блок управления (Control Unit) оркестрирует движение данных между памятью, АЛУ и внешними устройствами. Он использует тристайтовые буферы для маршрутизации данных по шинам и логику декодирования для перевода двоичных кодов инструкций в действия.
Примеры инструкций: «Сложить значение по адресу 0010 со значением по адресу 1101», или «Вычислить четность байта по адресу 0111». Отображение из двоичных кодов в операции произвольно, как и ранний стандарт ASCII, хотя наборы инструкций обычно специфичны для производителя.
Когда перезаписываемая память, АЛУ и Блок управления интегрированы — часто на одном кристалле — они образуют процессор. Процессор с минимальной внешней памятью — микропроцессор; в комплекте с цепями управления шинами — Центральный Процессор (ЦП/CPU).
Работа ЦП инкапсулирована в цикле выборка/исполнение (fetch/execute). Счетчик команд (program counter) хранит адрес следующей инструкции. Блок управления считывает этот адрес в адресную шину, извлекает инструкцию из ОЗУ и сохраняет её во временном регистре.
Если инструкция требует операндов, Блок управления инициирует дополнительные доступы к памяти, маршрутизируя полученные данные в регистры АЛУ. АЛУ затем выполняет запрошенную операцию, помещая результат в аккумулятор. Наконец, счетчик команд инкрементируется, и цикл повторяется.
Микропроцессор (CPU) -------------------------------------- | ** Счетчик команд ** | | (инкрементирует значение адреса, | | отправляемое во внешнюю память | | для выборки следующей инструкции) |==========> Адресная шина | | (к памяти ОЗУ) -------------------------------------- | ** Блок управления ** |<=========> Шина управления | (декодирует инструкции, прочитанные | | из программы в памяти, разрешает | | поток данных к/из АЛУ, внутренних | | регистров и внешних устройств) | (к всем устройствам, делящим | | адресную и/или данные шины; | | арбитрирует все шины) -------------------------------------- | ** Арифметико-логическое устройство (АЛУ) ** | | (выполняет все математические | | вычисления и булевы функции) | -------------------------------------- | ** Регистры ** | | (малые перезаписываемые памяти для | | хранения кодов инструкций, кодов | | ошибок, данных АЛУ и т.д.; | | включает «аккумулятор») |<=========> Шина данных | | (из памяти ОЗУ и других | | внешних устройств) --------------------------------------
Даже простейшие операции требуют множества микро-шагов. Сложная арифметика вроде возведения в степень включает повторные итерации базовых функций. Подумайте о тысячах циклов, которые графический движок летного симулятора должен выполнить для обновления дисплея каждый кадр.
Чистая скорость цикла выборка/исполнение делает это выполнимым. Некоторые дизайны встраивают маленькую программу — называемую микрокодом (microcode) — во внутреннее ПЗУ. Микрокод обрабатывает под-шаги сложных операций, позволяя программисту выдавать одну высокоуровневую инструкцию вместо детализации каждого шага.
Таким образом, процессор содержит процессор: программа, работающая внутри программы, упрощающая разработку с сохранением производительности.
Промышленные технологии
- Понимание сетевых протоколов: от физического уровня к продвинутому арбитражу
- Почему важна цифровая память
- Основы цифровой памяти: адресация, доступ и волатильность
- Понимание ROM, PROM, EPROM и EEPROM: дизайн, программирование и идентификация
- Полные данные по ОУ: даташиты National Semiconductor и CA3130
- Освоение типов данных в Python: практическое руководство
- Данные-ориентированное производство: раскрытие эффективности, экономии затрат и инноваций
- Типы данных в C: полное руководство по целочисленным, вещественным и производным типам
- Объединения в C (union): эффективное использование памяти для разных типов данных
- Динамическое управление памятью в C: malloc, calloc, realloc, free