Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Системные регистры






Системные регистры предназначены для обслуживания ЦП при многозадачной обработке. Для этого ЦП переводится в защищенный режим. Прежде, чем процессор перейдёт в защищённый режим, должна быть определена глобальная дескрипторная таблица GDT (Global Descriptor Table), так как все сегменты и прочие системные объекты должны быть описаны в дескрипторной таблице.

Глобальная дескрипторная таблица GDT - это область памяти, в которой находятся дескрипторы. Процессору всё равно, где именно вы расположили эту таблицу, но в любом случае она будет находиться в первом мегабайте адресного пространства, потому что только из режима реальных адресов можно перевести процессор в защищённый режим. Также подразумевается, что сама таблица GDT будет выровнена на границу 8 байт, так как дескрипторы, из которых она состоит, имеют 8-байтный размер. Такое выравнивание позволит процессору максимально быстро обращаться к дескрипторам, что, естественно,

увеличивает производительность.

Число дескрипторов, определённых в GDT, может быть любым, от 0 до 8192. Нулевой дескриптор, т.е. определённый в самом начале GDT, процессор не использует, обращение к такому дескриптору могло бы быть, когда поле Index селектора равно 0. Если всё же в программе встречается обращение к нулевому дескриптору, то процессор генерирует исключение и не позволит доступ к такому дескриптору. В связи с этим, везде в литературе рекомендуется использовать нулевой дескриптор как шаблон, на основе которого программа может создавать новые дескрипторы, но на практике их удобнее создавать иными способами, о которых мы ещё будем говорить.

GDT используется процессором всё время, пока он находится в защищённом режиме. Параметры GDT хранятся в специальном 48-разрядном регистре GDTR:

 

Рис. 4.5. Формат регистра GDTR.

Адрес начала GDT - это тот адрес, по которому размещена таблица.
Предел таблицы GDT - это максимальное смещение относительно её начала. Например, создаётся GDT, состоящую из 3-х дескрипторов - для сегментов кода, стека и данных. Общее число дескрипторов будет равно четырём, потому что первым по счёту будет идти нулевой дескриптор, а за ним уже остальные три:

Смещение от начала GDT Назначение дескриптора
  Нулевой
  Сегмент кода
  Сегмент стека
  Сегмент данных

Размер GDT в данном случае будет равен 32 байтам, следовательно, предельное смещение в таблице будет равно 31 - это и есть предел GDT.

Для загрузки значения в регистр GDTR используется команда LGDT. Операндом этой команды является 48-разрядное значение адреса в памяти, где размещается адрес и предел GDT. Можно также сохранить содержимое GDTR командой SGDT, указав в операнде адрес 48-разрядной переменной в памяти. Следует отметить, что размер GDT желательно не менять в процессе выполнения программ в защищённом режиме. Если программа будет динамически создавать новые дескрипторы, то размер GDT лучше всего заранее задать достаточно большим, например, 64 Кб (максимальный размер). Однако, следует учитывать, что при обращении процессора к несуществующим дескрипторам, его поведение непредсказуемо, хотя оно, скорее всего, закончится зависанием.

Все 32-разрядные процессоры, начиная с Intel 80386, имеют набор системных регистров, предназначенных для использования в защищённом режиме. Среди них есть регистры управления (Control Registers) CR0, CR1, CR2, CR3 и CR4.

Регистры управления, в основном, состоят из флагов. Назначение и использование каждого флага достаточно сложно и требует отдельного рассмотрения. Для начала мы рассмотрим только один бит PE (Protection Enable) регистра CR0, отвечающего за переход процессора в защищённый режим и обратно. Полный список с описаниями регистров управления можно найти, например на www.sasm.narod.ru/docs/pm.

Регистры управления предназначены для считывания и записи информации. Они имеют размер 32 бита и оперировать ими можно только целиком - считывается значение целого регистра, изменяются нужные биты и записывается обратно. Единственная команда, которой позволен доступ к этим регистрам - это MOV, в качестве операнда которой используется 32-разрядный регистр общего назначения.

Если установить бит РЕ в 1, то процессор перейдёт в защищённый режим, если сбросить - то в режим реальных адресов. Процессор после аппаратного сброса переходит в режим реальных адресов и бит PE сброшен.
Ниже приведены примеры использования бита PE:

1. Перевод процессора в защищённый режим.

mov eax, cr0; Копируем в EAX содержимое регистра CR0.

or al, 1; Устанавливаем в копии 0-й бит, который

; соответствует 0-му биту CR0, т.е. биту PE.

mov cr0, eax; Записываем в CR0 обновлённое значение.

; Процессор перешёл в защищённый режим.

...; 1-я команда программы, которая выполнится

; в защищённом режиме.

 

2. Перевод процессора в режим реальных адресов.

mov eax, cr0

and al, 0feh; Сбрасываем бит PE.

mov cr0, eax; Процессор перешёл в режим реальных адресов.

Если просто выполнить переход в защищённый режим, как показано на приведенном выше примере, то процессор зависнет. Для работы в защищённом режиме процессор использует дескрипторы сегментов, вместо их адресов (которые находятся в сегментных регистрах), поэтому прежде, чем перевести процессор в защищённый режим, нужно провести определенные подготовительные работы. Эти особенности будут рассмотрены в следующем разделе.

Контрольные вопросы

1. Сколько режимов обслуживания прерываний обеспечивает ПКП?

2. В чем заключаются особенности работы ПКП в режиме поллинга и когда его целесообразно использовать?

3. Сколько уровней аппаратных прерываний могут обслужить четыре ПКП и как их следует объединить между собой?

4. Какие параметры передаются контроллеру ПДП при программировании?

5. Перечислите режимы работы контроллера ПДП и объясните особенности использования каждого режима.

6. Сколько каналов включено в ПСТ и в чем заключается основное предназначение каждого канала?

7. Какие регистры содержит каждый канал ПСТ и в чем их предназначение?

8. В чем заключается основное назначение системных регистров ЦП?

9. Опишите формат регистра GDTR и назначение его полей.

10. В чем заключается основное назначение регистров управления ЦП?

11. Сколько уровней прерываний можно обслужить с помощью ПКП?

12. Объясните назначение схемы сравнения приоритетов.

13. Для чего используется сигнал SP/EN?

14. Перечислите последовательность действий при обслуживании прерываний.

15. Объясните назначение режима блочной передачи.

16. Опишите особенности режимов работы системного таймера.

17. Какое число дескрипторов можно определить в GDT?

18. Что означает предел таблицы GDT?

19. Как и для чего используется бит РЕ регистра управления?

20. Опишите основное назначение системных регистров.







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.