Блок управления ( БУ ) — это компонент центрального процессора (ЦП) компьютера , который управляет работой процессора. БУ обычно использует двоичный декодер для преобразования кодированных инструкций в сигналы синхронизации и управления, которые управляют работой других блоков (памяти, арифметико-логического устройства , устройств ввода и вывода и т. д.).
Большинство ресурсов компьютера управляются CU. Он направляет поток данных между CPU и другими устройствами. Джон фон Нейман включил блок управления в архитектуру фон Неймана . [1] В современных компьютерных конструкциях блок управления обычно является внутренней частью CPU, его общая роль и работа не изменились с момента его появления. [2]
Простейшие компьютеры используют многоцикловую микроархитектуру . Это были самые ранние разработки. Они до сих пор популярны в самых маленьких компьютерах, таких как встроенные системы, которые управляют машинами.
В компьютере блок управления часто последовательно проходит через цикл инструкций . Это состоит из выборки инструкции, выборки операндов, декодирования инструкции, выполнения инструкции и последующей записи результатов обратно в память. Когда следующая инструкция помещается в блок управления, она изменяет поведение блока управления для корректного завершения инструкции. Таким образом, биты инструкции напрямую управляют блоком управления, который, в свою очередь, управляет компьютером.
Блок управления может включать двоичный счетчик, который сообщает логике блока управления, какой шаг следует выполнить.
Многоцикловые блоки управления обычно используют как восходящие, так и нисходящие фронты своих прямоугольных тактовых импульсов. Они выполняют шаг своей операции на каждом фронте тактовых импульсов, так что четырехшаговая операция завершается за два тактовых цикла. Это удваивает скорость компьютера, учитывая то же логическое семейство.
Во многих компьютерах есть два разных типа непредвиденных событий. Прерывание происходит, потому что какой-то тип ввода или вывода требует внимания программного обеспечения для корректной работы. Исключение вызвано работой компьютера. Одно важное отличие заключается в том, что время прерывания невозможно предсказать. Другое заключается в том, что некоторые исключения (например, исключение «память недоступна») могут быть вызваны инструкцией, которую необходимо перезапустить.
Блоки управления могут быть спроектированы для обработки прерываний одним из двух типичных способов. Если наиболее важен быстрый ответ, блок управления спроектирован так, чтобы прекратить работу для обработки прерывания. В этом случае работа в процессе будет перезапущена после последней завершенной инструкции. Если компьютер должен быть очень недорогим, очень простым, очень надежным или выполнять больше работы, блок управления завершит работу в процессе до обработки прерывания. Завершение работы недорого, потому что ему не нужен регистр для записи последней завершенной инструкции. Он прост и надежен, потому что имеет наименьшее количество состояний. Он также тратит впустую наименьшее количество работы.
Исключения могут быть сделаны для работы подобно прерываниям в очень простых компьютерах. Если требуется виртуальная память , то исключение «память недоступна» должно повторить неудачную инструкцию.
Для многоцикловых компьютеров характерно использование большего количества циклов. Иногда требуется больше времени для выполнения условного перехода, поскольку счетчик программ должен быть перезагружен. Иногда они выполняют инструкции умножения или деления с помощью процесса, что-то вроде двоичного длинного умножения и деления. Очень маленькие компьютеры могут выполнять арифметические действия, один или несколько битов за раз. Некоторые другие компьютеры имеют очень сложные инструкции, которые требуют много шагов.
Многие компьютеры средней сложности конвейеризируют инструкции . Такая конструкция популярна из-за своей экономичности и скорости.
В конвейерном компьютере инструкции проходят через компьютер. Эта конструкция имеет несколько стадий. Например, она может иметь одну стадию для каждого шага цикла фон Неймана. Конвейерный компьютер обычно имеет «конвейерные регистры» после каждой стадии. Они хранят биты, вычисленные стадией, так что логические вентили следующей стадии могут использовать биты для выполнения следующего шага.
Обычно четные ступени работают на одном краю прямоугольного тактового сигнала, а нечетные — на другом. Это ускоряет компьютер в два раза по сравнению с конструкциями с одним краем.
В конвейерном компьютере блок управления организует запуск, продолжение и остановку потока в качестве команд программы. Данные инструкций обычно передаются в регистрах конвейера с одного этапа на другой, с несколько отделенной частью логики управления для каждого этапа. Блок управления также гарантирует, что инструкция на каждом этапе не повредит работе инструкций на других этапах. Например, если два этапа должны использовать один и тот же фрагмент данных, логика управления гарантирует, что использование выполняется в правильной последовательности.
При эффективной работе конвейерный компьютер будет иметь инструкцию на каждом этапе. Затем он работает над всеми этими инструкциями одновременно. Он может завершить около одной инструкции за каждый цикл своих часов. Когда программа принимает решение и переключается на другую последовательность инструкций, конвейер иногда должен отбросить данные в процессе и перезапуститься. Это называется «задержка». Когда две инструкции могут мешать друг другу, иногда блок управления должен остановить обработку более поздней инструкции, пока не завершится более ранняя инструкция. Это называется «пузырь конвейера», потому что часть конвейера не обрабатывает инструкции. Пузыри конвейера могут возникнуть, когда две инструкции работают с одним и тем же регистром.
Прерывания и неожиданные исключения также останавливают конвейер. Если конвейерный компьютер отказывается от работы из-за прерывания, теряется больше работы, чем в многоцикловом компьютере. Предсказуемые исключения не должны останавливаться. Например, если инструкция исключения используется для входа в операционную систему, она не вызывает остановку.
При одинаковой скорости электронной логики конвейерный компьютер может выполнять больше инструкций в секунду, чем многоцикловый компьютер. Кроме того, хотя электронная логика имеет фиксированную максимальную скорость, конвейерный компьютер можно сделать быстрее или медленнее, изменяя количество стадий в конвейере. При большем количестве стадий каждая стадия выполняет меньше работы, и поэтому стадия имеет меньше задержек от логических вентилей .
Конвейерная модель компьютера часто имеет меньше логических вентилей на инструкцию в секунду, чем многоцикловые и неупорядоченные компьютеры. Это происходит потому, что средняя стадия менее сложна, чем многоцикловый компьютер. Неупорядоченный компьютер обычно имеет большие объемы неиспользуемой логики в любой момент времени. Подобные расчеты обычно показывают, что конвейерный компьютер потребляет меньше энергии на инструкцию.
Однако конвейерный компьютер обычно сложнее и дороже, чем сопоставимый многоцикловой компьютер. Обычно он имеет больше логических вентилей, регистров и более сложный блок управления. Аналогичным образом, он может использовать больше общей энергии, при этом потребляя меньше энергии на инструкцию. Процессоры с неупорядоченными операциями обычно могут выполнять больше инструкций в секунду, поскольку они могут выполнять несколько инструкций одновременно.
Блоки управления используют множество методов для поддержания конвейера заполненным и избегания остановок. Например, даже простые блоки управления могут предполагать, что обратная ветвь к инструкции с меньшим номером, более ранней, является циклом, и будут повторяться. [3] Таким образом, блок управления с такой конструкцией всегда будет заполнять конвейер путем обратной ветви. Если компилятор может определить наиболее часто используемое направление ветви, компилятор может просто выдавать инструкции так, чтобы наиболее часто используемая ветвь была предпочтительным направлением ветви. Аналогичным образом блок управления может получать подсказки от компилятора: некоторые компьютеры имеют инструкции, которые могут кодировать подсказки от компилятора о направлении ветви. [4]
Некоторые блоки управления выполняют прогнозирование переходов : блок управления хранит электронный список последних переходов, закодированный адресом инструкции перехода. [3] Этот список содержит несколько бит для каждого перехода, чтобы запомнить направление, которое было выбрано последним.
Некоторые блоки управления могут выполнять спекулятивное исполнение , при котором компьютер может иметь два или более конвейера, рассчитывать оба направления ответвления, а затем отбрасывать вычисления неиспользуемого направления.
Результаты из памяти могут стать доступными в непредсказуемое время, поскольку очень быстрые компьютеры кэшируют память . То есть они копируют ограниченные объемы данных памяти в очень быструю память. ЦП должен быть разработан для обработки на очень высокой скорости кэш-памяти. Поэтому ЦП может остановиться, когда ему нужно напрямую получить доступ к основной памяти. В современных ПК основная память в триста раз медленнее кэша.
Чтобы помочь этому, были разработаны неработающие процессоры и блоки управления для обработки данных по мере их поступления. (См. следующий раздел)
Но что делать, если все вычисления завершены, но ЦП все еще завис, ожидая основной памяти? Затем блок управления может переключиться на альтернативный поток выполнения, данные которого были извлечены, пока поток простаивал. У потока есть свой собственный счетчик программ, поток инструкций и отдельный набор регистров. Разработчики варьируют количество потоков в зависимости от текущих технологий памяти и типа компьютера. Типичные компьютеры, такие как ПК и смартфоны, обычно имеют блоки управления с несколькими потоками, как раз достаточными для того, чтобы занять доступные системы памяти. Компьютеры баз данных часто имеют примерно в два раза больше потоков, чтобы занять свою гораздо большую память. Графические процессоры (GPU) обычно имеют сотни или тысячи потоков, потому что у них есть сотни или тысячи исполнительных блоков, выполняющих повторяющиеся графические вычисления.
Когда блок управления допускает потоки , программное обеспечение также должно быть разработано для их обработки. В универсальных процессорах, таких как ПК и смартфоны, потоки обычно сделаны очень похожими на обычные процессы с временными квантами. В лучшем случае операционной системе может потребоваться некоторая осведомленность о них. В графических процессорах планирование потоков обычно не может быть скрыто от прикладного программного обеспечения и часто управляется с помощью специализированной библиотеки подпрограмм.
Блок управления может быть спроектирован так, чтобы завершить то, что он может . Если несколько инструкций могут быть завершены одновременно, блок управления организует их. Таким образом, самые быстрые компьютеры могут обрабатывать инструкции в последовательности, которая может несколько меняться в зависимости от того, когда становятся доступны операнды или адресаты инструкций. Большинство суперкомпьютеров и многие процессоры ПК используют этот метод. Точная организация этого типа блока управления зависит от самой медленной части компьютера.
Когда выполнение вычислений происходит медленнее всего, инструкции перетекают из памяти в электронные устройства, называемые «выпускными блоками». Выпускной блок удерживает инструкцию до тех пор, пока не будут доступны как ее операнды, так и исполнительный блок. Затем инструкция и ее операнды «выдаются» исполнительному блоку. Исполнительный блок выполняет инструкцию. Затем полученные данные перемещаются в очередь данных для записи обратно в память или регистры. Если у компьютера несколько исполнительных блоков, он обычно может выполнять несколько инструкций за такт.
Обычно используются специализированные исполнительные блоки. Например, компьютер с умеренной ценой может иметь только один исполнительный блок с плавающей точкой, поскольку блоки с плавающей точкой дороги. Тот же компьютер может иметь несколько целочисленных блоков, поскольку они относительно недороги и могут выполнять большую часть инструкций.
Один из видов блока управления для выдачи использует массив электронной логики, «табло» [5] , которое определяет, когда может быть выдана инструкция. «Высота» массива — это количество исполнительных блоков, а «длина» и «ширина» — это количество источников операндов. Когда все элементы собираются вместе, сигналы от операндов и исполнительного блока пересекаются. Логика на этом пересечении определяет, что инструкция может работать, поэтому инструкция «выдается» свободному исполнительному блоку. Альтернативный стиль блока управления выдачей реализует алгоритм Томасуло , который переупорядочивает аппаратную очередь инструкций. В некотором смысле оба стиля используют очередь. Табло — это альтернативный способ кодирования и переупорядочивания очереди инструкций, и некоторые разработчики называют его таблицей очередей. [6] [7]
С некоторой дополнительной логикой табло может компактно объединить переупорядочивание выполнения, переименование регистров и точные исключения и прерывания. Кроме того, оно может делать это без энергоемкой, сложной адресуемой по содержимому памяти, используемой алгоритмом Томасуло. [6] [7]
Если выполнение медленнее, чем запись результатов, очередь обратной записи памяти всегда имеет свободные записи. Но что, если память пишет медленно? Или что, если регистр назначения будет использоваться «более ранней» инструкцией, которая еще не была выдана? Тогда шаг обратной записи инструкции может потребоваться запланировать. Иногда это называется «отменой» инструкции. В этом случае на задней стороне исполнительных блоков должна быть логика планирования. Она планирует доступ к регистрам или памяти, которые получат результаты. [6] [7]
Логику вывода можно также спроектировать в виде табло выдачи или очереди Томасуло, включив в логику выдачи доступ к памяти или регистру. [6] [7]
Контроллеры, работающие не по порядку, требуют специальных конструктивных особенностей для обработки прерываний. Когда выполняется несколько инструкций, неясно, где в потоке инструкций происходит прерывание. Для прерываний ввода и вывода работает почти любое решение. Однако, когда у компьютера есть виртуальная память, прерывание происходит, чтобы указать, что доступ к памяти не удался. Этот доступ к памяти должен быть связан с точной инструкцией и точным состоянием процессора, чтобы состояние процессора можно было сохранить и восстановить с помощью прерывания. Обычное решение сохраняет копии регистров до тех пор, пока не завершится доступ к памяти. [6] [7]
Кроме того, процессоры, работающие не по порядку, имеют еще больше проблем с задержками из-за ветвления, поскольку они могут выполнять несколько инструкций за один такт и обычно имеют много инструкций на разных стадиях выполнения. Таким образом, эти блоки управления могут использовать все решения, используемые конвейерными процессорами. [8]
Некоторые компьютеры преобразуют каждую отдельную инструкцию в последовательность более простых инструкций. Преимущество в том, что неисправный компьютер может быть проще в основной части своей логики, обрабатывая сложные многошаговые инструкции. Процессоры x86 Intel, начиная с Pentium Pro, преобразуют сложные инструкции CISC x86 в более RISC-подобные внутренние микрооперации.
В них «фронт» блока управления управляет трансляцией инструкций. Операнды не транслируются. «Тыл» CU — это неупорядоченный ЦП, который выдает микрооперации и операнды исполнительным блокам и трактам данных.
Многие современные компьютеры имеют элементы управления, которые минимизируют потребление энергии. В компьютерах с питанием от батареи, например, в сотовых телефонах, преимущество заключается в более длительном сроке службы батареи. В компьютерах с питанием от сети оправданием является снижение стоимости электроэнергии, охлаждения или шума.
Большинство современных компьютеров используют логику КМОП . КМОП тратит энергию двумя распространенными способами: изменяя состояние, т. е. «активную мощность», и непреднамеренно утекая. Активную мощность компьютера можно уменьшить, отключив сигналы управления. Ток утечки можно уменьшить, уменьшив электрическое давление, напряжение, сделав транзисторы с большими областями обеднения или полностью отключив логику.
Активную мощность легче уменьшить, поскольку данные, хранящиеся в логике, не затрагиваются. Обычный метод снижает тактовую частоту ЦП. Большинство компьютерных систем используют этот метод. Обычно ЦП простаивает во время перехода, чтобы избежать побочных эффектов от изменения тактовой частоты.
Большинство компьютеров также имеют инструкцию "halt". Она была изобретена для остановки кода без прерываний, чтобы код прерываний имел надежную синхронизацию. Однако вскоре разработчики заметили, что инструкция halt также является хорошим временем для полного отключения часов ЦП, снижая его активную мощность до нуля. Контроллер прерываний может продолжать нуждаться в часах, но они обычно потребляют гораздо меньше энергии, чем ЦП.
Эти методы относительно просты в разработке и стали настолько распространенными, что другие были изобретены для коммерческой выгоды. Многие современные маломощные КМОП-процессоры останавливают и запускают специализированные исполнительные блоки и интерфейсы шины в зависимости от необходимой инструкции. Некоторые компьютеры [9] даже организуют микроархитектуру ЦП для использования мультиплексоров, запускаемых передачей, так что каждая инструкция использует только точные части необходимой логики.
Одним из распространенных методов является распределение нагрузки на множество ЦП и отключение неиспользуемых ЦП по мере снижения нагрузки. Логика переключения задач операционной системы сохраняет данные ЦП в памяти. В некоторых случаях [10] один из ЦП может быть проще и меньше, буквально с меньшим количеством логических вентилей. Таким образом, он имеет низкую утечку, и он последним выключается и первым включается. Кроме того, тогда это единственный ЦП, которому требуются специальные функции низкого энергопотребления. Похожий метод используется в большинстве ПК, которые обычно имеют вспомогательный встроенный ЦП, который управляет системой питания. Однако в ПК программное обеспечение обычно находится в BIOS, а не в операционной системе.
Теоретически, компьютеры с более низкими тактовыми частотами также могли бы уменьшить утечку, уменьшив напряжение источника питания. Это влияет на надежность компьютера во многих отношениях, поэтому проектирование является дорогостоящим, и это необычно, за исключением относительно дорогих компьютеров, таких как ПК или мобильные телефоны.
Некоторые конструкции могут использовать транзисторы с очень низкой утечкой, но это обычно увеличивает стоимость. Барьеры истощения транзисторов можно сделать больше, чтобы уменьшить утечку, но это делает транзистор больше и, следовательно, медленнее и дороже. Некоторые поставщики используют эту технику в отдельных частях ИС, создавая логику с низкой утечкой из больших транзисторов, которые некоторые процессы обеспечивают для аналоговых схем. Некоторые процессы размещают транзисторы над поверхностью кремния, в «fin fets», но эти процессы имеют больше шагов, поэтому они более дорогие. Специальные легирующие материалы транзисторов (например, гафний) также могут уменьшить утечку, но это добавляет шаги к обработке, делая ее более дорогой. Некоторые полупроводники имеют большую ширину запрещенной зоны, чем кремний. Однако эти материалы и процессы в настоящее время (2020) дороже, чем кремний.
Управление утечками является более сложной задачей, поскольку перед отключением логики данные в ней необходимо переместить в хранилище с низким уровнем утечек.
Некоторые ЦП [11] используют специальный тип триггера (для хранения бита), который соединяет быструю ячейку памяти с высокой утечкой с медленной большой (дорогой) ячейкой с низкой утечкой. Эти две ячейки имеют отдельные источники питания. Когда ЦП переходит в режим энергосбережения (например, из-за остановки, ожидающей прерывания), данные передаются в ячейки с низкой утечкой, а остальные отключаются. Когда ЦП выходит из режима с низкой утечкой (например, из-за прерывания), процесс происходит в обратном порядке.
Более старые разработки копировали состояние ЦП в память или даже на диск, иногда со специализированным программным обеспечением. Очень простые встроенные системы иногда просто перезапускаются.
Все современные ЦП имеют управляющую логику для присоединения ЦП к остальной части компьютера. В современных компьютерах это обычно контроллер шины. Когда инструкция считывает или записывает память, блок управления либо напрямую управляет шиной, либо управляет контроллером шины. Многие современные компьютеры используют один и тот же интерфейс шины для памяти, ввода и вывода. Это называется «отображение ввода-вывода в памяти». Для программиста регистры устройств ввода-вывода отображаются как числа по определенным адресам памяти. ПК x86 используют старый метод, отдельную шину ввода-вывода, доступ к которой осуществляется с помощью инструкций ввода-вывода.
Современный ЦП также имеет тенденцию включать контроллер прерываний . Он обрабатывает сигналы прерываний от системной шины. Блок управления — это часть компьютера, которая реагирует на прерывания.
Часто для кэш-памяти используется контроллер кэша . Контроллер кэша и связанная с ним кэш-память часто являются самой большой физической частью современного высокопроизводительного ЦП. Когда память, шина или кэш используются совместно с другими ЦП, логика управления должна взаимодействовать с ними, чтобы гарантировать, что ни один компьютер никогда не получит устаревшие старые данные.
Многие исторические компьютеры встраивали некоторые типы ввода и вывода непосредственно в блок управления. Например, многие исторические компьютеры имели переднюю панель с переключателями и индикаторами, которые напрямую управлялись блоком управления. Они позволяли программисту напрямую вводить программу и отлаживать ее. В более поздних компьютерах наиболее распространенным использованием передней панели был ввод небольшой программы начальной загрузки для чтения операционной системы с диска. Это раздражало. Поэтому передние панели были заменены программами начальной загрузки в постоянной памяти.
Большинство моделей PDP-8 имели шину данных, разработанную для того, чтобы устройства ввода-вывода могли заимствовать логику чтения и записи памяти блока управления. [12] Это снизило сложность и стоимость высокоскоростных контроллеров ввода-вывода, например, для дисков.
Xerox Alto имел многозадачный микропрограммируемый блок управления, который выполнял почти все операции ввода-вывода. [13] Эта конструкция обеспечивала большинство функций современного ПК с небольшой долей электронной логики. Двухпоточный компьютер управлялся двумя микропотоками с самым низким приоритетом. Они выполняли вычисления, когда ввод-вывод не требовался. Высокоприоритетные микропотоки обеспечивали (в порядке убывания приоритета) видео, сеть, диск, периодический таймер, мышь и клавиатуру. Микропрограмма выполняла сложную логику устройства ввода-вывода, а также логику для интеграции устройства с компьютером. Для фактического аппаратного ввода-вывода микропрограмма считывала и записывала сдвиговые регистры для большинства операций ввода-вывода, иногда с резисторными сетями и транзисторами для сдвига уровней выходного напряжения (например, для видео). Для обработки внешних событий микроконтроллер имел микропрерывания для переключения потоков в конце цикла потока, например, в конце инструкции или после доступа к сдвиговому регистру. Микропрограмму можно было переписывать и переустанавливать, что было очень полезно для исследовательского компьютера.
Таким образом, программа инструкций в памяти заставит CU сконфигурировать потоки данных CPU для правильной обработки данных между инструкциями. Это приводит к компьютеру, который может запустить полную программу и не требует вмешательства человека для внесения изменений в оборудование между инструкциями (как это приходилось делать при использовании только перфокарт для вычислений до изобретения компьютеров с хранимыми программами и CU).
Аппаратно-зашитые блоки управления реализованы посредством использования комбинационных логических блоков, имеющих конечное число вентилей, которые могут генерировать определенные результаты на основе инструкций, которые использовались для вызова этих ответов. Аппаратно-зашитые блоки управления, как правило, быстрее, чем микропрограммные конструкции. [14]
Эта конструкция использует фиксированную архитектуру — она требует изменений в проводке, если набор инструкций изменяется или изменяется. Это может быть удобно для простых, быстрых компьютеров.
Контроллер, использующий этот подход, может работать на высокой скорости; однако он имеет мало гибкости. Сложный набор инструкций может подавить проектировщика, использующего ad hoc логику.
Подход с использованием аппаратных средств стал менее популярным по мере развития компьютеров. Ранее блоки управления для ЦП использовали специальную логику, и их было сложно проектировать. [15]
Идея микропрограммирования была введена Морисом Уилксом в 1951 году как промежуточный уровень для выполнения инструкций компьютерной программы . Микропрограммы были организованы как последовательность микроинструкций и хранились в специальной управляющей памяти. Алгоритм для микропрограммного блока управления, в отличие от жестко запрограммированного блока управления, обычно задается описанием блок-схемы . [16] Главное преимущество микропрограммного блока управления — простота его структуры. Выходы из контроллера осуществляются микроинструкциями. Микропрограмму можно отлаживать и заменять аналогично программному обеспечению. [17]
Популярная вариация микрокода — отладка микрокода с помощью программного симулятора. Затем микрокод представляет собой таблицу битов. Это логическая таблица истинности , которая переводит адрес микрокода в выходные данные блока управления. Эту таблицу истинности можно подать в компьютерную программу, которая создает оптимизированную электронную логику. Полученный блок управления почти так же легко спроектировать, как микропрограммирование, но он имеет высокую скорость и малое количество логических элементов жестко зашитого блока управления. Практический результат напоминает машину Мили или контроллер Ричардса .