Устройство и принцип работы микропроцессора
В 1991 году свет увидела изумительная научно-популярная книга под названием «Энциклопедия профессора Фортрана», которая в форме комиксов — в понятном для детей младшего школьного возраста виде — объясняет устройство персонального компьютера, его периферийного оборудования, а также всё, что связано с программным обеспечением. Эта книга, популярная и сегодня, стала отправной точкой освоения компьютерной грамотности для многих, кто сейчас занимается серьёзной работой в области информационных технологий.
Автор неспроста начал с упоминания этой книги: одна из наиболее запомнившихся ему иллюстраций была посвящена именно центральному процессору компьютера. Текст иллюстрации сообщал, что центральный процессор — самый главный элемент компьютера, управляющий всеми его устройствами. Нарочито примитивное объяснение (книга-то всё-таки для детей) всё же не лишено смысла.
Время чтения: 16 минут
Микропроцессоры? Это очень просто!
В статье будут рассмотрены понятия: разрядность, тактовая частота, кэш-память и многие другие. Вторая её часть будет посвящена истории появления и развития микропроцессоров. Автор статьи ни в коем случае не хочет преподать читателю урок истории, но если пройтись шаг за шагом от первого микропроцессора к наиболее совершенным на сегодня, это поможет легче понять устройство и принцип работы довольно сложного электронного прибора.
Понятия, прямо относящиеся к микропроцессорам
Устройство управления (УУ) — основная часть процессора, которая декодирует и выполняет инструкции, а также формирует управляющие сигналы для всех основных блоков процессора и компьютера.
Декодер инструкций преобразует машинный код программы (полученный с помощью Ассемблера или других языков программирования) в форму, понятную процессору.
Арифметико-логическое устройство (АЛУ) — блок процессора, работающий под управлением УУ. Он выполняет арифметические и логические операции.
Регистры процессора — сверхбыстрая память, расположенная прямо на кристалле. В них временно хранятся данные, необходимые при выполнении инструкций.
Инструкции — элементарные команды процессора. Это могут быть арифметические операции, чтение и запись данных в регистры, работа с портами ввода/вывода, переходы к другим инструкциям и т. д. Любая программа состоит из набора таких инструкций, сформированных на языке программирования (например, Ассемблере).
Ассемблер — низкоуровневый язык программирования, в котором программа состоит непосредственно из инструкций процессора. Он сложен в разработке, но позволяет добиться максимальной эффективности и производительности.
Шина адреса — набор линий, по которым процессор передаёт адрес ячейки памяти для чтения или записи. Её разрядность определяет максимальный объём адресуемой памяти (например, 32-битные процессоры ограничены примерно 4 ГБ).
Шина данных — линии передачи между процессором, памятью и устройствами ввода/вывода. Её разрядность определяет объём информации, передаваемый за один такт.
Тактовая частота — число тактов (циклов), выполняемых за одну секунду. Одна инструкция может выполняться за один такт (в RISC-процессорах) или за несколько (в CISC-процессорах).
CISC-процессоры появились раньше и имеют более «человеко-понятный» набор инструкций для Ассемблера. RISC-процессоры появились позже и используют более простой и оптимизированный набор, что повышает производительность.
Разрядность — количество данных, обрабатываемых процессором за один такт.
Кэш-память — сверхбыстрая память между регистрами и оперативкой для хранения часто вызываемых данных. Делится на уровни: L1, L2 и L3. L1 — самая быстрая, но с минимальным объёмом; L3 — самая медленная, но ёмкая.
Гарвардская архитектура — подход, при котором память для инструкций и данных физически разделена, как и каналы их передачи. Это уменьшает конфликты доступа и повышает скорость обработки. Чаще всего используется в микроконтроллерах и сигнальных процессорах. Существуют также гибридные варианты с архитектурой фон Неймана.
Архитектура фон Неймана — модель, в которой инструкции и данные хранятся в одной общей памяти и используют один канал передачи. Это упрощает устройство системы, но снижает производительность. Большинство современных процессоров используют именно эту или гибридную архитектуру.
Технологический процесс (техпроцесс) — совокупность технологических норм, определяющих размеры транзисторов в микропроцессоре. Чем меньше техпроцесс, тем большее число транзисторов размещено на кристалле. Выше «скорость», ниже энергопотребление и тепловыделение.
Принцип работы микропроцессора
Микропроцессоры семейств x86 и x86-64 являются прямыми потомками «классического» Intel 8086, поэтому его удобно рассматривать как основу для понимания принципов работы современных решений.
BIU отвечает за взаимодействие процессора с внешними компонентами. Он реализует 16-разрядную двунаправленную шину данных и 20-разрядную адресную шину. В его задачи входят все операции внешнего обмена:
- формирование адреса для чтения и записи в память или порты ввода/вывода;
- выборка инструкций из памяти по заданному адресу;
- считывание данных из памяти и периферии;
- запись информации в память или устройства ввода/вывода;
- поддержка очереди инструкций;
- работа с преобразованием и смещением адресов.
Для выполнения этих функций блок содержит очередь инструкций (Instruction Stream Byte Queue), сегментные регистры (ES, CS, SS, DS), указатель инструкции (IP), сумматор адресов (Σ), а также управляющую логику шины.
Очередь инструкций
Чтобы ускорить выполнение программы, интерфейс шины заранее считывает из памяти несколько байт следующих инструкций — обычно до шести. Эти байты не сразу попадают в устройство управления (УУ), а сохраняются в специальной группе регистров, которая называется очередью инструкций.
Благодаря этому УУ может брать следующую инструкцию из очереди, пока текущая ещё выполняется. Например, выполняется операция умножения. В архитектуре 8086 операнды обычно уже находятся в регистрах процессора, но сама операция требует около 100 тактов. Это довольно долго, и без дополнительных механизмов процессор простаивал бы.
Пока выполняется такая инструкция, интерфейс шины не простаивает: он продолжает считывать из памяти следующие инструкции и помещает их в очередь. Этот процесс идёт до тех пор, пока очередь не заполнится. В результате УУ получает уже готовые инструкции, что значительно быстрее, чем каждый раз обращаться к памяти напрямую.
Инструкции выполняются в том порядке, в котором они были загружены в очередь. Однако при выполнении инструкций перехода (JUMP) и вызова подпрограмм (CALL) содержимое очереди становится недействительным. В таких случаях очередь очищается, и новые начинают загружаться уже с адреса перехода. Возможность считывать следующую при выполнении текущей называется конвейеризацией.
Сегментные регистры
Процессор 8086 имеет 20-битную адресную шину и способен обращаться к памяти объёмом до 1 МБ. При этом его регистры и шина данных имеют разрядность 16 бит, поэтому напрямую адресовать всё пространство за один раз невозможно. Для решения этой проблемы используется сегментация памяти.
Память рассматривается не как единое целое, а как набор сегментов размером до 64 КБ. В пределах одного сегмента доступ к данным возможен с использованием 16-битной шины. В любой момент времени процессор работает с четырьмя активными сегментами.
Для их хранения используются сегментные регистры (по 16 бит каждый):
- CS (Code Segment) — кода.
- DS (Data Segment) — данных.
- SS (Stack Segment) — стека.
- ES (Extra Segment) — дополнительный.
Эти регистры содержат старшие 16 бит начальных адресов соответствующих областей памяти. Например, CS задаёт базовый адрес сегмента кода, из которого выбираются инструкции.
Назначение регистров:
- CS указывает область, из которой извлекаются инструкции.
- SS определяет сегмент стека, используемый при работе со стековыми операциями.
- DS и ES применяются для работы с данными и дополнительными областями памяти.
Основные особенности сегментации:
- сегменты могут перекрываться и начинаться с одного адреса (например, 00000H);
- начало сегмента может быть любым адресом, кратным 16.
Преимущества такого подхода:
- позволяет адресовать до 1 МБ памяти при 16-битных операциях;
- даёт возможность работать с кодом, данными и стеком, превышающими 64 КБ, за счёт переключения сегментов;
- упрощает разделение областей памяти под разные задачи программы;
- обеспечивает переносимость программ, так как их размещение в памяти может изменяться при запуске, что важно для многозадачных систем.
Указатель инструкции
Регистр указателя инструкции хранит 16-битный адрес следующего байта кода в сегменте кода. Значение, содержащееся в регистре IP, называется смещением. Это значение необходимо сместить относительно базового адреса сегмента в CS (прибавить к нему), чтобы получить требуемый 20-битный физический адрес.
Формирование 20-битного адреса
Содержимое регистра CS умножается на 16, то есть сдвигается на четыре позиции влево путём вставки четырёх нулевых битов, а затем смещение, то есть содержимое IP добавляется к сдвинутому содержимому CS для формирования физического адреса. Как показано на рисунке ниже, содержимое CS равно 348AH, следовательно, сдвинутое содержимое CS равно 348A0H.
Устройство управления (EU)
У 8086 EU получает от интерфейса шины инструкции и данные, декодирует их и выполняет. Оно также определяет, какие действия должен выполнить процессор и какие операции передать другим блокам.
EU включает:
- блок управления;
- декодер инструкций;
- АЛУ;
- регистр флагов;
- регистры общего назначения;
- указатели и индексные регистры.
Схема управления, декодер инструкций, АЛУ
Блок управления координирует внутренние процессы EU. Декодер преобразует машинные инструкции в последовательность действий процессора.
АЛУ выполняет основные операции: сложение, вычитание, логические операции AND, OR, XOR, а также инкремент, декремент, сдвиги и другие операции с 16-битными данными.
Регистр флагов (FLAGS)
Флаг — это специальный бит, который отражает результат выполнения операции или управляет работой процессора.
Регистры общего назначения
В процессоре есть восемь 8-битных регистров: AH, AL, BH, BL, CH, CL, DH и DL. Они временно хранят данные — операнды, промежуточные результаты и счётчики.
Пары регистров (AX, BX, CX, DX) могут объединяться для работы с 16-битными значениями.
Указатели и индексные регистры
Хотя сегментные регистры имеют 16-битную разрядность, физический адрес памяти формируется как 20-битное значение. Для этого используются дополнительные регистры, связанные с адресацией.
К этой группе относятся:
- IP (указатель инструкции);
- SP (указатель стека);
- BP (базовый указатель);
- SI (индекс источника);
- DI (индекс приёмника).
Указатель стека (SP)
Он хранит смещение относительно начала стекового сегмента и указывает на вершину стека.
Для этого содержимое регистра сегмента стека сдвигается на четыре бита влево, а содержимое SP добавляется к результату сдвига. Если SP равно 9F20H, а SS — 4000H, то физический адрес вычисляется следующим образом:
SS = Сдвиг 4000H на четыре бита влево = 40000H,
Физический адрес = SS + SP = 40000H + 9F20H = 49F20H
Указатель базы, индекса источника и приёмника (BP, SI и DI)
Эти регистры применяются как универсальные, но чаще имеют специальные роли:
- BP — для доступа к данным в стеке.
- SI — как индекс источника (например, при работе с массивами и строками).
- DI — как индекс приёмника для записи результатов операций.
Кажется, что процессор не делает ничего сложнее, чем задачи по арифметике в первом классе! В общем-то, так и есть. Он способен работать только с очень небольшими порциями данных и ничего, того, что не смогут вычислить ученики начальной школы, он вычислить также не способен. Никакой процессор. Ни рассмотренный 8086, ни его правнуки — ультрасовременные Intel Core и AMD Ryzen. Вся его сила в том, что он умеет работать чертовски быстро! Разбивая программу на простейшие инструкции и выполняя их с огромнейшей скоростью, решают даже сложнейшие задачи.
Первая часть представила краткий перечень понятий, прямо относящихся к микропроцессорам и архитектуре компьютера в целом. Вторая часть будет посвящена истории появления и развития микропроцессоров.