Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Олифер. Сетевые операционные системы.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
16.5 Mб
Скачать

Глава 6. Аппаратная поддержка мультипрограммирования на примере процессора Pentium

Аппаратные средства поддержки мультипрограммирования имеются во всех современных процессорах. Несмотря на различия в реализации, для большинства типов процессоров эти средства имеют общие черты.

Это в полной мере относится и к рассматриваемому далее популярному семейству процессоров Intel: 80386, 80486, Pentium, Pentium Pro, Pentium II, Celeron и Pentium III, Pentium 4, Pentium D и Core 2. Большая часть моделей этих процессоров была 32-разрядной, а начиная с процессоров Pentium 4, поддерживается и 64-разрядная архитектура, к тому же последние 64-разрядные модели процессоров позволяют выполнять команды 32-разрядной архитектуры, то есть обладают обратной совместимостью.

Средства поддержки операционной системы во всех этих процессорах построены почти идентично, а отличия сводятся практически только к количеству разрядов команды и/или наличию нескольких дополнительных команд, не связанных напрямую с организацией вычислительного процесса. В данной главе средства аппаратной поддержки мультипрограммирования рассматриваются на примере 32-разрядного режима этих процессоров, которые здесь мы будем условно называть «процессоры Pentium».

Регистры процессора

В организации вычислительного процесса важную роль играют регистры процессора, которые в процессорах Pentium делятся на следующие группы:

  • регистры общего назначения;

  • регистры сегментов;

  • указатель инструкций;

  • регистр флагов;

  • управляющие регистры;

  • регистры системных адресов;

  • регистры отладки и тестирования;

  • регистры математического сопроцессора, выполняющего операции с плавающей точкой.

В процессоре Pentium имеется восемь 32-разрядных регистров общего назначения. Четыре из них, которые можно условно назвать А, В, С и D, используются для временного хранения операндов арифметических, логических и других команд. Программист может обращаться к этим регистрам как к единому целому, используя обозначения ЕАХ, ЕВХ, ЕСХ, EDX, а также к некоторым их частям, как это показано на рис. 6.1. Здесь обозначение AL (L — Low) относится к первому, самому младшему байту регистра ЕАХ, АН (Н — High) — к следующему по старшинству байту, а АХ означает оба младших байта регистра. Приставка Е в обозначении этих регистров (а также некоторых других) образована от слова Extended (расширенный), указывая на то, что в прежних моделях процессоров Intel эти регистры были 16-разрядными, а затем их разрядность была увеличена до 32. •

Рис. 6.1. Основные регистры процессора Pentium

Остальные четыре регистра общего назначения — ESI, EDI, EBP и ESP — предназначены для задания смещения адреса относительно начала некоторого сегмента данных. Эти регистры используются совместно с регистрами сегментов в системе адресации процессора Pentium для задания виртуального адреса, который затем с помощью таблиц страниц отображается на физический адрес.

Регистры сегментов CS, SS, DS, ES, FS и GS в защищенном режиме ссылаются на дескрипторы сегментов памяти — описатели, в которых содержатся такие параметры сегментов, как базовый адрес, размер сегмента, атрибуты защиты и некоторые другие. Регистры сегментов хранят 16-разрядное число, называемое селектором, в котором 12 старших разрядов представляет собой индекс в таблице дескрипторов сегментов, 1 разряд указывает, в какой из двух таблиц, GDT или LDT, находится дескриптор, а 3 разряда поля RPL хранят значение уровня привилегий запроса к данному сегменту. Регистр CS (Code Segment) предназначен для хранения индекса дескриптора кодового сегмента, регистр SS (Stack Segment) — дескриптора сегмента стека, а остальные регистры используются для указания на дескрипторы сегментов данных. Все регистры сегментов, кроме CS, программно доступны, то есть в них можно загрузить новое значение селектора соответствующей командой (например, LDS). Значение регистра CS изменяется при выполнении команд межсегментных вызовов CALL и переходов JHP, а также при переключении задач1.

Указатель инструкций EIP содержит смещение адреса текущей инструкции, которое используется совместно с регистром CS для получения соответствующего виртуального адреса.

Регистр флагов EFLAGS содержит признаки, характеризующие результат выполнения операции, например флаги знака, нуля, переполнения, паритета, переноса и некоторые другие. Кроме того, здесь хранятся некоторые признаки, устанавливаемые и анализируемые механизмом прерываний, в частности флаг разрешения аппаратных прерываний IF.

В процессоре Pentium имеется пять управляющих регистров — CRO, CR1, CR2, CR3 и CR4, которые хранят признаки и данные, характеризующие общее состояния процессора (рис. 6.2).

Рис. 6.2. Управляющие и системные регистры процессора Pentium

Регистр CR0 содержит все основные признаки, существенно влияющие на работу процессора, такие как: признаки реального/защищенного режима работы, включения/выключения страничного механизма системы виртуальной памяти, а также признаки, влияющие на работу кэша и выполнение команд с плавающей точкой. Младшие два байта регистра CR0 имеют название «слово состояния машины» (Mashine State Word, MSW). Это название использовалось в процессоре 80286 для обозначения управляющего регистра, имевшего аналогичное назначение.

Регистр CR1 в настоящее время не используется (зарезервирован).

Регистр CR2 содержит линейный виртуальный адрес, который вызвал так называемый страничный отказ (отсутствие страницы в оперативной памяти или отказ из-за нарушения прав доступа).

Регистр CR3 содержит физический адрес таблицы разделов, используемой страничным механизмом процессора.

Регистр CR4 хранит признаки, разрешающие работу так называемых архитектурных расширений, например, признак возможности использования страниц размером 4 Мбайта и т. п.

Регистры системных адресов содержат адреса важных системных таблиц и структур, используемых при управлении процессами и памятью.

Регистр GDTR (Global Descriptor Table Register) содержит физический 32-разрядный адрес глобальной таблицы дескрипторов (Global Descriptor Table, GDT) сегментов памяти, образующих общую часть виртуального адресного пространства всех процессов.

Регистр IDTR (Interrupt Descriptor Table Register) хранит физический 32-разрядный адрес таблицы дескрипторов прерываний (Interrupt Descriptor Table, IDT), используемой для вызова процедур обработки прерываний в защищенном режиме работы процессора. Помимо этих адресов, в регистрах GDTR и IDTR хранятся 16-разрядные лимиты, задающие ограничения на размер соответствующих таблиц.

Два 16-разрядных регистра хранят не физические адреса системных структур, а значения индексов дескрипторов этих структур в таблице GDT, что позволяет косвенно получить соответствующие физические адреса.

Регистр TR (Task Register) содержит индекс дескриптора сегмента состояния задачи TSS.

Регистр LD,TR (Local Descriptor Table Register) содержит индекс дескриптора сегмента локальной таблицы дескрипторов LDT сегментов памяти, образующих индивидуальную часть виртуального адресного пространства процесса.

Регистры отладки хранят значения точек останова, а регистры тестирования позволяют проверить корректность работы внутренних блоков процессора.