Регистр управления — это регистр процессора , который изменяет или управляет общим поведением ЦП или другого цифрового устройства. Обычные задачи, выполняемые регистрами управления, включают управление прерываниями , переключение режима адресации , управление страничным обменом и управление сопроцессором .
Ранние ЦП не имели выделенных регистров управления и полагались на ограниченный набор внутренних сигналов и флагов. [1] Когда IBM разработала страничную версию [примечание 1] System /360 , они добавили 16 регистров управления [2] [3] в конструкцию того, что стало 360/67 . IBM не предоставляла регистры управления на других моделях S/360, но сделала их стандартной частью [4] System /370 , хотя и с другими назначениями регистров и битов. По мере того, как IBM добавляла новые функции в архитектуру, например, DAS , S/370-XA , S/370-ESA , ESA/390 , они добавляли дополнительные поля в регистры управления. С z/Architecture IBM удвоила размер регистра управления до 64 бит.
В 360/67 регистры CR0 и CR2 используются для трансляции адресов, регистры CR 4-6 содержат различные флаги, включая маски прерываний и расширенный режим управления [3] , а регистры CR 8-14 [5] содержат настройки переключателей на блоке конфигурации 2167.
Регистр управления 0 содержит адрес таблицы сегментов для динамической трансляции адресов.
Регистр управления 2 — это регистр адреса исключения перемещения.
CR4 — это расширенный регистр маски для каналов 0-31. Каждый бит — это маска канала 1/0 для соответствующего канала.
CR5 зарезервирован для расширенного регистра маски для каналов 32–63. Каждый бит — это маска канала 1/0 для соответствующего канала.
CR6 содержит два флага режима и расширения битов маски PSW.
Регистр управления 8 содержит назначения блоков памяти процессора 1–4 центральным процессорам (ЦП) и контроллерам каналов (КК).
Регистр управления 9 содержит назначения блоков памяти процессора 5–8 центральным процессорам (ЦП) и контроллерам каналов (КК).
Регистр управления 10 содержит коды назначения адресов памяти процессора.
Регистр управления 11 содержит назначения контроллера канала (CC).
CR12 содержит разделение блока управления вводом/выводом.
CR13 содержит разделение блока управления вводом/выводом.
CR14 содержит индикаторы.
Регистры управления ESA/390 [6] на IBM S/390 являются эволюционным усовершенствованием регистров управления на более ранних процессорах ESA/370 , [7] S/370-XA [8] и S/370 [9] . Подробности о том, какие поля зависят от конкретных функций, см. в разделе Принципы работы. [10]
Регистры управления z/Architecture [11] являются эволюционным усовершенствованием регистров управления более раннего ESA/390 на процессорах IBM S/390 . Подробности о том, какие поля зависят от конкретных функций, см. в Principles of Operation. [12] Поскольку z/Architecture расширяет регистры управления с 32 бит до 64, нумерация бит отличается от нумерации в ESA/390.
Регистр CR0 имеет длину 32 бита на процессорах 386 и выше. На процессорах x64 в длинном режиме он (и другие регистры управления) имеет длину 64 бита. CR0 имеет различные флаги управления, которые изменяют базовую работу процессора. Регистр CR0 является 32-битной версией старого регистра Machine Status Word (MSW). Регистр MSW был расширен до регистра управления с появлением процессора i386.
Зарезервировано, ЦП выдаст исключение # UD при попытке доступа к нему.
Содержит значение, называемое Page Fault Linear Address (PFLA). При возникновении ошибки страницы адрес, к которому программа пыталась получить доступ, сохраняется в регистре CR2.
Используется, когда включена виртуальная адресация , следовательно, когда бит PG установлен в CR0. CR3 позволяет процессору преобразовывать линейные адреса в физические адреса, находя каталог страниц и таблицы страниц для текущей задачи. Обычно верхние 20 бит CR3 становятся базовым регистром каталога страниц (PDBR), который хранит физический адрес первого каталога страниц. Если бит PCIDE в CR4 установлен, нижние 12 бит используются для идентификатора контекста процесса (PCID). [13]
Используется в защищенном режиме для управления такими операциями, как поддержка virtual-8086, включение точек останова ввода-вывода, расширение размера страницы и исключения машинной проверки .
Зарезервировано, тот же регистр, что и CR1.
Extended Feature Enable Register (EFER) — это регистр, специфичный для модели , добавленный в процессор AMD K6 , чтобы разрешить включение инструкции SYSCALL / SYSRET, а позже — для входа и выхода из длинного режима . Этот регистр становится архитектурным в AMD64 и был принят Intel как IA32_EFER. Его номер MSR — 0xC0000080.
CR8 — это новый регистр, доступный в 64-битном режиме с использованием префикса REX. CR8 используется для приоритизации внешних прерываний и называется регистром приоритета задачи (TPR). [14]
Архитектура AMD64 позволяет программному обеспечению определять до 15 внешних классов приоритета прерываний. Классы приоритета нумеруются от 1 до 15, причем класс приоритета 1 является самым низким, а класс приоритета 15 — самым высоким. CR8 использует четыре младших бита для указания приоритета задачи , а оставшиеся 60 бит зарезервированы и должны быть записаны нулями.
Системное программное обеспечение может использовать регистр TPR для временной блокировки прерываний с низким приоритетом от прерывания высокоприоритетной задачи. Это достигается путем загрузки TPR со значением, соответствующим прерыванию с наивысшим приоритетом, которое должно быть заблокировано. Например, загрузка TPR со значением 9 (1001b) блокирует все прерывания с классом приоритета 9 или ниже, в то же время позволяя распознавать все прерывания с классом приоритета 10 или выше. Загрузка TPR со значением 0 включает все внешние прерывания. Загрузка TPR со значением 15 (1111b) отключает все внешние прерывания.
При сбросе TPR сбрасывается до 0.
XCR0, или Extended Control Register 0, — это регистр управления, который используется для переключения сохранения или загрузки регистров, связанных с определенными функциями ЦП, с использованием инструкций XSAVE/XRSTOR. Он также используется с некоторыми функциями для включения или выключения способности процессора выполнять соответствующие инструкции. Его можно изменить с помощью привилегированной инструкции XSETBV, прочитанной с помощью непривилегированной инструкции XGETBV. [21]
Также есть IA32_XSS MSR, который расположен по адресу DA0h
. IA32_XSS MSR управляет битами XCR0, которые считаются состоянием «супервизора» и должны быть невидимы для обычных программ. Он работает с привилегированными инструкциями XSAVES и XRSTORS, добавляя состояние супервизора к данным, с которыми они работают. Проще говоря, если бы состояние X87 было включено в XCR0, а состояние PT было включено в IA32_XSS, инструкция XSAVE сохраняла бы только состояние X87, в то время как привилегированная XSAVES сохраняла бы как состояния X87, так и состояния PT. Поскольку это MSR, к нему можно получить доступ с помощью инструкций RDMSR и WRMSR.