Как работает процессор: от транзистора до программы
Процессор — самое сложное устройство в вашем компьютере, но собрать его можно из очень простых деталей. В этой статье мы пройдём весь путь: от транзистора, который умеет только включать и выключать ток, до программы, которую процессор выполняет команда за командой. А в симуляторе «Компьютер Ершова» этот путь можно пройти на практике — уровень за уровнем.
Транзистор: атом компьютера
Всё начинается с транзистора — крошечного переключателя, у которого есть три вывода. Если на управляющий вывод подать напряжение, транзистор открывается и пропускает ток. Если убрать — запирается, и ток не идёт. Никакой магии: два устойчивых состояния, «включено» и «выключено».
Эти два состояния мы обозначаем цифрами 1 и 0 — логической единицей и нулём. Так рождается двоичный код, на котором говорит вся цифровая техника. Подробнее о том, почему машинный язык состоит из нулей и единиц, читайте в статье «0 и 1: На каком языке говорят машины».
Один транзистор хранит один бит. Из миллиардов таких переключателей собран ваш процессор — но, к счастью, для понимания принципов работы хватает нескольких десятков.
Логические вентили: транзисторы учатся думать
Сами по себе транзисторы бесполезны. Инженеры соединяют их в логические вентили — схемы, которые по правилам решают, что делать с сигналами на входах:
- NOT (НЕ) инвертирует сигнал: 0 → 1, 1 → 0.
- AND (И) выдаёт 1 только когда оба входа равны 1.
- OR (ИЛИ) выдаёт 1, если хотя бы один вход равен 1.
- XOR (исключающее ИЛИ) выдаёт 1, когда входы различаются.
- NAND (И-НЕ) и NOR (ИЛИ-НЕ) — отрицания AND и OR.
Замечательное свойство вентилей: они работают параллельно. Сигнал, изменившийся на входе, мгновенно распространяется по всей схеме — никакой очереди исполнения нет. Именно поэтому процессор умеет обрабатывать миллиарды операций в секунду. Базовые вентили разобраны в статье «Логические вентили И, ИЛИ, НЕ», а их таблицы истинности — в даташитах.
Сумматор: вентили учатся считать
Следующий шаг — арифметика. Чтобы сложить два бита, нужны два вентиля: XOR даёт сумму, AND даёт перенос. Так получается полусумматор. Если добавить третий вход для переноса из младшего разряда — получится полный сумматор, который складывает три бита и выдаёт сумму и перенос.
Соединив восемь полных сумматоров в цепочку, получим 8-битный сумматор — он складывает байты: 01100101 + 00011010 = 01111111. Арифметика выглядит как поразрядная механика, но именно так процессор складывает числа уже десятки лет. Разбор схемы — в статье «Анатомия сумматора».
АЛУ: сердце математики
Сумматор умеет складывать, но процессору нужно больше: вычитать, умножать логические значения, сравнивать. Соберите сумматор, несколько логических вентилей и мультиплексор, который выбирает операцию, — и получится арифметико-логическое устройство (АЛУ).
АЛУ — главный «математик» процессора. Оно принимает два байта и код операции, а выдаёт результат и служебные флаги — например, флаг нуля, по которому процессор решает, выполнять ли условный переход. О конструкции АЛУ — в статье «АЛУ: Сердце математики».
Память: триггеры, регистры, RAM
Логические схемы мгновенно забывают входные сигналы. Чтобы запоминать, нужен элемент с обратной связью — SR-защёлка из двух вентилей, а затем D-триггер, который запоминает один бит по фронту тактового сигнала. Из восьми D-триггеров собирается 8-битный регистр — маленький склад на один байт.
Регистры — сверхбыстрая память процессора. За ними идёт RAM — массив ячеек, адресуемых по номеру. В симуляторе «Компьютер Ершова» RAM — 256 байт, и обратиться к ячейке можно по её адресу. Как защёлки и триггеры превращаются в память — в статьях «Магия обратной связи» и «Регистры: первый байт памяти».
Тактовый генератор: дирижёр оркестра
Схемы работают параллельно и нескоординированно. Чтобы процессор работал как единое целое, нужен общий ритм — его задаёт тактовый генератор. Он выдаёт последовательность импульсов, и каждый импульс («такт») синхронизирует все элементы.
Почему это важно? D-триггеры запоминают значение строго в момент фронта тактового сигнала. Все операции процессора выполняются по тактам: на одном такте схема вычисляет, на следующем — результат «фиксируется» в регистрах. Подробнее — в статьях «Тактовый генератор и D-триггер» и «Временная диаграмма».
Счётчик команд и дешифратор
Программа — это последовательность байтов в памяти. Но откуда процессор знает, какую команду выполнять? За это отвечает счётчик команд (PC) — регистр, который хранит адрес текущей команды. После каждой команды PC увеличивается на единицу, и процессор переходит к следующей. А при команде перехода PC перезаписывается адресом назначения.
Команда — это байт, в котором старшие 4 бита — код операции, а младшие 4 бита — операнд (например, адрес ячейки памяти). Дешифратор превращает код операции в набор управляющих сигналов: «читать память», «включить сложение в АЛУ», «записать в регистр». Так процессор понимает, что делать. Оба устройства разобраны в статьях «Счётчик команд (Program Counter)» и «Дешифратор инструкций».
Шины и память программ
Процессор общается с памятью через шины — пучки проводов. Шина адреса говорит, к какой ячейке обратиться, шина данных переносит сами байты, шина управления — направление операции (чтение или запись). Восемь проводов шины данных переносят один байт за раз.
Классическая схема хранит команды и данные в одной памяти. Гарвардская архитектура, на которой построен компьютер в симуляторе, разделяет их: ROM хранит программу, RAM — данные. Это упрощает и ускоряет работу. Подробнее — в статье «Гарвардская архитектура: Разделяй и властвуй».
Ассемблер: язык процессора
Писать программы сырыми байтами неудобно. Для этого придуман ассемблер — мнемонические обозначения команд. Команда LDA 5 значит «загрузить в аккумулятор значение из RAM[5]», ADD 3 — «прибавить RAM[3]», JZ 7 — «перейти к адресу 7, если аккумулятор равен нулю».
Ассемблер — самый честный язык: каждая строчка программы напрямую управляет железом. Программа на ассемблере выполняется процессором точно так же, как программы на языках высокого уровня — только там перевод на машинный код делает компилятор. Обзор языка — в статье «Ассемблер: самый честный язык программирования» и руководстве по ассемблеру.
Цикл инструкции: как всё работает вместе
Теперь соберём всё воедино. Работа процессора — бесконечный повторяющийся цикл, который называется циклом инструкции:
- Выборка. Счётчик команд выдаёт адрес, память программ возвращает байт команды.
- Декодирование. Дешифратор превращает код операции в управляющие сигналы.
- Исполнение. АЛУ выполняет операцию (например, сложение), память отдаёт или принимает данные.
- Запись результата. Результат фиксируется в регистре-аккумуляторе.
- Переход к следующей. Счётчик команд увеличивается на единицу — и всё повторяется.
В симуляторе «Компьютер Ершова» один такт — половина цикла инструкции: на фронте тактового сигнала происходит выборка и исполнение, на спаде — фиксация результата. Именно поэтому в журнале ассемблера команды появляются на нечётных тактах.
Соберите процессор сами
Теперь, когда вы знаете устройство процессора, самое время собрать его своими руками. В симуляторе логических схем путь пройден за 47 уровней: провод → полусумматор → 8-битный сумматор → D-триггер → АЛУ → процессор с ассемблером → «Змейка» на собственном процессоре. А программа курса покажет, сколько времени занимает каждый этап.
Проверь себя
С чего начинается любая операция процессора?
С чтения команды из памяти программ: счётчик команд даёт адрес, дешифратор расшифровывает опкод.
Зачем процессору тактовый генератор?
Он задаёт общий ритм: за один такт схема успевает «устаканиться», и все блоки срабатывают согласованно.
Почему АЛУ называют сердцем математики?
Всю арифметику и логику (сложение, И, ИЛИ и т. д.) выполняет именно оно; остальная машина доставляет данные к АЛУ и результаты обратно.
FAQ
Сколько транзисторов в процессоре?
В современных процессорах — десятки миллиардов транзисторов. Но принцип работы не изменился с первых 4-битных чипов: транзисторы образуют вентили, вентили — логику, логика — процессор.
Почему процессор так быстро работает?
Во-первых, схемы работают параллельно — все биты обрабатываются одновременно. Во-вторых, тактовая частота современных чипов достигает гигагерц, то есть миллиардов тактов в секунду. На каждый такт приходится часть операции.
С чего начать изучение?
Лучший путь — практика: начните с первого уровня симулятора и параллельно читайте статьи библиотеки. Теория и практика в «Компьютере Ершова» идут рука об руку.