
- •13 Способы адресации операндов и команд.
- •Способы адресации команд.
- •14 Назначение программируемого контроллера прерываний Системные устройства вычислительной техники. Программируемый контроллер прерываний.
- •15 Назначение контроллера прямого доступа к памяти Программируемый контроллер прямого доступа к памяти (пдп).
- •Типы передач контроллера пдп
- •Внутренние регистры программируемого контроллера пдп
- •16 Назначение системного таймера Системный таймер
- •17 Назначение системных регистров и глобальной дескрипторной таблицы. Системные регистры.
- •18 Защищенный режим работы цп. Защищенный режим работы вычислительных машин. Максимальный режим работы цп.
- •19 Назначение дескрипторов и шлюзов Дескрипторы и шлюзы.
- •20 Организация памяти вычислительных машин. Кэш-память Организация памяти вычислительных машин.
- •Виды кэш памяти.
- •Целостность данных в системах кэш памяти.
- •21 Понятие cisc и risc архитектур процессоров Понятие cisc и risc архитектур
- •22 Конвейеризация Конвейеризация.
17 Назначение системных регистров и глобальной дескрипторной таблицы. Системные регистры.
Системные регистры предназначены для обслуживания ЦП при многозадачной обработке. Для этого ЦП переводится в защищенный режим, однако, прежде чем процессор перейдет в защищенный режим, должна быть определена глобальная дескрипторная таблица GDT (Global Descriptor Table), так как все сегменты и прочие системные объекты должны быть описаны в дескрипторной таблице. GDT - это область памяти, в которой находятся дескрипторы. GDT должна располагаться в пределах первого мегабайта адресного пространства, так как перевести процессор в защищенный режим можно только из режима реальных адресов. Подразумевается , что GDT будет выровнена на границу 8 байт, т.к. дескрипторы, из которых она состоит, имеют восьмибайтный размер. Такое выравнивание позволит процессору максимально быстро обращаться к дескрипторам, а следовательно – увеличивает производительность. Число дескрипторов, определенных в GDT может быть любым в пределах от 0 до 8192. Нулевой дескриптор, то есть, определенный в самом начале GDT, процессор не использует. Если все же в программе встречается обращение к нулевому дескриптору, то процессор генерирует исключение и не позволяет доступ к этому дескриптору. В связи с этим, рекомендуется использовать нулевой дескриптор как шаблон, на основе которого программа может создавать новые дескрипторы. GDT используется процессором все время пока он находится в защищенном режиме. Параметры GDT хранятся в специальном 48 разрядном регистре GDTR.
Адреса GDT – адрес по которому размещена таблица.
Предел GDT – максимальное смещение относительно ее начала.
Для загрузки значений в регистр GDTR используется команда LGDT , операндом этой команды является 48-разрядное значение адреса памяти, где размещается адрес и предел GDT. Следует отметить, что размер GDT желательно не менять в процессе выполнения программы в защищенном режиме. Если программа будет динамически создавать новые дескрипторы, то размер GDT лучше всего заранее задать достаточно большим, например – 64 Кб (это максимальный размер). При этом следует учитывать, что при обращении процессора к несуществующим дескрипторам его поведение непредсказуемо, скорее всего, он зависнет.
Все 32-разрядные процессоры, начиная с Intel80386, имеют набор системных регистров, предназначенных для использования в защищенном режиме, среди них есть регистр управления CR0-CR4 (Control Register). Регистры управления состоят, в основном, из вкладок. Рассмотрим, например, бит PE (Protection Enable) регистра CR0, отвечающий за переход процессора в защищенный режим и обратно. Регистры управления предназначены для записи и считывания информации. Они имеют размер 32 бита и оперировать ими можно только целиком, то есть считывается значение целого регистра, изменяются нужные биты и записываются обратно. Единственная команда, которая позволяет доступ к этим регистрам – MOV, в качестве операнда которой, используется 32-разрядный регистр общего назначения. Если установить бит PE=1, то процессор перейдет в защищенный режим, если PE=0 – то в режим реальных адресов.
Пример:
1.Перевод процессоров в защищенный режим.
mov eax, cr0 ;Копируем в eax содержимое cr0
or al, 1 ;Устанавливаем в копии 0 бит, которые соотв. 0 биту в CR0, то есть PE
mov cr0, eax ; Записываем в cr0 обновленное значение, проц. Перешел в защищенный
режим.
; 1 команда программы, которая выполнится в защищенном режиме
2.Перевод процессора в режим реальных адресов.
move ax, cr0
and al, 0feh ; Сбрасываем бит PE.
mov cr0, eax ; Процессор перешел в режим реальных адресов.
Если просто выполнить переход в защищенный режим, как в примере, то процессор зависнет, для работы в защищенном режиме, процессор использует дескрипторы сегментов вместо их адресов, поэтому прежде чем перевести процессор в защищенный режим нужно провести определенные подготовительные работы.