Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.18. Регистры системного программиста

Форматы и назначение системных регистров gdtr, idtr, ldtr иtr были рассмотрены ранее в разд. 3.4, поэтому в данном разделе они не приводятся. Кроме них к системным регистрам относятся регистры управления, регистры отладки и регистры, специфичные для модели.

Регистры управления. К ним относятся регистры cr0, cr2, cr3 и cr4. Регистр cr1 зарезервирован фирмой и системному программисту не доступен. Регистр cr0 имеет формат, приведенный на рис. 3.30.

31

30

29

 

18

 

16

 

5

4

3

2

1

0

pg

cd

nw

..

am

..

wp

..

Ne

et

ts

em

mp

pe

Рис. 3.30

Бит PE (protection enable) ‑ бит защищенного режима. При РЕ = 1 процессор находится в защищенном режиме.

Бит PG (paging) ‑ бит страничного механизма. При PG = 1 включен страничный механизм.

Биты CD (cache disable NW (not write-through) управляют работой внутренней кэш-памяти. При CD = 0 разрешена внутренняя кэш-память. При NW = 0 разрешена сквозная запись (понятие сквозной и обратной записи рассматриваются ниже). Комбинация CD = 0, NW = 1 является запрещенной. Несколько упрощенно можно считать что, при CD = 0, NW = 0 внутренняя кэш-память разрешена, а при CD = 1, NW = 1 внутренняя кэш-память запрещена. Несмотря на то, что в последнем случае внутренняя кэш-память запрещена, МП продолжает «видеть» все достоверные строки кэш-памяти. Таким образом, запрещение внутренней кэш-памяти приводит к тому, что прекращается обмен данными между кэш-памятью и ОП, однако обмен данными между кэш-памятью и МП продолжается. Это дает возможность использовать внутреннюю кэш-память как быстродействующее СОЗУ. Для того чтобы действительно полностью отключить внутреннюю кэш-память, надо ее запретить и объявить все ее строки недостоверными (можно сделать командой invd ).

Бит АМ (alignment mask) ‑ бит контроля выравнивания. При АМ = 0 процессор игнорирует флаг АС в регистре флагов. При АМ = 1 флаг АС проверяется, если работаем на 3-м уровне привилегий. Если АС = 1 и идет обращение к не выровненным данным, то происходит прерывание типа 17.

Бит WP (write protect) ‑ бит защиты страницы от записи. В элементах PTE и PDE (см. страничный механизм ) есть бит R/W. Если этот бит = 0, то страница запрещена для записи, но только на уровне пользователя (3-й уровень привилегий). Бит WP позволяет распространить этот запрет и на уровень супервизора. То есть, если WP = 1 и R/W = 0, то запись в страницу запрещена на любом уровне привилегий.

Отметим, что биты CD, NW AM и WP ( а также еще не рассмотренный нами бит NE) в МП 386 отсутствовали.

Все оставшиеся значащие биты регистра CR0 так или иначе связаны с арифметическим сопроцессором, который, начиная с МП 486, встроен внутрь микросхемы и всегда присутствует ( в отличие от МП 386).

Бит МР (monitoring coprocessor) ‑ бит присутствия сопроцессора. Оказывает влияние на восприятие процессором команды wait.

Бит ЕМ (emulation) = 1 ‑ сопроцессор эмулируется. В этом случае любая команда сопроцессора вызывает прерывание типа 7.

Бит TS = 1 ‑ задача переключена. Как уже говорилось раньше, МП автоматически устанавливает этот бит при переключении задач. Если этот бит установлен, то любая команда сопроцессора вызывает прерывание типа 7. Сбросить этот бит в 0 можно командой clts, но она доступна только на нулевом уровне привилегий. В табл. 3.12 показано влияние различных комбинаций TS, EM и MP на восприятие команд сопроцессора, ММХ – команд и команды wait. Здесь #NM – прерывание типа 7 (сопроцессор отсутствует), #UD – прерывание типа 6 (недействительный код операции). Рекомендуемая комбинация: ЕМ = 0, МР = 1.

Таблица 3.12

EM

MP

TS

Flo.Point

WAIT

MMX

0

0

0

Вып.

Вып.

Выполняются

0

0

1

# NM

Вып.

#NM

0

1

0

Вып.

Вып.

Выполняются

0

1

1

# NM

# NM

# NM

1

0

0

# NM

Вып.

#UD

1

0

1

# NM

Вып.

#UD

1

1

0

# NM

Вып.

#UD

1

1

1

# NM

# NM

#UD

Бит ЕТ (extension type) ‑ задает тип сопроцессора. При ЕТ = 0 это 287-й сопроцессор, при ЕТ = 1 ‑ 387-й. Этот бит имел значение только для МП 386 и тех моделей МП 486, в которых отсутствовал встроенный сопроцессор. Начиная с Pentium, этот бит зарезервирован.

Бит NE (numeric error) задает способ реакции на ошибку сопроцессора. При NE = 1 ошибка сопроцессора вызывает прерывание типа 16. При NE = 0 процессор либо игнорирует ошибку сопроцессора (если на его вход IGNNE заведена 1), либо зависает и ждет внешнего прерывания от контроллера прерываний (на вход IGNNE подан 0). Последний вариант (с зависанием) предназначен для эмуляции работы сопроцессора «под руководством» МП 386 – так называемый РС-стиль.

Регистр cr2 используется при включенном страничном механизме. Прерывание типа 14 называется страничным нарушением или отказом страницы. Это прерывание возникает когда страницы нет в ОП, нарушены права доступа к странице и т.д. При возникновении этого прерывания МП автоматически запоминает в регистре cr2 линейный адрес, который привел к отказу страницы. В дальнейшем этот адрес для своих целей может использовать обработчик этого прерывания. Системный программист может только считывать содержимое регистра cr2. Запись в этот регистр запрещена.

Регистр cr3. Старшие 20 разрядов этого регистра содержат 20 старших разрядов начального адреса каталога таблиц (см. страничный механизм). В Р6, если разрешено расширение физического адреса (РАЕ = 1) в cr3, находится начальный адрес таблицы указателей на каталог (27 старших разрядов этого адреса). Помимо этого в данном регистре есть еще два значащих бита: PCD и PWT (в разрядах 4 и 3). Эти биты аналогичны одноименным битам в элементах PTE и PDE и определяют стратегию кэширования для каталога или таблицы указателей. При PCD = 1 кэширование запрещено. При PWT = 1 разрешена сквозная запись.

Регистр cr4 появился в Pentium. Его формат представлен на рис. 3.31.

6

5

4

3

2

1

0

mce

pae

pse

de

tsd

pvi

vme

             

31

 

11

10

9

8

7

Резерв

osxmmexcpt

osfxsr

pce

pge

Рис. 3.31

VME (virtual 8086 mode extension) – расширение режима V86. При VME = 1 в режиме V86 появляются некоторые дополнительные возможности. В частности, разрешается использовать битовую карту перенаправления программных прерываний и виртуальные флаги VIF и VIP.

PVI (protected mode virtual interrupts) – виртуальные прерывания в защищенном режиме. При PVI = 1 разрешено использовать флаги VIF и VIP в защищенном режиме.

TSD (time stamp disable) – запрещение «срезов времени». В процессоре может быть счетчик TSC (time stamp counter), его содержимое можно прочитать командой RDTSC. При TSD = 0 эта команда доступна на любом уровне привилегий, при TSD = 1 ‑ только на нулевом уровне привилегий.

DE (debugging extension) ‑ расширение отладки. При DE = 1 появляются дополнительные возможности в использовании отладочных регистров. Появляется возмож-ность задавать контрольные точки по портам ввода-вывода.

PSE (page size extension) ‑ расширенный размер страниц. При PSE = 0 процессор работает только со страницами объемом 4 Кайта, при PSE = 1 – со страницами объемом 4 Кбайта и 4 Мбайта (см. разд. 3.9).

PAE (physical address extension) – расширение физического адреса. При РАЕ = 1 добавляются четыре адресных линии и процессор становится способен адресовать ОП объемом 64 Гайта (см. разд. 3.9).

MCE (machine check enable) – разрешение контроля аппаратуры. Когда этот флаг установлен в единицу, разрешается генерация прерывания типа 18 при аппаратном сбое внутри процессора или на шине.

PGE (page global enable) – разрешение глобальных страниц (см. разд. 3.8) (появился в Р6).

PCE (performance monitoring counter enable) – разрешение счетчиков производительности. В процессоре  есть два счетчика производительности PMC (performance monitoring counter). Их содержимое можно прочитать командой RDPMC. При PCE = 1 эта команда доступна на любом уровне привилегий, при PCE = 0 – только на нулевом уровне.

OSFXSRR (operation  system  support  for FXSAVE and FXSTORE iinstruction) ‑ показывает ОС, что можно использовать команды быстрого сохранения и быстрого восстановления контекста сопроцессора и ММХ-регистров. Показывает, что процессор поддерживает любые SSE- и SSE2-команды.

OSXMMEXCPT (operation system support for unmasked SIMD floating point exception) – показывает поддержку особого случая (прерывания) типа 19 (#XF), вызываемого командами класса SSE и SSE2.

Примечание к последним двум битам (флагам):

SIMD (single instructionmany data) ‑ преобразование некоторого множества данных одной командой;

SSE (streaming SIMD extension) – упрощенно, расширение ММХ-команд, появившееся в Pentium III (SSE) и Pentium IV (SSE2).

Все флаги в регистре cr4 являются модельно-зависимыми. То есть в каждой из моделей, например «Пентиума», набор этих флагов может оказаться уникальным. Проверить наличие тех или иных из этих флагов в конкретном процессоре можно командой cpuid.

Регистры отладки. К ним относятся регистры dr0 ‑ dr3, dr6 и dr7. Регистры dr4 и dr5 в МП отсутствуют. Здесь о регистрах отладки и регистрах проверки приводятся самые общие сведения. Для детального знакомства с этими регис-трами советуем обратиться к соответствующей литературе.

В регистрах dr0 ‑ dr3 можно задавать адреса четырех контрольных точек. Когда МП вырабатывает адрес, совпадающий с адресом контрольной точки, происходит прерывание типа 1. Контрольные точки могут быть заданы как по командам (прерывание возникнет при выборке команды по заданному адресу), так и по данным (прерывание возникает в процессе выполнения команды, если в ней вырабатывается заданный адрес ОП ). При DE = 1 контрольные точки можно задавать и по портам ввода – вывода (прерывание возникнет при обращении к заданному порту). Наличие контрольных точек оказывается очень удобным при отладке системы, поскольку позволяет «сделать остановку» в критическом месте и посмотреть, что получилось (обработчик прерывания типа 1 обычно выводит на экран текущее содержимое внутренних регистров МП). Более того эту «точку остановки» можно задать даже в ПЗУ, что стало возможным, начиная с МП 386, в котором впервые появились регистры отладки.

Регистр dr6 называется регистром состояния отладки. Прерывание типа 1 может возникнуть по разным причинам: по флагу tf, по контрольной точке или по биту Т (в сегменте TSS) при переключении задач. При прерывании типа 1 процессор автоматически устанавливает в регистре dr6 соответствующий бит, указывающий причину прерыва-ния. Эту информацию может использовать обработчик.

Регистр dr7 ‑ регистр управления отладкой. В частности, в нем для каждой контрольной точки указано, для чего она предназначена ‑ для команд или для данных.

Регистры проверки. К ним относятся регистры tr3 ‑ tr5 и tr6, tr7. Регистры tr3 ‑ tr5 используются для проверки внутренней кэш-памяти. С их помощью можем прочитать содержимое любой строки кэш-памяти, изменить это содержимое, объявить строку достоверной или недостовер-ной. Регистры tr6 и tr7 используются для проверки буфера TLB (кэш-памяти страниц). Регистры tr0tr2 в процессоре отсутствуют. Необходимо отметить, что, начиная с Pentium, регистры проверки в составе процессора отсутствуют и их функции возложены на MSR-регистры.

Регистры MSR (model specific registers) – регистры, специфичные для модели. Как следует из названия, каждый конкретный процессор может включать в себя уникальный набор этих регистров. Проверить наличие тех или иных MSR можно командой cpuid. MSR-регистры можно условно разделить на четыре группы:

- регистры, в которых процессор возвращает причину аппаратного сбоя (при прерывании типа 18);

- регистр TSC – 64-разрядный счетчик времени, который запускается на счет с нуля по сигналу RESET. При непрерывной работе переполнение счетчика может произойти не ранее чем через 2000 лет;

- два счетчика производительности PMC – 40-разрядные счетчики, которые можно настраивать на подсчет коли-чества тех или иных событий, например на подсчет числа произошедших прерываний или декодированных команд.

- регистры MTRR (memory type range registers) ‑ регистры, задающие тип области памяти, причем, используя эти регистры, можно настраивать различные области памяти на различные стратегии кэширования, т.е. одну область можно объявить некэшируемой, другую кэшируемой со сквозной записью и т.д.

В более ранних процессорах (например, МП 486), в которых регистров MTRR не было, стратегию кэширования приходилось задавать аппаратными способами.



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.