Как работает процессор: от транзистора до программы

Процессор — самое сложное устройство в вашем компьютере, но собрать его можно из очень простых деталей. В этой статье мы пройдём весь путь: от транзистора, который умеет только включать и выключать ток, до программы, которую процессор выполняет команда за командой. А в симуляторе «Компьютер Ершова» этот путь можно пройти на практике — уровень за уровнем.

Схема процессора из уровня «Сердце процессора» в RTL-вьюере
Процессор в RTL-вьюере: схема уровня 40

Транзистор: атом компьютера

Всё начинается с транзистора — крошечного переключателя, у которого есть три вывода. Если на управляющий вывод подать напряжение, транзистор открывается и пропускает ток. Если убрать — запирается, и ток не идёт. Никакой магии: два устойчивых состояния, «включено» и «выключено».

Эти два состояния мы обозначаем цифрами 1 и 0 — логической единицей и нулём. Так рождается двоичный код, на котором говорит вся цифровая техника. Подробнее о том, почему машинный язык состоит из нулей и единиц, читайте в статье «0 и 1: На каком языке говорят машины».

Один транзистор хранит один бит. Из миллиардов таких переключателей собран ваш процессор — но, к счастью, для понимания принципов работы хватает нескольких десятков.

Логические вентили: транзисторы учатся думать

Сами по себе транзисторы бесполезны. Инженеры соединяют их в логические вентили — схемы, которые по правилам решают, что делать с сигналами на входах:

Замечательное свойство вентилей: они работают параллельно. Сигнал, изменившийся на входе, мгновенно распространяется по всей схеме — никакой очереди исполнения нет. Именно поэтому процессор умеет обрабатывать миллиарды операций в секунду. Базовые вентили разобраны в статье «Логические вентили И, ИЛИ, НЕ», а их таблицы истинности — в даташитах.

Сумматор: вентили учатся считать

Следующий шаг — арифметика. Чтобы сложить два бита, нужны два вентиля: 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, если аккумулятор равен нулю».

Ассемблер — самый честный язык: каждая строчка программы напрямую управляет железом. Программа на ассемблере выполняется процессором точно так же, как программы на языках высокого уровня — только там перевод на машинный код делает компилятор. Обзор языка — в статье «Ассемблер: самый честный язык программирования» и руководстве по ассемблеру.

Цикл инструкции: как всё работает вместе

Теперь соберём всё воедино. Работа процессора — бесконечный повторяющийся цикл, который называется циклом инструкции:

  1. Выборка. Счётчик команд выдаёт адрес, память программ возвращает байт команды.
  2. Декодирование. Дешифратор превращает код операции в управляющие сигналы.
  3. Исполнение. АЛУ выполняет операцию (например, сложение), память отдаёт или принимает данные.
  4. Запись результата. Результат фиксируется в регистре-аккумуляторе.
  5. Переход к следующей. Счётчик команд увеличивается на единицу — и всё повторяется.

В симуляторе «Компьютер Ершова» один такт — половина цикла инструкции: на фронте тактового сигнала происходит выборка и исполнение, на спаде — фиксация результата. Именно поэтому в журнале ассемблера команды появляются на нечётных тактах.

Соберите процессор сами

Теперь, когда вы знаете устройство процессора, самое время собрать его своими руками. В симуляторе логических схем путь пройден за 47 уровней: проводполусумматор8-битный сумматорD-триггерАЛУпроцессор с ассемблером«Змейка» на собственном процессоре. А программа курса покажет, сколько времени занимает каждый этап.

Проверь себя

С чего начинается любая операция процессора?

С чтения команды из памяти программ: счётчик команд даёт адрес, дешифратор расшифровывает опкод.

Зачем процессору тактовый генератор?

Он задаёт общий ритм: за один такт схема успевает «устаканиться», и все блоки срабатывают согласованно.

Почему АЛУ называют сердцем математики?

Всю арифметику и логику (сложение, И, ИЛИ и т. д.) выполняет именно оно; остальная машина доставляет данные к АЛУ и результаты обратно.

FAQ

Сколько транзисторов в процессоре?

В современных процессорах — десятки миллиардов транзисторов. Но принцип работы не изменился с первых 4-битных чипов: транзисторы образуют вентили, вентили — логику, логика — процессор.

Почему процессор так быстро работает?

Во-первых, схемы работают параллельно — все биты обрабатываются одновременно. Во-вторых, тактовая частота современных чипов достигает гигагерц, то есть миллиардов тактов в секунду. На каждый такт приходится часть операции.

С чего начать изучение?

Лучший путь — практика: начните с первого уровня симулятора и параллельно читайте статьи библиотеки. Теория и практика в «Компьютере Ершова» идут рука об руку.

Собрать процессор бесплатно →