Как работает процессор

Чтобы непрофессионалу стало понятно, как работает центральный процессор компьютера, рассмотрим из каких блоков он состоит:
— блок управления процессором;
— регистры команд и данных;
— арифметико-логические устройства (выполняют арифметические и логические операции);
— блок операций с действительными числами, то есть с числами с плавающей точкой или проще говоря с дробями (FPU);
— буферная память (кэш) первого уровня (отдельно для команд и данных);
— буферная память (кэш) второго уровня для хранения промежуточных результатов вычислений;
— в большинстве современных процессоров имеется и кэш третьего уровня;
— интерфейс системной шины.
Принцип работы процессора

Алгоритм работы центрального процессора компьютера можно представить как последовательность следующих действий.
— Блок управления процессором берет из оперативной памяти, в которую загружена программа, определенные значения (данные) и команды которые необходимо выполнить (инструкции). Эти данные загружаются в кэш-память процессора.
— Из буферной памяти процессора (кэша) инструкции и полученные данные записываются в регистры. Инструкции помещаются в регистры команд, а значения в регистры данных.
— Арифметико-логическое устройство считывает инструкции и данные из соответствующих регистров процессора и выполняет эти команды над полученными числами.
— Результаты снова записываются в регистры и если вычисления закончены в буферную память процессора. Регистров у процессора совсем немного, поэтому он вынужден хранить промежуточные результаты в кэш-памяти различного уровня.
— Новые данные и команды, необходимые для расчетов, загружаются в кеш верхнего уровня (из третьего во второй, из второго в первый), а неиспользуемые данные наоборот в кэш нижнего уровня.
— Если цикл вычислений закончен, результат записывается в оперативную память компьютера для высвобождения места в буферной памяти процессора для новых вычислений. То же самой происходит при переполнении данными кэш-памяти: неиспользуемые данные перемещаются в кеш нижнего уровня или в оперативную память.
Последовательность этих операций образует операционный поток процессора. Во время работы процессор сильно нагревается. Чтобы этого не происходило нужно своевременно делать чистку ноутбука на дому.
Чтобы ускорить работу центрального процессора и увеличить производительность вычислений, постоянно разрабатывают новые архитектурные решения, увеличивающие КПД процессора. Среди них конвейерное выполнение операций, трассировка, то есть попытка предвидеть дальнейшие действия программы, параллельная отработка команд (инструкций), многопоточность а также многоядерность.
Многоядерный процессор имеет несколько вычислительных ядер, то есть несколько арифметико-логических блоков, блоков вычислений с плавающей точкой и регистров, а также кэш первого уровня, объединенных каждый в свое ядро. Ядра имеют общую буферную память второго и третьего уровня. Появление кэш-памяти третьего уровня как раз и было вызвано многоядерностью и соответственно потребностью в большем объеме быстрой буферной памяти для хранения промежуточных результатов вычислений.
Основными показателями, влияющими на скорость обработки данных процессором является число вычислительных ядер, длина конвейера, тактовая частота и объем кэш памяти. Чтобы увеличить производительность компьютера часто требуется сменить именно процессор, а это влечет и замену материнской платы и оперативной памяти. Выполнить апгрейд, настройку и ремонт компьютера на дому в Москве помогут специалисты нашего сервисного центра, если вас пугает процесс самостоятельной сборки и модернизации компьютера.
Процессор
Сколько я себя помню, всегда мечтала сделать процессор. Наконец, вчера я его сделала. Не бог весть что: 8 бит, RISC, текущая рабочая частота — 4 кГц, но он работает. Пока что в программе моделирования логических цепей, но все мы знаем: «сегодня — на модели, завтра — на деле!».
Под катом несколько анимаций, краткое введение в двоичную логику для самых маленьких, короткий рассказ про основные микросхемы логики процессора и, собственно, схема.
Двоичная логика
Двоичная система счисления (для тех, кто не в курсе) — это такая система счисления, в которой нет цифр больше единицы. Такое определение многих сбивает с толку, пока они не вспомнят, что в десятичной системе счисления нет цифр больше девятки.
Двоичная система используется в компьютерах потому, что числа в ней легко кодировать напряжением: есть напряжение — значит, единица; нет напряжения — значит, ноль. Кроме того, «ноль» и «один» легко можно понимать как «ложно» и «истинно». Более того, большая часть устройств, работающих в двоичной системе счисления, обычно относится к числам как к массиву «истинностей» и «ложностей», то есть оперирует с числами как с логическими величинами. Для самых маленьких и тех, кто не в курсе, я расскажу и покажу, как работают простейшие элементы двоичной логики.
Элемент «Буфер»
Представьте, что вы сидите в своей комнате, а ваш друг — на кухне. Вы кричите ему: «Друг, скажи, в коридоре горит свет?». Друг отвечает: «Да, горит!» или «Нет, не горит». Ваш друг — буфер между источником сигнала (лампочкой в коридоре) и приемником (вами). Более того, ваш друг — не какой-нибудь там обычный буфер, а буфер управляемый. Он был бы обычным буфером, если бы постоянно кричал: «Лампочка светится» или «Лампочка не светится».
Элемент «Не» — NOT
А теперь представьте, что ваш друг — шутник, который всегда говорит неправду. И если лампочка в коридоре светится, то он скажет вам «Нет, в коридоре совсем-совсем темно», а если не светится — то «Да, в коридоре свет горит». Если у вас есть такой друг на самом деле, значит, он воплощение элемента «Не».
Элемент «Или» — OR
Для объяснения сути элемента «Или» одной лампочки и одного друга, к сожалению, не хватит. Нужно две лампочки. Итак, у вас в коридоре две лампочки — торшер, к примеру, и люстра. Вы кричите: «Друг, скажи, хотя бы одна лампочка в коридоре светит?», и ваш друг отвечает «Да» или «Нет». Очевидно, что для ответа «Нет» все лампочки обязательно должны быть выключены.
Элемент «И» — AND
Та же самая квартира, вы, друг на кухне, торшер и люстра в коридоре. На ваш вопрос «В коридоре обе лампочки горят?» вы получаете ответ «Да» или «Нет». Поздравляю, теперь ваш друг — это элемент «И».
Элемент «Исключающее Или» — XOR
Повторим еще раз эксперимент для элемента «Или», но переформулируем свой вопрос к другу: «Друг, скажи, в коридоре только одна лампочка светит?». Честный друг ответит на такой вопрос «Да» только в том случае, если в коридоре действительно горит только одна лампочка.
Сумматоры
Четвертьсумматор
Четвертьсумматором называют элемент «Исключающее Или». Почему? Давайте разберемся.
Составим таблицу сложения для двух чисел в двоичной системе счисления:
0+0= 0
0+1= 1
1+0= 1
1+1= 10
Теперь запишем таблицу истинности элемента «Исключающее Или». Для этого обозначим светящуюся лампочку за 1, потухшую — за 0, и ответы друга «Да»/«Нет» как 1 и 0 соответственно.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Очень похоже, не так ли? Таблица сложения и таблица истинности «Исключающего Или» совпадают полностью, кроме одного-единственного случая. И этот случай называется «Переполнение».
Полусумматор
При переполнении результат сложения уже не помещается в столько же разрядов, во сколько помещались слагаемые. Слагаемые — два однозначных числа (одна значащая цифра, понимаете?), а сумма — уже двузначное (две значащих цифры). Две цифры одной лампочкой («Светится»/«Не светится») уже не передать. Нужно две лампочки. Нужно — сделаем!
Кроме XOR, для сумматора нам потребуется элемент «И» (AND).
0 XOR 0 = 0 0 AND 0 = 0
0 XOR 1 = 1 0 AND 1 = 0
1 XOR 0 = 1 1 AND 0 = 0
1 XOR 1 = 0 1 AND 1 = 1
Тадам!
0+0= 00
0+1= 01
1+0= 01
1+1= 10
Наша вундервафля полусумматор работает. Его можно считать простейшим специализированным процессором, который складывает два числа. Полусумматор называется полусумматором потому, что с его помощью нельзя учитывать перенос (результат работы другого сумматора), то есть нельзя складывать три однозначных двоичных числа. В связи с этим из нескольких одноразрядных полусумматоров нельзя сделать один многоразрядный.
Я не буду вдаваться в подробности работы полных и многоразрядных сумматоров, просто надеюсь, что основную идею вы уловили.
Более сложные элементы
Мультиплексор
Предлагаю снова включить воображение. Итак, представьте. Вы живете в частном одноквартирном доме, возле двери этого дома стоит ваш почтовый ящик. Выходя на прогулку, вы замечаете странного почтальона, который стоит возле этого самого почтового ящика. И вот что он делает: достает кучу писем из сумки, читает номер на почтовом ящике, и в зависимости от номера на ящике бросает в него то или иное письмо. Почтальон работает мультиплексором. Он определенным образом (номер на конверте) определяет, какой отправить сигнал (письмо) по сигнальной линии (почтовый ящик).
Мультплексоры состоят обычно только из сочетаний элементов «И», «Или» и «Не». У одноразрядного мультиплексора один вход называется «выбор адреса», два входа с общим названием «входной сигнал» и один выход, который так и называется: «выходной сигнал».
Когда на «выбор адреса» подается 0, то «выходной сигнал» становится таким же, как первый «входной сигнал». Соответственно, когда на «выбор» подается 1, то «выходной сигнал» становится равным второму «входному сигналу».
Демультиплексор
А вот эта штучка работает с точностью до наоборот. На «выбор адреса» даем адрес, на «вход данных» даем данные, на выходе с номером «адрес» имеем данные со входа.
Счетчик
Для понимания работы счетчика вам опять понадобится ваш друг. Позовите его из кухни (надеюсь, он не сильно там скучал, и, главное, не съел всю вашу еду), и попросите делать вот что: пусть он запомнит число 0. Каждый раз, когда вы будете прикасаться к нему, он должен прибавить единицу к тому числу, которое помнит, сказать результат и запомнить его. Когда результат будет равен (допустим) 3, он должен выкрикнуть «Абракадабра!» и отвечать при следующем прикосновении, что сейчас он помнит число 0. Немного сложно? Смотрите:
Вы прикасаетесь к другу. Друг говорит «Один».
Вы прикасаетесь к другу. Друг говорит «Два».
Вы прикасаетесь к другу. Друг говорит «Три». Друг выкрикивает «Хабрахабр!». Критическая атака! Вы временно парализованы и не можете двигаться.
Вы прикасаетесь к другу. Друг говорит «Ноль».
Ну, и так далее. Очень просто, верно?
Вы, конечно, поняли, что ваш друг сейчас — это счетчик. Прикосновение к другу можно считать «тактирующим сигналом» или, попросту говоря, сигналом продолжения счета. Крик «Абракадабра» показывает, что запомненное значение в счетчике — максимальное, и что при следующем тактирующем сигнале счетчик будет установлен в ноль. Есть два отличия двоичного счетчика от вашего друга. Первое: настоящий двоичный счетчик выдает запомненное значение в двоичном виде. Второе: он всегда делает только то, что вы ему говорите, и никогда не опускается до дурацких шуточек, способных нарушить работу всей процессорной системы.
Память
Триггер
Давайте продолжим издеваться над вашим несчастным (возможно, даже воображаемым) другом. Пусть теперь он запомнит число ноль. Когда вы касаетесь его левой руки, он должен запоминать число ноль, а когда правой — число один. При вопросе «Какое число ты помнишь?» друг должен всегда отвечать то число, которое запоминал — ноль или один.
Простейшей запоминающей ячейкой является RS-триггер («триггер» значит «переключатель»). RS-триггер может хранить в себе один бит данных («ноль»/«один»), и имеет два входа. Вход Set/Установка (совсем как левая рука вашего друга) записывает в триггер «один», а вход Reset/Сброс (соответственно, правая рука) — «ноль».
Регистр
Немного сложнее устроен регистр. Ваш друг превращается в регистр тогда, когда вы просите его что-нибудь запомнить, а потом говорите «Эй, напомни мне, что я говорил тебе запомнить?», и друг правильно отвечает.
Регистр обычно может хранить в себе чуть больше, чем один бит. У него обязательно есть вход данных, выход данных и вход разрешения записи. С выхода данных вы в любой момент можете прочитать то, что в этом регистре записано. На вход данных вы можете подавать те данные, которые хотите в этот регистр записать. Можете подавать данные до тех пор, пока не надоест. В регистр все равно ничего не запишется до тех пор, пока на вход разрешения записи не подать один, то есть «логическую единицу».
Сдвиговый регистр
Вы когда-нибудь стояли в очередях? Наверняка стояли. Значит, вы представляете, каково быть данными в сдвиговом регистре. Люди приходят и становятся в конец очереди. Первый человек в очереди заходит в кабинет к большой шишке. Тот, кто был вторым в очереди, становится первым, а тот, кто был третьим — теперь второй, и так далее. Очередь — это такой хитрый сдвиговый регистр, из которого «данные» (ну, то есть люди) могут убегать по делам, предварительно предупредив соседей по очереди. В настоящем сдвиговом регистре, разумеется, «данные» из очереди сбегать не могут.
Итак, у сдвигового регистра есть вход данных (через него данные попадают в «очередь») и выход данных (из которого можно прочитать самую первую запись в «очереди»). Еще у сдвигового регистра есть вход «сдвинуть регистр». Как только на этот вход приходит «логическая единица», вся очередь сдвигается.
Есть одно важное различие между очередью и сдвиговым регистром. Если сдвиговый регистр расчитан на четыре записи (например, на четыре байта), то первая в очереди запись дойдет до выхода из регистра только после четырех сигналов на вход «сдвинуть регистр».
Оперативная память
Если много-много триггеров объединить в регистры, а много-много регистров объединить в одной микросхеме, то получится микросхема оперативной памяти. У микросхемы памяти обычно есть вход адреса, двунаправленный вход данных (то есть в этот вход можно записывать, и с него же можно считывать) и вход разрешения записи. На вход адреса подаем какое-нибудь число, и это число выберет определенную ячейку памяти. После этого на входе/выходе данных мы можем прочитать то, что записано в эту самую ячейку.
Теперь мы одновременно подадим на вход/выход данных то, что хотим в эту ячейку записать, а на вход разрешения записи — «логическую единицу». Результат немного предсказуем, не так ли?
Процессор
BitBitJump
Процессоры иногда делят на CISC — те, которые умеют выполнять много разных команд, и RISC — те, которые умеют выполнять мало команд, но выполняют их хорошо. Одним прекрасным вечером мне подумалось: а было бы здорово, если бы можно было сделать полноценный процессор, который умеет выполнять всего одну команду. Вскоре я узнала, что существует целый класс однокомандных процессоров — OISC, чаще всего они используют команду Subleq (вычесть, и если меньше или равно нулю, то перейти) или Subeq (вычесть, и если равно нулю, то перейти). Изучая различные варианты OISC-процессоров, я нашла в сети сайт Олега Мазонки, который разработал простейший однокомандный язык BitBitJump. Единственная команда этого языка так и называется — BitBitJump (скопировать бит и перейти по адресу). Этот, безусловно эзотерический, язык является полным по Тьюрингу — то есть на нем можно реализовать любой компьютерный алгоритм.
Подробное описание BitBitJump и ассемблер для этого языка можно найти на сайте разработчика. Для описания алгоритма работы процессора достаточно знать следующее:
1. При включении процессора в регистрах PC, A и B записаны 0
2. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр A
3. Увеличиваем PC
4. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
5. Увеличиваем PC
6. Записываем в ячейку с адресом, записанным в регистре B, содержимое бита с адресом А.
7. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
8. Записываем в регистр PC содержимое регистра B
9. Переходим к пункту 2 нашего плана 10. PROFIT.
К сожалению, алгоритм бесконечный, и потому PROFIT достигнут не будет.
Собственно, схема
Схема строилась стихийно, поэтому правят бал в ней страх, ужас и кавардак. Тем не менее, она работает, и работает прилично. Чтобы включить процессор, нужно:
1. Ввести программу в ОЗУ
2. Нажать на включатель
3. Установить счетчик в положение 4 (это можно делать и аппаратно, но схема стала бы еще более громоздкой)
4. Включить тактовый генератор
Как видите, использованы один регистр, один сдвиговый регистр, одна микросхема ОЗУ, два двоичных счетчика, один демультиплексор (представленный компараторами), два мультиплексора и немного чистой логики.

Можете скачать схему в формате circ для программы Logisim, и поиграться.
Что дальше?
Во-первых, можно увеличить разрядность процессора — заменив 8-битные элементы на 16-битные.
Во-вторых, можно вынести ОЗУ из процессора, и добавить несложную схему, которая будет приостанавливать процессор, изменять ОЗУ и снова включать процессор. Такая схема будет выполнять функции простого контроллера ввода-вывода. Тогда можно будет сделать на базе этого процессора калькулятор, контроллер или еще какую-нибудь забавную бесполезную штуку.
В-третьих, можно воплотить всю эту схему в железе. Что я собираюсь сделать. Как только сделаю — обязательно расскажу и покажу.
Спасибо всем за внимание!
P.S. Ссылки (для тех, кому лень читать):
1. Процессоры URISC — ru.wikipedia.org/wiki/Urisc
2. Сайт языка BitBitJump — mazonka.com/bbj/index.html
3. Программа для моделирования логических схем Logisim — http://ozark.hendrix.edu/~burch/logisim/
4. Самодельный URISC (ORISC) процессор для Logisim — narod.ru/disk/31367690001/oo.circ.html
- процессор
- сделай сам
- для самых маленьких
Как работает процессор?
Кратко и доступно о том, как работает центральный процессор, регистры, память, инструкции и кэш, а также что такое УУ и АЛУ и зачем они нужны.
Инструмент проще, чем машина. Зачастую инструментом работают руками, а машину приводит в действие паровая сила или животное.
Компьютер тоже можно назвать машиной, только вместо паровой силы здесь электричество. Но программирование сделало компьютер таким же простым, как любой инструмент.
Процессор — это сердце/мозг любого компьютера. Его основное назначение — арифметические и логические операции, и прежде чем погрузиться в дебри процессора, нужно разобраться в его основных компонентах и принципах их работы.
Два основных компонента процессора
Устройство управления
Устройство управления (УУ) помогает процессору контролировать и выполнять инструкции. УУ сообщает компонентам, что именно нужно делать. В соответствии с инструкциями он координирует работу с другими частями компьютера, включая второй основной компонент — арифметико-логическое устройство (АЛУ). Все инструкции вначале поступают именно на устройство управления.
Существует два типа реализации УУ:
- УУ на жёсткой логике (англ. hardwired control units). Характер работы определяется внутренним электрическим строением — устройством печатной платы или кристалла. Соответственно, модификация такого УУ без физического вмешательства невозможна.
- УУ с микропрограммным управлением (англ. microprogrammable control units). Может быть запрограммирован для тех или иных целей. Программная часть сохраняется в памяти УУ.
УУ на жёсткой логике быстрее, но УУ с микропрограммным управлением обладает более гибкой функциональностью.
Арифметико-логическое устройство
Это устройство, как ни странно, выполняет все арифметические и логические операции, например сложение, вычитание, логическое ИЛИ и т. п. АЛУ состоит из логических элементов, которые и выполняют эти операции.
Большинство логических элементов имеют два входа и один выход.
Ниже приведена схема полусумматора, у которой два входа и два выхода. A и B здесь являются входами, S — выходом, C — переносом (в старший разряд).
Схема арифметического полусумматора
Хранение информации — регистры и память
Как говорилось ранее, процессор выполняет поступающие на него команды. Команды в большинстве случаев работают с данными, которые могут быть промежуточными, входными или выходными. Все эти данные вместе с инструкциями сохраняются в регистрах и памяти.
Регистры
Регистр — минимальная ячейка памяти данных. Регистры состоят из триггеров (англ. latches/flip-flops). Триггеры, в свою очередь, состоят из логических элементов и могут хранить в себе 1 бит информации.
Прим. перев. Триггеры могут быть синхронные и асинхронные. Асинхронные могут менять своё состояние в любой момент, а синхронные только во время положительного/отрицательного перепада на входе синхронизации.
По функциональному назначению триггеры делятся на несколько групп:
- RS-триггер: сохраняет своё состояние при нулевых уровнях на обоих входах и изменяет его при установке единице на одном из входов (Reset/Set — Сброс/Установка).
- JK-триггер: идентичен RS-триггеру за исключением того, что при подаче единиц сразу на два входа триггер меняет своё состояние на противоположное (счётный режим).
- T-триггер: меняет своё состояние на противоположное при каждом такте на его единственном входе.
- D-триггер: запоминает состояние на входе в момент синхронизации. Асинхронные D-триггеры смысла не имеют.
Для хранения промежуточных данных ОЗУ не подходит, т. к. это замедлит работу процессора. Промежуточные данные отсылаются в регистры по шине. В них могут храниться команды, выходные данные и даже адреса ячеек памяти.
Принцип действия RS-триггера
Память (ОЗУ)
ОЗУ (оперативное запоминающее устройство, англ. RAM) — это большая группа этих самых регистров, соединённых вместе. Память у такого хранилища непостоянная и данные оттуда пропадают при отключении питания. ОЗУ принимает адрес ячейки памяти, в которую нужно поместить данные, сами данные и флаг записи/чтения, который приводит в действие триггеры.
Прим. перев. Оперативная память бывает статической и динамической — SRAM и DRAM соответственно. В статической памяти ячейками являются триггеры, а в динамической — конденсаторы. SRAM быстрее, а DRAM дешевле.
Команды (инструкции)
Команды — это фактические действия, которые компьютер должен выполнять. Они бывают нескольких типов:
- Арифметические: сложение, вычитание, умножение и т. д.
- Логические: И (логическое умножение/конъюнкция), ИЛИ (логическое суммирование/дизъюнкция), отрицание и т. д.
- Информационные: move , input , outptut , load и store .
- Команды перехода: goto , if . goto , call и return .
- Команда останова: halt .
Прим. перев. На самом деле все арифметические операции в АЛУ могут быть созданы на основе всего двух: сложение и сдвиг. Однако чем больше базовых операций поддерживает АЛУ, тем оно быстрее.
Инструкции предоставляются компьютеру на языке ассемблера или генерируются компилятором высокоуровневых языков.
В процессоре инструкции реализуются на аппаратном уровне. За один такт одноядерный процессор может выполнить одну элементарную (базовую) инструкцию.
Группу инструкций принято называть набором команд (англ. instruction set).
Тактирование процессора
Быстродействие компьютера определяется тактовой частотой его процессора. Тактовая частота — количество тактов (соответственно и исполняемых команд) за секунду.
Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард операций в секунду.
Чтобы уменьшить время выполнения программы, нужно либо оптимизировать (уменьшить) её, либо увеличить тактовую частоту. У части процессоров есть возможность увеличить частоту (разогнать процессор), однако такие действия физически влияют на процессор и нередко вызывают перегрев и выход из строя.
Выполнение инструкций
Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.
Ниже рассмотрен пример набора команд, который суммирует два числа:
- LOAD_A 8 . Это команда сохраняет в ОЗУ данные, скажем, . Первые 4 бита — код операции. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкцию load_A — поместить данные 1000 (последние 4 бита команды) в регистр A .
- LOAD_B 2 . Ситуация, аналогичная прошлой. Здесь помещается число 2 ( 0010 ) в регистр B .
- ADD B A . Команда суммирует два числа (точнее прибавляет значение регистра B в регистр A ). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистр A .
- STORE_A 23 . Сохраняем значение регистра A в ячейку памяти с адресом 23 .
Вот такие операции нужны, чтобы сложить два числа.
Шина
Все данные между процессором, регистрами, памятью и I/O-устройствами (устройствами ввода-вывода) передаются по шинам. Чтобы загрузить в память только что обработанные данные, процессор помещает адрес в шину адреса и данные в шину данных. Потом нужно дать разрешение на запись на шине управления.
Кэш
У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше.
Если данные в кэше и памяти не совпадают, то они помечаются грязными битами (англ. dirty bit).
Поток инструкций
Современные процессоры могут параллельно обрабатывать несколько команд. Пока одна инструкция находится в стадии декодирования, процессор может успеть получить другую инструкцию.
Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.
Если процессор многоядерный, это означает, что фактически в нём находятся несколько отдельных процессоров с некоторыми общими ресурсами, например кэшем.
Функционирование и синтез цифровых устройств. Часть 4
В этой части рассматриваются основы построения процессорной и микропроцессорной электроники. Мы не будем описывать какие-либо устройство и работу реальных микропроцессоров, т.к. их существует очень много, и, кроме того, есть немало специализированной литературы, посвящённой тем или иным моделям процессоров или их семействам. Кроме того, процессоры – устройства, в которых очень тесно переплетаются электроника и программные аспекты. Вместо этого мы опишем общие принципы их функционирования, присущие всем им, вне зависимости от их мощности, частоты, разрядности и пр. технических характеристик. Некоторые аспекты могут отличаться от приведенного описания, но, в целом, суть всегда одна и та же. Вопросы программирования также рассматриваться не будут, т.к. выходят за рамки этой статьи. Основная цель любого процессора – обработка числовых данных. Здесь не будет идти речь о специализированных цифровых сигнальных процессорах (DSP). В любом случае они строятся на основе цифрового ядра, обрамлённого какими-то аналоговыми узлами (АЦП, ОУ, компараторы, фильтры и т.д. и т.п). Вначале, как обычно, немного терминологии. Процессор (центральный процессор, ЦП, англ. CPU – Central Processing Unit) – изначально и дословно – вычислитель, исполнитель машинных инструкций (команд). Но d последнее время это понятие очень разрослось, и им нередко называют достаточно большой спектр конструкций и устройств – начиная от микропроцессоров в виде одной микросхемы и заканчивая готовыми модулями, содержащими в своём составе и процессор как таковой и какой-то набор вспомогательных периферийных устройств. Микропроцессор – обычно одна микросхема, содержащая в себе все необходимые для работы узлы (регистры, АЛУ, УУ). Частота – частота тактовых сигналов, которые подаются на узлы процессора для обеспечения его синхронизации. Разрядность – кол-во бит данных, которое процессор может обработать за одну команду. Иногда её определяют как ширину ШД процессора. За всю историю развития вычислительной техники существовали (и существуют) 4, 8, 16, 32 и 64 разрядные процессоры. Но следует иметь в виду, что здесь не так всё просто. Многие 16 и 32 разрядные процессоры имеют массу команд для обработки 8-битных данных, а 64-битные способны обрабатывать и 32, и 16, и 8 разрядные данные. Даже процессоры, позиционируемые фирмами-изготовителями как 8-битные, иногда могут производить действия с 16-разрядными операндами. Так, например, достаточно древний микропроцессор Z80 может обмениваться с памятью словами (2 байта) и производить над ними арифметические действия, хоть он 8-разрядный. С шириной ШД тоже не так всё просто. Например, широко известный процессор i8088 является полным клоном 16-разрядного i8086, с той лишь разницей, что у него 8-битная внешняя ШД. Объём адресуемой памяти – какое кол-во памяти может адресовать процессор. Максимальный объём равен 2 n , где n – разрядность шины адреса ША. Но, в некоторых случаях, может быть меньше этой величины. Чипсет (англ. chipset) – набор микросхем поддержки процессора. В русскоязычной литературе также распространён термин «микропроцессорный комплект». Раньше в этот набор входил сам микропроцессор (либо микропроцессорные секции – см. ниже) и все вспомогательные микросхемы – специализированные генераторы, интерфейсы, какие-то регистры и пр. Существуют и другие понятия, они будет раскрываться по ходу повествования.
Раздел 1. Архитектура микропроцессорных систем
- CPU – сам процессор;
- ROM – ПЗУ, хранящее программу, по которой работает CPU;
- RAM – ОЗУ, используемое процессором для размещения каких-то временных данных;
- Периферия – какие-то внешние устройства, с которыми работает процессор. Сюда относится всё – клавиатуры, интерфейсы, индикация и пр.
Отметим, что приведенная структура – классическая, и достаточно древняя. Современные архитектуры имеют некоторые отличия и усовершенствования, призванные увеличить быстродействие системы в целом. Но идеи и основные принципы их функционирования ничем не отличаются от классического варианта.
Существует 2 основные варианта архитектур МП систем – гарвардская и Фон-Неймановская.
Гарвардская архитектура предполагает раздельное хранение программы и данных — рис. 2.
Рис. 2. Гарвардская архитектура
Эта архитектура предполагает, что программы, исполняемые CPU, хранятся ТОЛЬКО в ROM. Исполнять что-либо из RAM процессор не может. Т.е. RAM – 100% память данных. Их так иногда и называют – память программ и память данных. В ROM тоже могут храниться какие-то данные, но это могут быть только фиксированные константы, определённые на этапе разработки программы. Изменяться в процессе работы они не могут.
Физически ROM «сидит» на своих собственных шинах, не связанных с общими шинами. Это несколько ускоряет выполнение команд, т.к. процессор может распараллеливать работу с ROM/RAM, но усложняет конечную схему и не позволяет «на лету» менять исполняемые программы либо подгружать откуда-то новые.
Адресация ROM/RAM совершенно разная, независимая друг от друга, и может частично или полностью перекрываться. Т.е., например, ячейка с адресом 0 может существовать и в ROM, и в RAM. Это не приводит к появлению каких-то ошибок, порче данных и пр.
По такой схеме строятся многие микроконтроллеры (x51, AVR, PIC, …), в которых программа (прошивка) хранится в ПЗУ микроконтроллера и не может быть изменена на ходу.
Фон-неймановская архитектура совпадает c общей – рис. 1.
Фон-неймановский процессор может исполнять программы из ROM и из RAM. Оба вида памяти находятся в одном адресном пространстве процессора и абсолютно равнозначны для процессора. При этом он даже сам «не знает», откуда «родом» программа, которую он выполняет. При этом процессор может совершенно безболезненно переходить ROMRAM, что широко используется для организации в ROM различных стандартных библиотек функций и пр. Попытки записи в ROM не вызывают никаких ошибок, подобные операции просто игнорируются соответствующими микросхемами.
Данные и программы хранятся в одной и той же памяти, они никак не отличимы друг от друга, просто разнесены по разным адресам. Поэтому, такие процессоры способны полноценно исполнять любые данные как программу, что повсеместно применяется для загрузки в память программ из каких-то внешних носителей.
ROM и RAM должны быть аппаратно разнесены по разным (непересекающимся) адресам памяти, иначе данные, считываемые из них неизбежно «перемешаются» на общей ШД и возникнут ошибки.
Недостатки архитектуры – невозможность распараллелить выборку команд и данных (решается введением системы очередей команд и различного кэширования), возможность исполнить данные, не являющиеся программой как программу (разные процессоры защищаются от этого по-разному)). Но, несмотря на эти недостатки, данная архитектура очень широко распространена.
Так, очень многие процессоры, начиная, например, от очень старых i8080, Z80 и заканчивая современными Core i5, i7 и т.д. и т.п. имеют фон-неймановскую архитектуру. Кроме того, в основе многих ARM микроконтроллеров лежит фон-неймановское ядро.
RISC и CISC процессоры
RISC – Reduced Instruction Set computer – дословно – компьютер с упрощённым (урезанным) набором команд.
В таких процессорах используется система таких команд, которые ядро процессора может максимально быстро декодировать и исполнить. В таких системах команд обычно отсутствуют сложные команды типа деления, умножения, а также команды, извлекающие операнд(ы) из памяти, что-то с ними выполняющие и возвращающие результат обратно в память. Такие операции необходимо разбивать на несколько простых, типа «загрузить операнд 1 из памяти в регистр A», «загрузить операнд 2 из памяти в регистр B», «сложить содержимое регистров A и B, поместив сумму в регистр C», «передать содержимое регистра C в память» и пр.
CISC – Complex Instruction Set computer – дословно – компьютер с комплексным набором команд.
Система команд характеризуется разной длиной команды, наличием сложных команд (деление, умножение, возможность работы с памятью одновременно с какой-либо операцией) и пр. Но, в то же время, в CISC архитектурах есть и простые «RISC» команды и никто не запрещает «писать программы в стиле RISC».
Но в современном мире грани между RISC и CISC постепенно стираются. Так, например, многие современные RISC процессоры (это, в основном, микроконтроллеры) имеют составе своей системы команд умножение и деление целых чисел, хоть эти операции по определению являются частью CISC архитектур и т.д.
Микропроцессоры и микроконтроллеры
Несмотря на то, что многие путают эти понятия, часто называя микроконтроллер микропроцессором, или просто процессором, это несколько разные вещи и между ними есть довольно существенная разница.
Процессор и микропроцессор – ЭВМ общего назначения, т.е. это 100% вычислитель, в нём нет никакой памяти (кроме некоторого минимально необходимого количества регистров) – ни ROM, ни RAM, ни какой-либо периферии, ни даже тактового генератора. Т.е. любая система (даже самая простейшая) на базе микропроцессора в обязательном порядке должна содержать, кроме самого микропроцессора, тактовый генератор, ROM и RAM, пусть даже каких-то минимальных объёмов.
Любой микроконтроллер (МК) – ЭВМ специального назначения. Он всегда содержит в своём составе и генератор, и ROM с программой, и RAM, и некоторую периферию (таймеры-счётчики, АЦП и пр.). Поэтому он, в принципе, всегда работоспособен сам по себе, без каких-либо внешних схем и узлов. Также в МК обычно гораздо больше регистров по сравнению с обычными микропроцессорами.
Секционные процессоры или процессорные секции
Процессорные секции обычно не являются процессорами в прямом смысле этого термина. Как правило это просто АЛУ и набор каких-то необходимых регистров и возможностью объединения в цепочки для наращивания разрядности. Они не содержат средств работы с памятью, выборки команд и пр. Для построения на их основе полноценного процессора необходима разработка устройства управления и прочих узлов.
Также, микропроцессорные комплекты, содержащие секции часто содержат в себе некоторые узкоспециализированные микросхемы (например, схемы ускоренного переноса для повышения быстродействия многоразрядных процессоров на базе этих секций). Здесь мы не будем рассматривать эти вопросы.
Раздел 2. Внутренняя архитектура процессоров
Рассмотрим внутреннюю архитектуру процессора на примере микропроцессора Z80 – рис. 3.

Рис. 3. Архитектура процессора Z80 (с сайта Википедии)
Конечно, разные процессоры имеют разную архитектуру, разный набор внутренних регистров и пр., но основные моменты остаются неизменны.
Основные узлы процессора – АЛУ, набор регистров (розовые прямоугольники на схеме), управляющее устройство и вспомогательные узлы.
«Сердце» процессора – АЛУ (арифметико-логическое устройство, англ. ALU). Именно оно выполняет 95% всех операций. Регистры хранят небольшой объём текущих данных, с которыми работает процессор. Управляющее устройство обеспечивает управление узлами процессора, работу с памятью и декодирование команд.
Разрядность каждого регистра совпадает с разрядностью ШД процессора, хотя это не всегда так. Очень часто регистры могут попарно «объединяться», образуя регистры удвоенной или учетверённой разрядности. Так, например, в том же Z80 8-разрядные регистры B/C, D/E, и H/L могут использоваться как по отдельности, так и в виде 16-разрядных регистров BC, DE и HL.
Среди регистров, хранящих данные, часто один стоит «особняком». Это т.н. аккумулятор. На рис. 3 это регистр A. Его особенность заключается в том, что он всегда представляет собой один из операндов любой операции, выполняемой АЛУ, и всегда служит получателем результата любой операции. В более развитых структурах (и во многих микроконтроллерах) аккумулятором может служить любой другой регистр. Аккумулятор тоже может быть разной разрядности.
Регистр F – регистр флагов. Этот регистр никогда не принимает никакого участия в обмене данными, он содержит набор битов, которые показывают состояние АЛУ, а также позволяют управлять поведением процессора в различных ситуациях. Разрядность регистра флагов, в принципе, никак не связана с разрядностью самого процессора, т.к. кол-во флагов обычно гораздо меньше тех же 16, 32 или даже 8 бит данных, которые способен обрабатывать процессор. Но, тем не менее, его разрядность обычно такая же, как и разрядность остальных регистров. Это делается просто для удобства программирования.
Вот наиболее часто встречающихся флагов:
Z (ZF) – флаг нуля (zero flag). Устанавливается в 1, если результат любой операции равен нулю.
C (CF) – флаг переноса (carry flag). Для операций сложения/вычитания показывает перенос/заём, при операциях сдвига используется как доп. бит – см. раздел 3.
P (PF) – флаг чётности (parity flag). Устанавливается в 1, если результат операции содержит чётное кол-во единичных битов. Не путать с чётными/нечётными числами! Это совершенно разные вещи.
S (SF) – флаг знака (sign flag). Равен 1, если результат отрицательный (меньше нуля). Если 0, либо больше нуля, то флаг равен 0. По сути этот флаг – копия знакового бита – см. раздел 3.
I (IF) – флаг разрешения прерываний (interrupt flag). Если равен 1, то процессор будет реагировать на прерывания – см. специализированную литературу. 0 – прерывания запрещены.
AC – флаг дополнительного переноса (auxiliary carry flag). То же самое, что и CF, но показывает перенос/заём между «половинками» операндов. Если, например, складываются 8-битные числа, то AC покажет перенос между 3 и 4 битами.
OF — переполнение (overflow flag). 1 свидетельствует о переполнении разрядной сетки. Иными словами – слишком большой или слишком маленький результат.
Существуют также и другие флаги.
Раздел 3. Типы данных и операции, выполняемые АЛУ
Перед тем, как рассматривать внутреннюю структуру АЛУ, необходимо сказать несколько слов об операциях, выполняемых им и о типах данных. С одной стороны может показаться, что эта тема относится к программированию, а не к электронике, но, в то же время, без понимания этих вещей сложно представить себе работу всего процессора в целом.
Начнём с типов данных.
Все числа, обрабатываемые процессорами можно разбить на 2 категории (как, собственно и в математике) – целые и вещественные.
Вещественные числа мы рассматривать не будем, т.к. они часто обрабатываются не основным АЛУ, а специализированными устройствами (различными арифметическими сопроцессорами), да и все алгоритмы операций над такими числами всегда сводятся к целочисленным операциям. В специализированной литературе по программированию старых 8-разрядных процессоров типа i8080, K580, Z80 и аналогичных эти алгоритмы описаны достаточно хорошо, а их аппаратные реализации не сильно отличаются от программных.
В свою очередь, целые числа делятся на знаковые и беззнаковые. Такое деление обусловлено разными форматами хранения этих чисел, а также некоторыми нюансами их обработки. Беззнаковые числа и ноль всегда считаются положительными.
На рис. 4 представлен общий формат знаковых и беззнаковых чисел.

Рис. 4. Формат 8-битных беззнаковых (а) и знаковых (б) чисел
Видно, что в беззнаковом формате все биты отводятся под число, а в знаковом формате старший бит показывает знак числа. Этот бит называют знаковым битом.
При этом принято S=0 для положительных чисел и нуля, S=1 для отрицательных. Также можно заметить, что n-разрядное беззнаковое число может находиться в диапазоне от 0 до 2 n -1, а знаковое – от -2 n-1 до +2 n-1 . Например, беззнаковое 8-битное число лежит в диапазоне 0..255, а знаковое -127 .. +127.
Числа со знаком могут быть представлены в трёх разных видах – прямой код (ПК), обратный код (ОК) и дополнительный код (ДК). Рассмотрим их.
Прямой код (ПК)
Число хранится «как есть», т.е. в битах d6-d0 всегда записан модуль числа в неизменном виде, меняется только бит S, задавая знак числа. Это самый простой и наглядный способ, однако он крайне неудобен при выполнении различных операций (для сложения и вычитания требуются разные схемы, результирующий перенос надо брать не из старшего разряда, а из предыдущего, сложно формировать знак результата и т.п.) и, поэтому, нигде не применяется.
Обратный код (ОК)
Положительные числа хранятся в ПК, модуль отрицательных чисел хранится в инвертированном виде. Например: +15= 00001111, -107= 10010100. Старший бит – знак, все остальные биты числа -107 проинвертированы (для примера +107=01101011). Здесь имеет место особенность: существует два нуля – положительный (00000000) и отрицательный (11111111). При работе с ОК это следует иметь в виду.
Дополнительный код (ДК)
Положительные числа хранятся в ПК, модуль отрицательных чисел хранится в инвертированном виде +1. Например: -107= 10010101. Старший бит – знак, все остальные биты числа -107 проинвертированы, и к инверсии прибавлена 1. Здесь ноль, как и положено, только один – положительный.
Многобайтовые числа
Как видно, один байт – очень малая величина для многих применений. Даже результат простого сложения двух однобайтовых чисел очень часто может выйти за границу 8-байтов, не говоря уж об умножении.
АЛУ может выполнять операции над операндами только определённой длины, которая задаётся разрядностью конкретного процессора и набором его команд. Как правило это 8, 16, 32 или 64 бита. Для более длинных чисел применяются специальные программные алгоритмы.
Многие процессоры имеют команды для работы с данными, находящимися в RAM/ ROM системы. Если размещение одного байта в памяти вполне очевидно и однозначно, то с многобайтными числами возможны варианты.
В настоящее время общепринятыми являются 2 варианта размещения байтов в памяти:
1. Младшими байтами вперёд. Младший байт числа занимает в памяти меньший адрес (т.е. идёт первым). Например, 4-байтовое число 98675FDFh (в шестнадцатеричном виде) будет размещено «задом наперёд»: DFh, 5Fh, 67h, 98h. Эта схема получила название «маленький индеец» (англ. little endian) или обратный порядок байтов.
2. Старшими байтами вперёд. Младший байт занимает больший адрес. То же самое число 98675FDFh будет записано в память как 98h, 67h, 5Fh, DFh. Этот способ называется «большой индеец» (англ. big endian), прямой порядок байтов.
При этом порядок битов в каждом байте никогда не меняется.
В системе маленького индейца работают, например, все процессоры Intel, AMD, микроконтроллеры Atmel AVR, ARM и т.д.
Большого индейца используют некоторые процессоры фирм IBM, Motorola, SPARC.
Примеры выполнения операций сложения/вычитания над числами в ОК и ДК очень подробно рассмотрены в [1]. Мы не будем здесь их повторять.
Из этих примеров видно, что благодаря применению этих кодов вычитатель не требуется (достаточно одного сумматора), что несколько упрощает АЛУ процессора. Но, т.к. операции в ДК выполняются проще и быстрее, то именно этот вид кодирования стал стандартом де-факто и применяется во всех процессорах, контроллерах и пр.
Умножение и деление, как уже указывалось выше, являются сложными составными операциями, состоящими из цикла, в котором определённое кол-во раз повторяются операции сложения (для умножения) / вычитания (для деления) и сдвига (см. ниже). Существует несколько основных алгоритмов выполнения этих операций – [2], [3]. Для умножения существует и несколько видоизменённых, т.н. «ускоренных» версий алгоритма, наиболее распространённая – алгоритм Бута – [4].
Ускорения основаны на том, что на каждом шаге обычный алгоритм всегда анализирует один бит множителя, а ускоренные – 2 бита. Но подобный подход оправдан в аппаратных реализациях, в программных же он только усложнит и запутает программу.
Следует отметить, что не всегда процессоры имеют возможность аппаратного умножения.
Логические операции – AND, OR, NOT, XOR. Ничем не отличаются от простых однобитовых операций, рассмотренных в 1-й части статьи. Знак числа в этих операциях никогда не учитывается, все биты операндов обрабатываются совершенно независимо друг от друга.
Сдвиг. Операция, при которой биты числа сдвигаются вправо или влево на один или более бит – [5]. Всегда имеет один операнд.
Кроме направления сдвиги разделяются на несколько подвидов: логические (рис. 5), арифметические (рис 6) и циклические (рис 7).

Рис.5. Логический сдвиг

Рис. 6. Арифметический сдвиг

Рис. 7. Циклический сдвиг
Как видно, сдвиги – простейшие логические операции, для выполнения которых даже не нужны никакие логические схемы. Сдвигатели на один разряд – просто набор проводов. Некоторые процессоры могут сдвигать операнд на несколько бит. Схемотехника подобного сдвигателя может быть разной, начиная от набора однобитовых сдвигателей и заканчивая некими специальными лог. схемами.
В операциях сдвига всегда очень широко используется вышеупоминавшийся флаг переноса C (CF). При сдвиге в освобождающийся бит заносится значение этого флага, а также, выпадающий слева или справа бит не теряется, а попадает в CF, что позволяет его затем анализировать. В ряде случаев подобный подход может оказаться проще, чем, например, проверять биты операцией AND с какими-то масками.
Операции сдвига могут служить и простыми и быстрыми операциями деления и умножения. Дело в том, что сдвиг любого числа влево на один разряд эквивалентен умножению его на 2, вправо – делению на 2.
Арифметические сдвиги применяются при работе со знаковыми числами.
Прочие операции. Ряд процессоров могут содержать какие-то дополнительные операции, например, манипулирования отдельными битами (очень часто встречается в микроконтроллерах), операции с многобайтными числами, циклический сдвиг числа через флаг переноса (например, сдвигаемый 8-разрядный регистр совместно с флагом CF представляется как 9-разрядный и сдвигается как 9-разрядный) и пр.
Программы, машинные коды и язык ассемблера.
Поведение любого процессора (микропроцессора, микроконтроллера) всегда задаётся программой. Без программы процессор совершенно неработоспособен.
Программа с точки зрения процессора – просто набор байтов, которые он интерпретирует как команды и исполняет их.
Набор команд, их кодировка, формат и пр. всегда разные у разных процессоров. Конечно, существуют семейства схожих друг с другом процессоров, имеющих одни и те же команды в одном и том же формате, но разные модели процессоров могут иметь некоторые дополнительные команды и пр. Например, семейство процессоров Intel x86 включает в себя достаточно много конкретных моделей (8086, 8088, 80286, 80386 и т.д и т.п), а также великое множество их аналогов других фирм-разработчиков. При этом действует одно общее правило – более старший процессор всегда может выполнить программу, написанную для более младшего, но не наоборот. Так, например, 80286 процессор всегда выполнит программу для 8086 процессора, а 8086-й выполнить программу для 80286 может далеко не всегда, т.к. 80286 имеет множество дополнительных команд и возможностей, которых в 8086 просто нет и т.д.
Также следует иметь в виду то, что структуры и схемы конкретных вычислительных систем могут отличаться, даже если они построены на близких процессорах (или даже на одном и том же процессоре). Более подробно – см. раздел 5.
Набор байтов программы иногда называют машинными кодами.
Т.к. человеку-программисту крайне неудобно работать непосредственно с кодами команд, то был разработан специальный язык программирования – ассемблер. В основе языка ассемблера лежат некие словесные эквиваленты машинных кодов. При этом приняты ряд достаточно удобных правил – регистры и флаги обозначаются именами, команда, например, сложения всегда называется, например, add, независимо от того, что она складывает – регистр с регистром или регистр с константой и пр.
Конечно, следует чётко знать и понимать, что и машинные коды, и соответствующий им язык ассемблера всегда жёстко привязаны к конкретной архитектуре либо модели процессора. Поэтому, если мы, например возьмём программу, работающую, например, на процессоре i8086 и без каких-либо изменений запустим её на каком-нибудь микроконтроллере Atmel AVR (или наоборот), то работать она не будет, т.к. это две совершенно разные архитектуры и два совершенно разных процессора. Даже несмотря на то, что они оба во многом похожи друг на друга – умеют складывать и вычитать числа, выполнять какие-то переходы в памяти и пр.
Раздел 4. Структура АЛУ
В общем случае АЛУ это набор отдельных логических схем (сумматоры, сдвигатели и пр.). На входах АЛУ часто установлены мультиплексоры, позволяющие подавать на тот или иной вход АЛУ данные из разных источников (внутренние регистры, ШД и т.д.). Выходы схем заводятся на выходной мультиплексор, который собственно и определяет выполняемую АЛУ операцию.
Разрядность всех схем и мультиплексоров обычно одинакова.
Управляющее устройство процессора всегда задаёт тип операции (активизируя одну из логических схем), управляет входными/выходными мультиплексорами и пр.
Примерная (обобщённая) структура АЛУ показана на рис. 8.

Рис. 8. Обобщённая структура АЛУ.
Верхний мультиплексор обеспечивает подачу в логическую часть АЛУ входных данных из разных источников, нижний выдаёт на выходную шину результат из той или иной схемы. По сути, именно нижний мультиплексор определяет операцию, выполняемую АЛУ.
Отметим ещё раз, что конкретная структура АЛУ у разных процессоров разная, может включать различные дополнительные компоненты.
Так, например, в старых микропроцессорных секциях (например, К1804ВС1/ВС2) на выходе АЛУ довольно часто встречался дополнительный сдвиговый регистр, который упрощал реализацию алгоритмов умножения/деления и ускорял эти операции за счёт того, что АЛУ могло выполнять одновременно 2 операции – сложение/вычитание и сдвиг влево/вправо. А т.к. именно такие пары используются при умножении/делении, то эти действия можно было выполнить одной командой, а не двумя, что несколько ускоряло эти операции.
В современных процессорах АЛУ гораздо более сложное. Так, современные процессоры Intel имеют специальные команды, обрабатывающие одновременно не 2 операнда, а больше, способны работать с плавающей точкой и т.д. и т.п.
Раздел 5. Пример схемы с использованием микропроцессора
В завершение данной части рассмотрим основные вопросы и аспекты построения микропроцессорных систем на примере АОНа на Z80. Данная конструкция была популярна в 80-90 х годах прошлого века. Несмотря на её древность и, м.б. нынешнюю неактуальность, на ней очень отчётливо видны все основные моменты построения подобных систем.
Мы не будем рассматривать целиком всю схему этого АОНа, это выходит за рамки статьи, рассмотрим лишь его процессорную часть – рис. 9.

Рис. 9. Схема процессорной части АОНа на Z80.
На схеме мы видим:
- DD2 – микропроцессор Z80.
- Схема формирования сброса – VD40, C1, R1 и пр. Цель этого узла – сбросить процессор в начальное состояние при включении питания. Стоит отметить, что многие микроконтроллеры уже имеют родственную схему в своём составе, поэтому делать эту схему для них необязательно.
- Генератор тактовых импульсов частотой 4 MHz для процессора – DD1.1, DD1.2, DD8 и окружающая «рассыпуха». Счётчик DD8, в принципе не нужен, он используется просто как делитель частоты, если используются разные задающие кварцы.
- DD3 – ПЗУ (ROM). Содержит программу, по которой работает процессор.
- DD4 – RAM. ОЗУ, использующееся процессором для хранения рабочих данных.
- DD5 – специализированная микросхема-таймер.
- DD6 – микросхема ввода-вывода.
- DD10 – регистр данных для индикатора.
Из схемы видны следующие особенности:
— ШД процессора (сигналы D0-D7 на общей шине схемы) подключается одновременно ко всем компонентам системы (RAM, ROM, все периферийные микросхемы).
— ША (сигналы A0-A15 на общей шине схемы) подключена к ROM, RAM и к ряду других узлов.
— ШУ включает в себя сигналы MREQ, IORQ, RD, WR.
— Резисторы R39-R46 обеспечивают нагрузочную способность ШД и позволяют «не думать» о входных-выходных токах, количестве и типах микросхем, «сидящих» на ШД. Такие же резисторы нередко устанавливают и на шине адреса.
Работа с памятью и периферийными устройствами
Процессор обращается к памяти и ко всем периферийным устройствам (ПУ) с помощью одних и тех же шин данных и адреса. Т.е. ША может указывать как адрес ячейки в памяти, так и адрес какого-то ПУ.
Память/ПУ различаются с помощью инверсных сигналов MREQ и IORQ. MREQ=0 означает, что процессор обращается к памяти. IORQ=0 – обращение к ПУ.
Поэтому на микросхемы ROM/RAM так или иначе заводятся сигнал MREQ, а на узлы периферии – сигнал IORQ.
Инверсные сигналы RD и WR показывают, какую операцию проводит CPU – чтение (RD=0), либо запись (WR=0).
Эти сигналы инверсные у всех процессоров и у всех микросхем, поэтому никогда не возникает каких-либо сложностей с их стыковкой.
Выбор (активизация) тех или иных микросхем происходит сигналами выборки CS (Chip Select). Они всегда инверсные, т.е. когда CS =1, микросхема неактивна (не реагирует на другие сигналы, её ШД в 3 состоянии), а когда CS = 0, она активизируется, реагирует на остальные сигналы и передаёт/принимает данные процессора.
В «полноценных» схемах эти сигналы формируются специальным адресным дешифратором, который формирует CS той или иной микросхемы только в одном-единственном случае, когда на ША появится нужный адрес. Это исключает разного рода ложные срабатывания.
Схема на рис.9 в этом смысле является сильно упрощённой, для формирования сигналов CS используются элементы ИЛИ DD1.1A, DD7.2B, DD7.4B. Такое решение, конечно, проще и дешевле полного адресного дешифратора, учитывающего состояние всех 16 линий ША, но приводит к тому, что, например, DD5 будет активизироваться при любом адресе, в котором линия A6=0. Т.е. она имеет не один адрес, а много. Потому такой способ годится при построении относительно простых, фиксированных схем, не предполагающих добавление каких-либо узлов и, в общем случае, считается существенным недостатком.
Можно заметить, что на микросхемы DD5 и DD6 заведены линии A3 и A4 ША. Это означает, что в самих микросхемах есть до 4 разных регистров, которые адресуются разными сочетаниями значений на этих линиях. Их дешифрация выполняется в самих микросхемах. Поэтому, 4 адреса 1111111110100xxx .. 1111111110111xxx относятся к микросхеме DD5. Стоит отметить, что обычно для этих целей используются линии A1 и A0.
Более подробно – см. специализированную литературу по микропроцессорам и МП системам.
- Как компьютер выполняет арифметические действия над целыми числами
- Алгоритмы умножения
- Алгоритмы деления – 1, 2
- Алгоритм умножения Бута (Википедия)
- Битовый сдвиг
Автор: Павел Негробов (hd44780)
Теги:
Негробов Павел
Опубликована: 2012 г.
0
0
Вознаградить Я собрал 0 0
Оценить статью
- Техническая грамотность
Как работает процессор

Чтобы непрофессионалу стало понятно, как работает центральный процессор компьютера, рассмотрим из каких блоков он состоит:
— блок управления процессором;
— регистры команд и данных;
— арифметико-логические устройства (выполняют арифметические и логические операции);
— блок операций с действительными числами, то есть с числами с плавающей точкой или проще говоря с дробями (FPU);
— буферная память (кэш) первого уровня (отдельно для команд и данных);
— буферная память (кэш) второго уровня для хранения промежуточных результатов вычислений;
— в большинстве современных процессоров имеется и кэш третьего уровня;
— интерфейс системной шины.
Принцип работы процессора

Алгоритм работы центрального процессора компьютера можно представить как последовательность следующих действий.
— Блок управления процессором берет из оперативной памяти, в которую загружена программа, определенные значения (данные) и команды которые необходимо выполнить (инструкции). Эти данные загружаются в кэш-память процессора.
— Из буферной памяти процессора (кэша) инструкции и полученные данные записываются в регистры. Инструкции помещаются в регистры команд, а значения в регистры данных.
— Арифметико-логическое устройство считывает инструкции и данные из соответствующих регистров процессора и выполняет эти команды над полученными числами.
— Результаты снова записываются в регистры и если вычисления закончены в буферную память процессора. Регистров у процессора совсем немного, поэтому он вынужден хранить промежуточные результаты в кэш-памяти различного уровня.
— Новые данные и команды, необходимые для расчетов, загружаются в кеш верхнего уровня (из третьего во второй, из второго в первый), а неиспользуемые данные наоборот в кэш нижнего уровня.
— Если цикл вычислений закончен, результат записывается в оперативную память компьютера для высвобождения места в буферной памяти процессора для новых вычислений. То же самой происходит при переполнении данными кэш-памяти: неиспользуемые данные перемещаются в кеш нижнего уровня или в оперативную память.
Последовательность этих операций образует операционный поток процессора. Во время работы процессор сильно нагревается. Чтобы этого не происходило нужно своевременно делать чистку ноутбука на дому.
Чтобы ускорить работу центрального процессора и увеличить производительность вычислений, постоянно разрабатывают новые архитектурные решения, увеличивающие КПД процессора. Среди них конвейерное выполнение операций, трассировка, то есть попытка предвидеть дальнейшие действия программы, параллельная отработка команд (инструкций), многопоточность а также многоядерность.
Многоядерный процессор имеет несколько вычислительных ядер, то есть несколько арифметико-логических блоков, блоков вычислений с плавающей точкой и регистров, а также кэш первого уровня, объединенных каждый в свое ядро. Ядра имеют общую буферную память второго и третьего уровня. Появление кэш-памяти третьего уровня как раз и было вызвано многоядерностью и соответственно потребностью в большем объеме быстрой буферной памяти для хранения промежуточных результатов вычислений.
Основными показателями, влияющими на скорость обработки данных процессором является число вычислительных ядер, длина конвейера, тактовая частота и объем кэш памяти. Чтобы увеличить производительность компьютера часто требуется сменить именно процессор, а это влечет и замену материнской платы и оперативной памяти. Выполнить апгрейд, настройку и ремонт компьютера на дому в Москве помогут специалисты нашего сервисного центра, если вас пугает процесс самостоятельной сборки и модернизации компьютера.
Как работает процессор?
Кратко и доступно о том, как работает центральный процессор, регистры, память, инструкции и кэш, а также что такое УУ и АЛУ и зачем они нужны.
Инструмент проще, чем машина. Зачастую инструментом работают руками, а машину приводит в действие паровая сила или животное.
Компьютер тоже можно назвать машиной, только вместо паровой силы здесь электричество. Но программирование сделало компьютер таким же простым, как любой инструмент.
Процессор — это сердце/мозг любого компьютера. Его основное назначение — арифметические и логические операции, и прежде чем погрузиться в дебри процессора, нужно разобраться в его основных компонентах и принципах их работы.
Два основных компонента процессора
Устройство управления
Устройство управления (УУ) помогает процессору контролировать и выполнять инструкции. УУ сообщает компонентам, что именно нужно делать. В соответствии с инструкциями он координирует работу с другими частями компьютера, включая второй основной компонент — арифметико-логическое устройство (АЛУ). Все инструкции вначале поступают именно на устройство управления.
Существует два типа реализации УУ:
- УУ на жёсткой логике (англ. hardwired control units). Характер работы определяется внутренним электрическим строением — устройством печатной платы или кристалла. Соответственно, модификация такого УУ без физического вмешательства невозможна.
- УУ с микропрограммным управлением (англ. microprogrammable control units). Может быть запрограммирован для тех или иных целей. Программная часть сохраняется в памяти УУ.
УУ на жёсткой логике быстрее, но УУ с микропрограммным управлением обладает более гибкой функциональностью.
Арифметико-логическое устройство
Это устройство, как ни странно, выполняет все арифметические и логические операции, например сложение, вычитание, логическое ИЛИ и т. п. АЛУ состоит из логических элементов, которые и выполняют эти операции.
Большинство логических элементов имеют два входа и один выход.
Ниже приведена схема полусумматора, у которой два входа и два выхода. A и B здесь являются входами, S — выходом, C — переносом (в старший разряд).
Схема арифметического полусумматора
Хранение информации — регистры и память
Как говорилось ранее, процессор выполняет поступающие на него команды. Команды в большинстве случаев работают с данными, которые могут быть промежуточными, входными или выходными. Все эти данные вместе с инструкциями сохраняются в регистрах и памяти.
Регистры
Регистр — минимальная ячейка памяти данных. Регистры состоят из триггеров (англ. latches/flip-flops). Триггеры, в свою очередь, состоят из логических элементов и могут хранить в себе 1 бит информации.
Прим. перев. Триггеры могут быть синхронные и асинхронные. Асинхронные могут менять своё состояние в любой момент, а синхронные только во время положительного/отрицательного перепада на входе синхронизации.
По функциональному назначению триггеры делятся на несколько групп:
- RS-триггер: сохраняет своё состояние при нулевых уровнях на обоих входах и изменяет его при установке единице на одном из входов (Reset/Set — Сброс/Установка).
- JK-триггер: идентичен RS-триггеру за исключением того, что при подаче единиц сразу на два входа триггер меняет своё состояние на противоположное (счётный режим).
- T-триггер: меняет своё состояние на противоположное при каждом такте на его единственном входе.
- D-триггер: запоминает состояние на входе в момент синхронизации. Асинхронные D-триггеры смысла не имеют.
Для хранения промежуточных данных ОЗУ не подходит, т. к. это замедлит работу процессора. Промежуточные данные отсылаются в регистры по шине. В них могут храниться команды, выходные данные и даже адреса ячеек памяти.
Принцип действия RS-триггера
Память (ОЗУ)
ОЗУ (оперативное запоминающее устройство, англ. RAM) — это большая группа этих самых регистров, соединённых вместе. Память у такого хранилища непостоянная и данные оттуда пропадают при отключении питания. ОЗУ принимает адрес ячейки памяти, в которую нужно поместить данные, сами данные и флаг записи/чтения, который приводит в действие триггеры.
Прим. перев. Оперативная память бывает статической и динамической — SRAM и DRAM соответственно. В статической памяти ячейками являются триггеры, а в динамической — конденсаторы. SRAM быстрее, а DRAM дешевле.
Команды (инструкции)
Команды — это фактические действия, которые компьютер должен выполнять. Они бывают нескольких типов:
- Арифметические: сложение, вычитание, умножение и т. д.
- Логические: И (логическое умножение/конъюнкция), ИЛИ (логическое суммирование/дизъюнкция), отрицание и т. д.
- Информационные: move , input , outptut , load и store .
- Команды перехода: goto , if . goto , call и return .
- Команда останова: halt .
Прим. перев. На самом деле все арифметические операции в АЛУ могут быть созданы на основе всего двух: сложение и сдвиг. Однако чем больше базовых операций поддерживает АЛУ, тем оно быстрее.
Инструкции предоставляются компьютеру на языке ассемблера или генерируются компилятором высокоуровневых языков.
В процессоре инструкции реализуются на аппаратном уровне. За один такт одноядерный процессор может выполнить одну элементарную (базовую) инструкцию.
Группу инструкций принято называть набором команд (англ. instruction set).
Тактирование процессора
Быстродействие компьютера определяется тактовой частотой его процессора. Тактовая частота — количество тактов (соответственно и исполняемых команд) за секунду.
Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард операций в секунду.
Чтобы уменьшить время выполнения программы, нужно либо оптимизировать (уменьшить) её, либо увеличить тактовую частоту. У части процессоров есть возможность увеличить частоту (разогнать процессор), однако такие действия физически влияют на процессор и нередко вызывают перегрев и выход из строя.
Выполнение инструкций
Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.
Ниже рассмотрен пример набора команд, который суммирует два числа:
- LOAD_A 8 . Это команда сохраняет в ОЗУ данные, скажем, . Первые 4 бита — код операции. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкцию load_A — поместить данные 1000 (последние 4 бита команды) в регистр A .
- LOAD_B 2 . Ситуация, аналогичная прошлой. Здесь помещается число 2 ( 0010 ) в регистр B .
- ADD B A . Команда суммирует два числа (точнее прибавляет значение регистра B в регистр A ). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистр A .
- STORE_A 23 . Сохраняем значение регистра A в ячейку памяти с адресом 23 .
Вот такие операции нужны, чтобы сложить два числа.
Шина
Все данные между процессором, регистрами, памятью и I/O-устройствами (устройствами ввода-вывода) передаются по шинам. Чтобы загрузить в память только что обработанные данные, процессор помещает адрес в шину адреса и данные в шину данных. Потом нужно дать разрешение на запись на шине управления.
Кэш
У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше.
Если данные в кэше и памяти не совпадают, то они помечаются грязными битами (англ. dirty bit).
Поток инструкций
Современные процессоры могут параллельно обрабатывать несколько команд. Пока одна инструкция находится в стадии декодирования, процессор может успеть получить другую инструкцию.
Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.
Если процессор многоядерный, это означает, что фактически в нём находятся несколько отдельных процессоров с некоторыми общими ресурсами, например кэшем.
Функционирование и синтез цифровых устройств. Часть 4
В этой части рассматриваются основы построения процессорной и микропроцессорной электроники. Мы не будем описывать какие-либо устройство и работу реальных микропроцессоров, т.к. их существует очень много, и, кроме того, есть немало специализированной литературы, посвящённой тем или иным моделям процессоров или их семействам. Кроме того, процессоры – устройства, в которых очень тесно переплетаются электроника и программные аспекты. Вместо этого мы опишем общие принципы их функционирования, присущие всем им, вне зависимости от их мощности, частоты, разрядности и пр. технических характеристик. Некоторые аспекты могут отличаться от приведенного описания, но, в целом, суть всегда одна и та же. Вопросы программирования также рассматриваться не будут, т.к. выходят за рамки этой статьи. Основная цель любого процессора – обработка числовых данных. Здесь не будет идти речь о специализированных цифровых сигнальных процессорах (DSP). В любом случае они строятся на основе цифрового ядра, обрамлённого какими-то аналоговыми узлами (АЦП, ОУ, компараторы, фильтры и т.д. и т.п). Вначале, как обычно, немного терминологии. Процессор (центральный процессор, ЦП, англ. CPU – Central Processing Unit) – изначально и дословно – вычислитель, исполнитель машинных инструкций (команд). Но d последнее время это понятие очень разрослось, и им нередко называют достаточно большой спектр конструкций и устройств – начиная от микропроцессоров в виде одной микросхемы и заканчивая готовыми модулями, содержащими в своём составе и процессор как таковой и какой-то набор вспомогательных периферийных устройств. Микропроцессор – обычно одна микросхема, содержащая в себе все необходимые для работы узлы (регистры, АЛУ, УУ). Частота – частота тактовых сигналов, которые подаются на узлы процессора для обеспечения его синхронизации. Разрядность – кол-во бит данных, которое процессор может обработать за одну команду. Иногда её определяют как ширину ШД процессора. За всю историю развития вычислительной техники существовали (и существуют) 4, 8, 16, 32 и 64 разрядные процессоры. Но следует иметь в виду, что здесь не так всё просто. Многие 16 и 32 разрядные процессоры имеют массу команд для обработки 8-битных данных, а 64-битные способны обрабатывать и 32, и 16, и 8 разрядные данные. Даже процессоры, позиционируемые фирмами-изготовителями как 8-битные, иногда могут производить действия с 16-разрядными операндами. Так, например, достаточно древний микропроцессор Z80 может обмениваться с памятью словами (2 байта) и производить над ними арифметические действия, хоть он 8-разрядный. С шириной ШД тоже не так всё просто. Например, широко известный процессор i8088 является полным клоном 16-разрядного i8086, с той лишь разницей, что у него 8-битная внешняя ШД. Объём адресуемой памяти – какое кол-во памяти может адресовать процессор. Максимальный объём равен 2 n , где n – разрядность шины адреса ША. Но, в некоторых случаях, может быть меньше этой величины. Чипсет (англ. chipset) – набор микросхем поддержки процессора. В русскоязычной литературе также распространён термин «микропроцессорный комплект». Раньше в этот набор входил сам микропроцессор (либо микропроцессорные секции – см. ниже) и все вспомогательные микросхемы – специализированные генераторы, интерфейсы, какие-то регистры и пр. Существуют и другие понятия, они будет раскрываться по ходу повествования.
Раздел 1. Архитектура микропроцессорных систем
- CPU – сам процессор;
- ROM – ПЗУ, хранящее программу, по которой работает CPU;
- RAM – ОЗУ, используемое процессором для размещения каких-то временных данных;
- Периферия – какие-то внешние устройства, с которыми работает процессор. Сюда относится всё – клавиатуры, интерфейсы, индикация и пр.
Отметим, что приведенная структура – классическая, и достаточно древняя. Современные архитектуры имеют некоторые отличия и усовершенствования, призванные увеличить быстродействие системы в целом. Но идеи и основные принципы их функционирования ничем не отличаются от классического варианта.
Существует 2 основные варианта архитектур МП систем – гарвардская и Фон-Неймановская.
Гарвардская архитектура предполагает раздельное хранение программы и данных — рис. 2.
Рис. 2. Гарвардская архитектура
Эта архитектура предполагает, что программы, исполняемые CPU, хранятся ТОЛЬКО в ROM. Исполнять что-либо из RAM процессор не может. Т.е. RAM – 100% память данных. Их так иногда и называют – память программ и память данных. В ROM тоже могут храниться какие-то данные, но это могут быть только фиксированные константы, определённые на этапе разработки программы. Изменяться в процессе работы они не могут.
Физически ROM «сидит» на своих собственных шинах, не связанных с общими шинами. Это несколько ускоряет выполнение команд, т.к. процессор может распараллеливать работу с ROM/RAM, но усложняет конечную схему и не позволяет «на лету» менять исполняемые программы либо подгружать откуда-то новые.
Адресация ROM/RAM совершенно разная, независимая друг от друга, и может частично или полностью перекрываться. Т.е., например, ячейка с адресом 0 может существовать и в ROM, и в RAM. Это не приводит к появлению каких-то ошибок, порче данных и пр.
По такой схеме строятся многие микроконтроллеры (x51, AVR, PIC, …), в которых программа (прошивка) хранится в ПЗУ микроконтроллера и не может быть изменена на ходу.
Фон-неймановская архитектура совпадает c общей – рис. 1.
Фон-неймановский процессор может исполнять программы из ROM и из RAM. Оба вида памяти находятся в одном адресном пространстве процессора и абсолютно равнозначны для процессора. При этом он даже сам «не знает», откуда «родом» программа, которую он выполняет. При этом процессор может совершенно безболезненно переходить ROMRAM, что широко используется для организации в ROM различных стандартных библиотек функций и пр. Попытки записи в ROM не вызывают никаких ошибок, подобные операции просто игнорируются соответствующими микросхемами.
Данные и программы хранятся в одной и той же памяти, они никак не отличимы друг от друга, просто разнесены по разным адресам. Поэтому, такие процессоры способны полноценно исполнять любые данные как программу, что повсеместно применяется для загрузки в память программ из каких-то внешних носителей.
ROM и RAM должны быть аппаратно разнесены по разным (непересекающимся) адресам памяти, иначе данные, считываемые из них неизбежно «перемешаются» на общей ШД и возникнут ошибки.
Недостатки архитектуры – невозможность распараллелить выборку команд и данных (решается введением системы очередей команд и различного кэширования), возможность исполнить данные, не являющиеся программой как программу (разные процессоры защищаются от этого по-разному)). Но, несмотря на эти недостатки, данная архитектура очень широко распространена.
Так, очень многие процессоры, начиная, например, от очень старых i8080, Z80 и заканчивая современными Core i5, i7 и т.д. и т.п. имеют фон-неймановскую архитектуру. Кроме того, в основе многих ARM микроконтроллеров лежит фон-неймановское ядро.
RISC и CISC процессоры
RISC – Reduced Instruction Set computer – дословно – компьютер с упрощённым (урезанным) набором команд.
В таких процессорах используется система таких команд, которые ядро процессора может максимально быстро декодировать и исполнить. В таких системах команд обычно отсутствуют сложные команды типа деления, умножения, а также команды, извлекающие операнд(ы) из памяти, что-то с ними выполняющие и возвращающие результат обратно в память. Такие операции необходимо разбивать на несколько простых, типа «загрузить операнд 1 из памяти в регистр A», «загрузить операнд 2 из памяти в регистр B», «сложить содержимое регистров A и B, поместив сумму в регистр C», «передать содержимое регистра C в память» и пр.
CISC – Complex Instruction Set computer – дословно – компьютер с комплексным набором команд.
Система команд характеризуется разной длиной команды, наличием сложных команд (деление, умножение, возможность работы с памятью одновременно с какой-либо операцией) и пр. Но, в то же время, в CISC архитектурах есть и простые «RISC» команды и никто не запрещает «писать программы в стиле RISC».
Но в современном мире грани между RISC и CISC постепенно стираются. Так, например, многие современные RISC процессоры (это, в основном, микроконтроллеры) имеют составе своей системы команд умножение и деление целых чисел, хоть эти операции по определению являются частью CISC архитектур и т.д.
Микропроцессоры и микроконтроллеры
Несмотря на то, что многие путают эти понятия, часто называя микроконтроллер микропроцессором, или просто процессором, это несколько разные вещи и между ними есть довольно существенная разница.
Процессор и микропроцессор – ЭВМ общего назначения, т.е. это 100% вычислитель, в нём нет никакой памяти (кроме некоторого минимально необходимого количества регистров) – ни ROM, ни RAM, ни какой-либо периферии, ни даже тактового генератора. Т.е. любая система (даже самая простейшая) на базе микропроцессора в обязательном порядке должна содержать, кроме самого микропроцессора, тактовый генератор, ROM и RAM, пусть даже каких-то минимальных объёмов.
Любой микроконтроллер (МК) – ЭВМ специального назначения. Он всегда содержит в своём составе и генератор, и ROM с программой, и RAM, и некоторую периферию (таймеры-счётчики, АЦП и пр.). Поэтому он, в принципе, всегда работоспособен сам по себе, без каких-либо внешних схем и узлов. Также в МК обычно гораздо больше регистров по сравнению с обычными микропроцессорами.
Секционные процессоры или процессорные секции
Процессорные секции обычно не являются процессорами в прямом смысле этого термина. Как правило это просто АЛУ и набор каких-то необходимых регистров и возможностью объединения в цепочки для наращивания разрядности. Они не содержат средств работы с памятью, выборки команд и пр. Для построения на их основе полноценного процессора необходима разработка устройства управления и прочих узлов.
Также, микропроцессорные комплекты, содержащие секции часто содержат в себе некоторые узкоспециализированные микросхемы (например, схемы ускоренного переноса для повышения быстродействия многоразрядных процессоров на базе этих секций). Здесь мы не будем рассматривать эти вопросы.
Раздел 2. Внутренняя архитектура процессоров
Рассмотрим внутреннюю архитектуру процессора на примере микропроцессора Z80 – рис. 3.

Рис. 3. Архитектура процессора Z80 (с сайта Википедии)
Конечно, разные процессоры имеют разную архитектуру, разный набор внутренних регистров и пр., но основные моменты остаются неизменны.
Основные узлы процессора – АЛУ, набор регистров (розовые прямоугольники на схеме), управляющее устройство и вспомогательные узлы.
«Сердце» процессора – АЛУ (арифметико-логическое устройство, англ. ALU). Именно оно выполняет 95% всех операций. Регистры хранят небольшой объём текущих данных, с которыми работает процессор. Управляющее устройство обеспечивает управление узлами процессора, работу с памятью и декодирование команд.
Разрядность каждого регистра совпадает с разрядностью ШД процессора, хотя это не всегда так. Очень часто регистры могут попарно «объединяться», образуя регистры удвоенной или учетверённой разрядности. Так, например, в том же Z80 8-разрядные регистры B/C, D/E, и H/L могут использоваться как по отдельности, так и в виде 16-разрядных регистров BC, DE и HL.
Среди регистров, хранящих данные, часто один стоит «особняком». Это т.н. аккумулятор. На рис. 3 это регистр A. Его особенность заключается в том, что он всегда представляет собой один из операндов любой операции, выполняемой АЛУ, и всегда служит получателем результата любой операции. В более развитых структурах (и во многих микроконтроллерах) аккумулятором может служить любой другой регистр. Аккумулятор тоже может быть разной разрядности.
Регистр F – регистр флагов. Этот регистр никогда не принимает никакого участия в обмене данными, он содержит набор битов, которые показывают состояние АЛУ, а также позволяют управлять поведением процессора в различных ситуациях. Разрядность регистра флагов, в принципе, никак не связана с разрядностью самого процессора, т.к. кол-во флагов обычно гораздо меньше тех же 16, 32 или даже 8 бит данных, которые способен обрабатывать процессор. Но, тем не менее, его разрядность обычно такая же, как и разрядность остальных регистров. Это делается просто для удобства программирования.
Вот наиболее часто встречающихся флагов:
Z (ZF) – флаг нуля (zero flag). Устанавливается в 1, если результат любой операции равен нулю.
C (CF) – флаг переноса (carry flag). Для операций сложения/вычитания показывает перенос/заём, при операциях сдвига используется как доп. бит – см. раздел 3.
P (PF) – флаг чётности (parity flag). Устанавливается в 1, если результат операции содержит чётное кол-во единичных битов. Не путать с чётными/нечётными числами! Это совершенно разные вещи.
S (SF) – флаг знака (sign flag). Равен 1, если результат отрицательный (меньше нуля). Если 0, либо больше нуля, то флаг равен 0. По сути этот флаг – копия знакового бита – см. раздел 3.
I (IF) – флаг разрешения прерываний (interrupt flag). Если равен 1, то процессор будет реагировать на прерывания – см. специализированную литературу. 0 – прерывания запрещены.
AC – флаг дополнительного переноса (auxiliary carry flag). То же самое, что и CF, но показывает перенос/заём между «половинками» операндов. Если, например, складываются 8-битные числа, то AC покажет перенос между 3 и 4 битами.
OF — переполнение (overflow flag). 1 свидетельствует о переполнении разрядной сетки. Иными словами – слишком большой или слишком маленький результат.
Существуют также и другие флаги.
Раздел 3. Типы данных и операции, выполняемые АЛУ
Перед тем, как рассматривать внутреннюю структуру АЛУ, необходимо сказать несколько слов об операциях, выполняемых им и о типах данных. С одной стороны может показаться, что эта тема относится к программированию, а не к электронике, но, в то же время, без понимания этих вещей сложно представить себе работу всего процессора в целом.
Начнём с типов данных.
Все числа, обрабатываемые процессорами можно разбить на 2 категории (как, собственно и в математике) – целые и вещественные.
Вещественные числа мы рассматривать не будем, т.к. они часто обрабатываются не основным АЛУ, а специализированными устройствами (различными арифметическими сопроцессорами), да и все алгоритмы операций над такими числами всегда сводятся к целочисленным операциям. В специализированной литературе по программированию старых 8-разрядных процессоров типа i8080, K580, Z80 и аналогичных эти алгоритмы описаны достаточно хорошо, а их аппаратные реализации не сильно отличаются от программных.
В свою очередь, целые числа делятся на знаковые и беззнаковые. Такое деление обусловлено разными форматами хранения этих чисел, а также некоторыми нюансами их обработки. Беззнаковые числа и ноль всегда считаются положительными.
На рис. 4 представлен общий формат знаковых и беззнаковых чисел.

Рис. 4. Формат 8-битных беззнаковых (а) и знаковых (б) чисел
Видно, что в беззнаковом формате все биты отводятся под число, а в знаковом формате старший бит показывает знак числа. Этот бит называют знаковым битом.
При этом принято S=0 для положительных чисел и нуля, S=1 для отрицательных. Также можно заметить, что n-разрядное беззнаковое число может находиться в диапазоне от 0 до 2 n -1, а знаковое – от -2 n-1 до +2 n-1 . Например, беззнаковое 8-битное число лежит в диапазоне 0..255, а знаковое -127 .. +127.
Числа со знаком могут быть представлены в трёх разных видах – прямой код (ПК), обратный код (ОК) и дополнительный код (ДК). Рассмотрим их.
Прямой код (ПК)
Число хранится «как есть», т.е. в битах d6-d0 всегда записан модуль числа в неизменном виде, меняется только бит S, задавая знак числа. Это самый простой и наглядный способ, однако он крайне неудобен при выполнении различных операций (для сложения и вычитания требуются разные схемы, результирующий перенос надо брать не из старшего разряда, а из предыдущего, сложно формировать знак результата и т.п.) и, поэтому, нигде не применяется.
Обратный код (ОК)
Положительные числа хранятся в ПК, модуль отрицательных чисел хранится в инвертированном виде. Например: +15= 00001111, -107= 10010100. Старший бит – знак, все остальные биты числа -107 проинвертированы (для примера +107=01101011). Здесь имеет место особенность: существует два нуля – положительный (00000000) и отрицательный (11111111). При работе с ОК это следует иметь в виду.
Дополнительный код (ДК)
Положительные числа хранятся в ПК, модуль отрицательных чисел хранится в инвертированном виде +1. Например: -107= 10010101. Старший бит – знак, все остальные биты числа -107 проинвертированы, и к инверсии прибавлена 1. Здесь ноль, как и положено, только один – положительный.
Многобайтовые числа
Как видно, один байт – очень малая величина для многих применений. Даже результат простого сложения двух однобайтовых чисел очень часто может выйти за границу 8-байтов, не говоря уж об умножении.
АЛУ может выполнять операции над операндами только определённой длины, которая задаётся разрядностью конкретного процессора и набором его команд. Как правило это 8, 16, 32 или 64 бита. Для более длинных чисел применяются специальные программные алгоритмы.
Многие процессоры имеют команды для работы с данными, находящимися в RAM/ ROM системы. Если размещение одного байта в памяти вполне очевидно и однозначно, то с многобайтными числами возможны варианты.
В настоящее время общепринятыми являются 2 варианта размещения байтов в памяти:
1. Младшими байтами вперёд. Младший байт числа занимает в памяти меньший адрес (т.е. идёт первым). Например, 4-байтовое число 98675FDFh (в шестнадцатеричном виде) будет размещено «задом наперёд»: DFh, 5Fh, 67h, 98h. Эта схема получила название «маленький индеец» (англ. little endian) или обратный порядок байтов.
2. Старшими байтами вперёд. Младший байт занимает больший адрес. То же самое число 98675FDFh будет записано в память как 98h, 67h, 5Fh, DFh. Этот способ называется «большой индеец» (англ. big endian), прямой порядок байтов.
При этом порядок битов в каждом байте никогда не меняется.
В системе маленького индейца работают, например, все процессоры Intel, AMD, микроконтроллеры Atmel AVR, ARM и т.д.
Большого индейца используют некоторые процессоры фирм IBM, Motorola, SPARC.
Примеры выполнения операций сложения/вычитания над числами в ОК и ДК очень подробно рассмотрены в [1]. Мы не будем здесь их повторять.
Из этих примеров видно, что благодаря применению этих кодов вычитатель не требуется (достаточно одного сумматора), что несколько упрощает АЛУ процессора. Но, т.к. операции в ДК выполняются проще и быстрее, то именно этот вид кодирования стал стандартом де-факто и применяется во всех процессорах, контроллерах и пр.
Умножение и деление, как уже указывалось выше, являются сложными составными операциями, состоящими из цикла, в котором определённое кол-во раз повторяются операции сложения (для умножения) / вычитания (для деления) и сдвига (см. ниже). Существует несколько основных алгоритмов выполнения этих операций – [2], [3]. Для умножения существует и несколько видоизменённых, т.н. «ускоренных» версий алгоритма, наиболее распространённая – алгоритм Бута – [4].
Ускорения основаны на том, что на каждом шаге обычный алгоритм всегда анализирует один бит множителя, а ускоренные – 2 бита. Но подобный подход оправдан в аппаратных реализациях, в программных же он только усложнит и запутает программу.
Следует отметить, что не всегда процессоры имеют возможность аппаратного умножения.
Логические операции – AND, OR, NOT, XOR. Ничем не отличаются от простых однобитовых операций, рассмотренных в 1-й части статьи. Знак числа в этих операциях никогда не учитывается, все биты операндов обрабатываются совершенно независимо друг от друга.
Сдвиг. Операция, при которой биты числа сдвигаются вправо или влево на один или более бит – [5]. Всегда имеет один операнд.
Кроме направления сдвиги разделяются на несколько подвидов: логические (рис. 5), арифметические (рис 6) и циклические (рис 7).

Рис.5. Логический сдвиг

Рис. 6. Арифметический сдвиг

Рис. 7. Циклический сдвиг
Как видно, сдвиги – простейшие логические операции, для выполнения которых даже не нужны никакие логические схемы. Сдвигатели на один разряд – просто набор проводов. Некоторые процессоры могут сдвигать операнд на несколько бит. Схемотехника подобного сдвигателя может быть разной, начиная от набора однобитовых сдвигателей и заканчивая некими специальными лог. схемами.
В операциях сдвига всегда очень широко используется вышеупоминавшийся флаг переноса C (CF). При сдвиге в освобождающийся бит заносится значение этого флага, а также, выпадающий слева или справа бит не теряется, а попадает в CF, что позволяет его затем анализировать. В ряде случаев подобный подход может оказаться проще, чем, например, проверять биты операцией AND с какими-то масками.
Операции сдвига могут служить и простыми и быстрыми операциями деления и умножения. Дело в том, что сдвиг любого числа влево на один разряд эквивалентен умножению его на 2, вправо – делению на 2.
Арифметические сдвиги применяются при работе со знаковыми числами.
Прочие операции. Ряд процессоров могут содержать какие-то дополнительные операции, например, манипулирования отдельными битами (очень часто встречается в микроконтроллерах), операции с многобайтными числами, циклический сдвиг числа через флаг переноса (например, сдвигаемый 8-разрядный регистр совместно с флагом CF представляется как 9-разрядный и сдвигается как 9-разрядный) и пр.
Программы, машинные коды и язык ассемблера.
Поведение любого процессора (микропроцессора, микроконтроллера) всегда задаётся программой. Без программы процессор совершенно неработоспособен.
Программа с точки зрения процессора – просто набор байтов, которые он интерпретирует как команды и исполняет их.
Набор команд, их кодировка, формат и пр. всегда разные у разных процессоров. Конечно, существуют семейства схожих друг с другом процессоров, имеющих одни и те же команды в одном и том же формате, но разные модели процессоров могут иметь некоторые дополнительные команды и пр. Например, семейство процессоров Intel x86 включает в себя достаточно много конкретных моделей (8086, 8088, 80286, 80386 и т.д и т.п), а также великое множество их аналогов других фирм-разработчиков. При этом действует одно общее правило – более старший процессор всегда может выполнить программу, написанную для более младшего, но не наоборот. Так, например, 80286 процессор всегда выполнит программу для 8086 процессора, а 8086-й выполнить программу для 80286 может далеко не всегда, т.к. 80286 имеет множество дополнительных команд и возможностей, которых в 8086 просто нет и т.д.
Также следует иметь в виду то, что структуры и схемы конкретных вычислительных систем могут отличаться, даже если они построены на близких процессорах (или даже на одном и том же процессоре). Более подробно – см. раздел 5.
Набор байтов программы иногда называют машинными кодами.
Т.к. человеку-программисту крайне неудобно работать непосредственно с кодами команд, то был разработан специальный язык программирования – ассемблер. В основе языка ассемблера лежат некие словесные эквиваленты машинных кодов. При этом приняты ряд достаточно удобных правил – регистры и флаги обозначаются именами, команда, например, сложения всегда называется, например, add, независимо от того, что она складывает – регистр с регистром или регистр с константой и пр.
Конечно, следует чётко знать и понимать, что и машинные коды, и соответствующий им язык ассемблера всегда жёстко привязаны к конкретной архитектуре либо модели процессора. Поэтому, если мы, например возьмём программу, работающую, например, на процессоре i8086 и без каких-либо изменений запустим её на каком-нибудь микроконтроллере Atmel AVR (или наоборот), то работать она не будет, т.к. это две совершенно разные архитектуры и два совершенно разных процессора. Даже несмотря на то, что они оба во многом похожи друг на друга – умеют складывать и вычитать числа, выполнять какие-то переходы в памяти и пр.
Раздел 4. Структура АЛУ
В общем случае АЛУ это набор отдельных логических схем (сумматоры, сдвигатели и пр.). На входах АЛУ часто установлены мультиплексоры, позволяющие подавать на тот или иной вход АЛУ данные из разных источников (внутренние регистры, ШД и т.д.). Выходы схем заводятся на выходной мультиплексор, который собственно и определяет выполняемую АЛУ операцию.
Разрядность всех схем и мультиплексоров обычно одинакова.
Управляющее устройство процессора всегда задаёт тип операции (активизируя одну из логических схем), управляет входными/выходными мультиплексорами и пр.
Примерная (обобщённая) структура АЛУ показана на рис. 8.

Рис. 8. Обобщённая структура АЛУ.
Верхний мультиплексор обеспечивает подачу в логическую часть АЛУ входных данных из разных источников, нижний выдаёт на выходную шину результат из той или иной схемы. По сути, именно нижний мультиплексор определяет операцию, выполняемую АЛУ.
Отметим ещё раз, что конкретная структура АЛУ у разных процессоров разная, может включать различные дополнительные компоненты.
Так, например, в старых микропроцессорных секциях (например, К1804ВС1/ВС2) на выходе АЛУ довольно часто встречался дополнительный сдвиговый регистр, который упрощал реализацию алгоритмов умножения/деления и ускорял эти операции за счёт того, что АЛУ могло выполнять одновременно 2 операции – сложение/вычитание и сдвиг влево/вправо. А т.к. именно такие пары используются при умножении/делении, то эти действия можно было выполнить одной командой, а не двумя, что несколько ускоряло эти операции.
В современных процессорах АЛУ гораздо более сложное. Так, современные процессоры Intel имеют специальные команды, обрабатывающие одновременно не 2 операнда, а больше, способны работать с плавающей точкой и т.д. и т.п.
Раздел 5. Пример схемы с использованием микропроцессора
В завершение данной части рассмотрим основные вопросы и аспекты построения микропроцессорных систем на примере АОНа на Z80. Данная конструкция была популярна в 80-90 х годах прошлого века. Несмотря на её древность и, м.б. нынешнюю неактуальность, на ней очень отчётливо видны все основные моменты построения подобных систем.
Мы не будем рассматривать целиком всю схему этого АОНа, это выходит за рамки статьи, рассмотрим лишь его процессорную часть – рис. 9.

Рис. 9. Схема процессорной части АОНа на Z80.
На схеме мы видим:
- DD2 – микропроцессор Z80.
- Схема формирования сброса – VD40, C1, R1 и пр. Цель этого узла – сбросить процессор в начальное состояние при включении питания. Стоит отметить, что многие микроконтроллеры уже имеют родственную схему в своём составе, поэтому делать эту схему для них необязательно.
- Генератор тактовых импульсов частотой 4 MHz для процессора – DD1.1, DD1.2, DD8 и окружающая «рассыпуха». Счётчик DD8, в принципе не нужен, он используется просто как делитель частоты, если используются разные задающие кварцы.
- DD3 – ПЗУ (ROM). Содержит программу, по которой работает процессор.
- DD4 – RAM. ОЗУ, использующееся процессором для хранения рабочих данных.
- DD5 – специализированная микросхема-таймер.
- DD6 – микросхема ввода-вывода.
- DD10 – регистр данных для индикатора.
Из схемы видны следующие особенности:
— ШД процессора (сигналы D0-D7 на общей шине схемы) подключается одновременно ко всем компонентам системы (RAM, ROM, все периферийные микросхемы).
— ША (сигналы A0-A15 на общей шине схемы) подключена к ROM, RAM и к ряду других узлов.
— ШУ включает в себя сигналы MREQ, IORQ, RD, WR.
— Резисторы R39-R46 обеспечивают нагрузочную способность ШД и позволяют «не думать» о входных-выходных токах, количестве и типах микросхем, «сидящих» на ШД. Такие же резисторы нередко устанавливают и на шине адреса.
Работа с памятью и периферийными устройствами
Процессор обращается к памяти и ко всем периферийным устройствам (ПУ) с помощью одних и тех же шин данных и адреса. Т.е. ША может указывать как адрес ячейки в памяти, так и адрес какого-то ПУ.
Память/ПУ различаются с помощью инверсных сигналов MREQ и IORQ. MREQ=0 означает, что процессор обращается к памяти. IORQ=0 – обращение к ПУ.
Поэтому на микросхемы ROM/RAM так или иначе заводятся сигнал MREQ, а на узлы периферии – сигнал IORQ.
Инверсные сигналы RD и WR показывают, какую операцию проводит CPU – чтение (RD=0), либо запись (WR=0).
Эти сигналы инверсные у всех процессоров и у всех микросхем, поэтому никогда не возникает каких-либо сложностей с их стыковкой.
Выбор (активизация) тех или иных микросхем происходит сигналами выборки CS (Chip Select). Они всегда инверсные, т.е. когда CS =1, микросхема неактивна (не реагирует на другие сигналы, её ШД в 3 состоянии), а когда CS = 0, она активизируется, реагирует на остальные сигналы и передаёт/принимает данные процессора.
В «полноценных» схемах эти сигналы формируются специальным адресным дешифратором, который формирует CS той или иной микросхемы только в одном-единственном случае, когда на ША появится нужный адрес. Это исключает разного рода ложные срабатывания.
Схема на рис.9 в этом смысле является сильно упрощённой, для формирования сигналов CS используются элементы ИЛИ DD1.1A, DD7.2B, DD7.4B. Такое решение, конечно, проще и дешевле полного адресного дешифратора, учитывающего состояние всех 16 линий ША, но приводит к тому, что, например, DD5 будет активизироваться при любом адресе, в котором линия A6=0. Т.е. она имеет не один адрес, а много. Потому такой способ годится при построении относительно простых, фиксированных схем, не предполагающих добавление каких-либо узлов и, в общем случае, считается существенным недостатком.
Можно заметить, что на микросхемы DD5 и DD6 заведены линии A3 и A4 ША. Это означает, что в самих микросхемах есть до 4 разных регистров, которые адресуются разными сочетаниями значений на этих линиях. Их дешифрация выполняется в самих микросхемах. Поэтому, 4 адреса 1111111110100xxx .. 1111111110111xxx относятся к микросхеме DD5. Стоит отметить, что обычно для этих целей используются линии A1 и A0.
Более подробно – см. специализированную литературу по микропроцессорам и МП системам.
- Как компьютер выполняет арифметические действия над целыми числами
- Алгоритмы умножения
- Алгоритмы деления – 1, 2
- Алгоритм умножения Бута (Википедия)
- Битовый сдвиг
Автор: Павел Негробов (hd44780)
Теги:
Негробов Павел
Опубликована: 2012 г.
0
0
Вознаградить Я собрал 0 0
Оценить статью
- Техническая грамотность
Как работает процессор: простыми словами о сложном

Разбираемся в составляющих процессора и выясняем, как они работают
Все современное оборудование, от беспроводных наушников до сложнейших рабочих станций работает под управлением процессора. Каждый из нас знает, что процессор – это мозг устройства, он принимает команды от пользователя, делает вычисления и предоставляет результаты.
Но в тонкостях работы разбираются единицы. В этой статье мы постараемся доступно устранить подобный пробел в знаниях.
Транзисторы и кодирование информации
О том, что первые компьютеры занимали целые комнаты и даже отдельные здания, вы наверняка знаете. Вычисления они производили при помощи электромеханических реле и вакуумных ламп. Революция произошла в 60 годах, когда появились первые кремниевые транзисторы. Позже на их основе были разработаны интегральные монолитные схемы – прототипы современных процессоров.
В основе каждого транзистора находится кремниевая структура. Поскольку кремний – материал, обладающий свойствами полупроводника, в зависимости от условий он может пропускать электрический ток или нет. Прошедший заряд – это единица, отсутствие заряда – ноль. Именно с помощью этих двух значений строится бинарный код, с помощью которого компьютер общается с пользователем. Другую информацию он воспринимать не способен.
И 1, и 0 – это 1 бит информации, 8 бит – составляют байт. При помощи 8-значной комбинации нулей и единиц можно закодировать любое число от 0 до 255. И уже при помощи этих комбинаций присвоить соответствующие коды любым понятиям, значениям и явлениям.
Для того, чтоб процессор понимал пользователя, были придуманы логические вилки (операторы). Мы все их знаем из курса информатики в школе: и/или, если/то/иначе. Такие команды позволяют компьютеру исходя из заданных условий принимать решения.
Что такое техпроцесс?
Производительность процессора в рамках одной серии или семейства напрямую зависит от количества транзисторов: чем больше транзисторов, тем больше комбинаций составляется в единицу времени, и тем больше вычислений производит устройство.
У первого процессора Intel 4004, вышедшего в 1971 году было 2250 транзисторов. Pentium 4 вмещал 42 млн транзисторов. Современные процессоры Epyc от AMD оснащены 39,54 миллиардами кремниевых транзисторов.
С размером транзисторов тесно связано понятие – техпроцесс.
Техпроцесс каждый из производителей диктует по-своему. Кто-то размером транзистора целиком, кто-то размером только одной части – затвора. Третий вариант, который будет самым правильным – размер шага при производстве, то есть минимальным размером элемента, которым может оперировать разработчик при построении схемы. Так же следует учесть, что производители указывают наименьший элемент, тогда как некоторые электронные элементы, от которых невозможно отказаться, могут иметь размеры в десятки раз больше.
Тактовая частота
Это понятие зачастую является определяющим при покупке процессора.
Заряды, проходящие через транзисторы, создает тактовый генератор. Количество импульсов в единицу времени определяет скорость работы процессора. Однако он есть не в каждом процессоре. Может встречаться и другая конфигурация: на плате есть один или несколько тактовых генераторов, и они же могут быть опционально включены в микропроцессоры.
Обязательный элемент каждого процессора – частотный резонатор, он дает корректный отклик на запрос в случае исправности, или не дает, что сообщает системе о неисправности элемента.
В основе каждого генератора имеется кварцевый кристалл. Он генерирует импульс с частотой около 100 МГц. На текущий момент могут еще довольно часто встречаться генераторы с частотой 33 МГц, особенно на дискретных контроллерах, например звуковых платах, sata/hba адаптерах и интерфейсных usb/com расширителях. Чтоб увеличить частоту, генерируемые кварцем колебания проходят через специальные узлы – множители. Они позволяют повысить частоты при пиковых нагрузках или снизить их, если нагрузка уменьшается или компьютер находится в простое.
Кстати, множители – это те самые узлы, которые отвечают за динамическое увеличение частоты в нагрузке и ее снижении в простое. Также они могут позволять разгон в случае отсутствия на них блокировки на повышение сверх штатного значения. Подробнее с этой темой можно ознакомиться в нашей статье.
У процессоров с разблокированным множителем пользователь по собственному желанию может увеличить тактовые частоты. Современные процессоры могут разгоняться на 20–30 % и даже больше.
Архитектура
Архитектура процессора – это компоновка транзисторов. Транзисторы объединяются в массивы – ядра. Каждое ядро в процессоре может независимо от других выполнять различные задачи, для этого регулярно повторяется следующий цикл действий:
- Получение информации.
- Раскодирование.
- Выполнение вычисления.
- Фиксация результата.
Вычисления выполняются по специальным алгоритмам и инструкциям, которые хранятся во временной памяти процессора.
Чтоб увеличить производительность процессора, современные компьютерные ядра делятся на 2 потока. Каждый поток занимается выполнением отдельных вычислений, обеспечивая процессору многозадачность и уменьшая очереди задач.
Кэш: зачем процессору собственная память?
Жесткие и твердотельные диски, а также оперативная память работают недостаточно быстро, чтоб обеспечить все нужды процессора. Поэтому каждый микрочип оснащен собственной сверхбыстрой кэш-памятью, хранящей данные, с которыми в конкретный момент, работает процессор. Также в кэш-памяти размещаются инструкции по выполнению конкретных задач.
Что такое система на чипе?
Современные процессоры для телефонов, планшетов и ноутбуков уже давно перестали быть отдельными вычислительными центрами, специализирующимися на выполнении конкретных задач. Современный процессор – это целая система, которая включает собственно блоки для выполнения задач – ядра, а также модуль для отрисовки изображений – графический адаптер. Роль ядер выполняют исполнительные блоки, которых значительно больше, чем в CPU, и которые параллельно выполняют миллионы задач. Также некоторые системы могут содержать и дополнительные опции, например центр беспроводного соединения 5G или технологию передачи данных Thunderbolt.
- Все посты
- HDD диски (27)
- KVM-оборудование (2)
- Powerline-адаптеры (2)
- SSD диски (49)
- USB-носители (4)
- USB-хабы (3)
- Батареи к ИБП (4)
- Безопасность (3)
- Беспроводные USB адаптеры (2)
- Беспроводные роутеры (18)
- Блоки питания (14)
- Бумага (1)
- Веб-камеры (1)
- Вентиляторы корпусные (3)
- Видеокарты (53)
- Видеонаблюдение (6)
- Внешние диски (4)
- Гарнитуры (2)
- Графические планшеты (2)
- Дисковые полки (2)
- Док-станции (1)
- Звуковые карты (4)
- ИБП (22)
- Инструменты (1)
- Кабели и патч-корды (9)
- Картриджи
- Карты памяти (2)
- Клавиатуры (8)
- Колонки (3)
- Коммутаторы (13)
- Комплекты (клавиатура и мышь) (2)
- Компьютерная периферия (2)
- Компьютерные кресла (2)
- Компьютеры (50)
- Контроллеры и адаптеры (6)
- Корпусы (15)
- Ленточные носители (2)
- Маршрутизаторы (1)
- Материнские платы (30)
- Мобильные аккумуляторы
- Модули памяти (19)
- Мониторы (44)
- Моноблоки (8)
- МФУ (6)
- Мыши (9)
- Ноутбуки (39)
- Общая справка (61)
- Оптические приводы (2)
- Охлаждение процессорное (16)
- Панели (1)
- Планшеты (3)
- Плоттеры (1)
- Принтеры (6)
- Программное обеспечение (64)
- Процессоры (57)
- Рабочие станции (6)
- Распределение питания (1)
- Ретрансляторы Wi-Fi (3)
- Серверы (56)
- Сетевые карты (5)
- Сетевые фильтры (2)
- Сканеры (1)
- СХД (5)
- Телекоммуникационные шкафы (6)
- Телефония (4)
- Тонкие клиенты (2)
- Трансиверы (5)
- Умный дом (2)
Также вас может заинтересовать