Максимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005) (1186253), страница 82
Текст из файла (страница 82)
Дело втом, что ассемблер будет заменять все команды CALL, где указаноимя данной процедуры, на машинные команды близкого перехода свозвратом, а все команды RET внутри процедуры — на близкие возвраты.Если же в директиве PROC указан параметр FAR, то это «дальняя» процедура: все обращения к ней и все команды RET внутри неерассматриваются ассемблером как дальние переходы.
Обращаться кэтой процедуре можно из любых сегментов команд.Таким образом, достаточно лишь указать тип процедуры (близкая она или дальняя), и всю остальную работу возьмет на себя ассемблер: переходы на нее и возвраты из нее будут автоматически согласованы с этим типом. В этом главное (и единственное) достоинство описания подпрограмм в виде процедур. (Отметим, что меткии имена, описанные в процедуре, не локализуются в ней.)Например, вычисление ах := sign (ах) можно описать в видепроцедуры следующим образом'SING PROC FAR ; дальняя процедураCMP AX,0JE SGN1 ;АХ=0 - перейти к SGN1MOV АХ,1 ;АХ:=1 (флаги не изменились!)JG SGN1 ;АХ>0 - перейти к sgnlMOV AX,-1 ;AX:=-1SGN1: RET ;дальний возвратSIGN ENDPВозможный пример обращения к этой процедуре:;CX:=SIGN(VAR)MOV AX,VARCALL SIGN ;дальний вызовMOV CX,AX4194.4.
Защищенный режим4.4. Защищенный режимРассмотрим работу в защищенном режиме процессоров 80286,80386 и более старших моделейАдресация в защищенном режиме 16-разрядного МП 80286В этом режиме механизм адресации отличается от механизмаадресации в реальном режиме (рис. 4.18) За счет использования24-битной адресной шины процессора 80286 физическое адресноепространство достигает 16 Мбайт (2м байт).В данном режиме для определения адресов также необходимыдва регистра, однако содержимое каждого регистра сегмента не соответствует непосредственно какому-либо участку оперативной памяти. Регистр сегмента, который в защищенном режиме называютселектором, в действительности становится индексом, указывающим на элемент таблицы, называемой таблицей дескрипторов(Descriptor Table).
Каждый элемент этой таблицы (называемый дескриптором) характеризует один сегмент команд или один сегментданных. Сегмент стека относят при этом к сегментам данных, поскольку он не содержит исполняемых команд (рис 4.18).Физическая(оперативная) памятьСелектор CSСмещение IPFFFFFFh(16М)C12AB5hMOVAX.2i-»C12ABOhOOOOOOhФизический адресинструкцииФизический адрес начала сегментакомандРис. 4.18. Адресация в защищенном режимеСегментразмеромдо 64 Кбайт(в данномслучае32A4h байт)420Глава 4. Персональные компьютерыДескриптор содержит физический адрес начала сегмента в памяти (базовый адрес), его размер, а также другую информацию.
Базовый адрес размещается в 24 битах (а не в 20, как для реальногорежима), поэтому сегменты не обязательно теперь должны быть выровнены на адрес, кратный 16 Размер сегмента указывается в16 битах, и поэтому может принимать любые значения, меньшиеили равные 64 Кбайт. В этом состоит фундаментальное отличие отреального режима, где каждый сегмент по умолчанию имеет размер64 Кбайт.
После определения базового адреса сегмента к нему прибавляется значение смещения (размещаемого в 16 битах), и процессор может обратиться к соответствующей ячейке памяти. Очевидно,что метод вычисления физических адресов в защищенном режимезначительно сложнее, чем в реальном режиме. Однако эти вычисления выполняются процессором и «прозрачны» для программиста,для которого механизм адресации выглядит неизменным. Действительно, как и в реальном режиме, команды, стек и данные адресуются с помощью соответствующего регистра сегмента (называемогоселектором) и смещения.Эти данные позволяют теперь определить максимальный размер адресного пространства, доступного для каждой программы.В самом деле, мы видели, что поле индекса какого-либо регистраселектора имеет размер 13 бит, что позволяет обратиться к 8192(213 = 8192) дескрипторам в каждой таблице.
Зная значение битаиндикатора таблицы, можно обратиться к двум таблицам, которыесодержат по 8192 дескриптора. Каждый из этих дескрипторов соответствует сегменту с максимальным размером 64 Кбайт(216 = 64 Кбайт). Таким образом, полная виртуальная память, доступная для каждой задачи составляет 8192 х 2 х 64 Кбайт, что рав13630но 1 Гбайт (2 х 2 х 2' = 2 = 1 Гбайт). Пересчет адреса в виртуальной памяти в реальную оперативную память производится процессором автоматически. Это соответствует тому, что физическиеадреса не наблюдаемы или прозрачны для программы.Адресация в защищенном режиме МП 80386 и старшеЗащищенный режим, появившийся в МП 80286, имел не всевозможности, доступные в 32-разрядных процессорах, какими являются 80386, 80486 и Pentium.
На рис. 4.19 показано, как в этих МП(при работе в защищенном режиме) генерируется физический адреспамяти на основе содержимого базового и индексного регистров, атакже находящегося в команде значения смещения. Для получения4214.4. Защищенный резкимСелектор (16 бит)Поле селектора\IИндекс (13 бит)TI = 1LDTПоле RPL(2 бит)TI = ОGDTБитТ!— (индикатор таблицы)Рис. 4.19.
Формирование адреса в защищенном режиме32-разрядного исполнительного адреса значение индексного регистра умножается на коэффициент масштабирования, равный 1, 2, 4или 8, затем результат прибавляется к содержимому базового регистра с учетом заданного в команде смещения.Четырнадцать старших битов одного из шести сегментных регистров определяют дескриптор, используемый в качестве индекса втаблице дескрипторов, из которой извлекается 32-разрядный базовый адрес. Этот адрес прибавляется к исполнительному адресувнутри сегмента, вследствие чего получается 32-разрядный линейный адрес.
Страничный блок, используя таблицу страниц, транслирует линейный адрес в 32-разрядный физический адрес.Таблицы страниц и дескрипторов сегментов довольно велики,поэтому хранятся в основной памяти. Для обеспечения быстройтрансляции может использоваться буфер быстрого преобразованияадресов TLB. В таблицах дескрипторов сегментов содержатся поляправ доступа, а также поля границ сегментов, определяющие ихмаксимальный размер. Этими параметрами управляет операционнаясистема. Они нужны для защиты как операционной системы, так иприкладных программ, находящихся в основной памяти.
Отсюда иназвание данного режима работы процессора — «защищенный».Защищенный режим предназначен для обеспечения независимости выполнения нескольких задач, что подразумевает защиту ре-422Глава 4. Персональные компьютерыИндексКоэффициентмасштабирования1 2, 4 8БазаСмещениеСегментный регистр152 014,Виртуальный адрес,—Л—ч32Исполнительный адресДескрипторБлок сегментации32Линейный адресСтраничный блок32 xf Физический адресРис. 4.20.
Адресация в защищенном режиме МП 80386 и старшесурсов одной задачи от возможного воздействия другой (под задачами подразумеваются как приложения, так и задачи операционнойсистемы)Основным защищаемым ресурсом является память, в которойхранятся коды, данные и различные системные таблицы (например,таблица прерываний) Защищать требуется и совместно используемую аппаратуру, обращение к которой обычно происходит черезоперации ввода/вывода и прерывания В защищенном режиме процессор аппаратно реализует многие функции защиты, необходимыедля построения супервизора многозадачной ОС, в том числе механизм виртуальной памятиЗащита памяти основана на сегментации Сегмент — блок пространства памяти определенного назначения К элементам сегментавозможно обращение с помощью различных инструкций процессора, использующих разные режимы адресации для формирования ад-4.4.
Защищенный режим423реса в пределах сегмента Максимальный размер сегмента —4 Гбайт (для процессоров 8086 и 80286 предел был 64 Кбайт) Сегменты памяти выделяет операционная система, но в реальном режиме любая задача может переопределить значение сегментных регистров, задающих положение сегмента в пространстве памяти, и«залезть» в чужую область данных или кода В защищенном режимесегменты тоже распределяются операционной системой, но прикладная программа сможет использовать только разрешенные длянее сегменты памяти, выбирая их с помощью селекторов из предварительно сформированных таблиц дескрипторов сегментовПроцессор может обращаться только к тем сегментам памяти,для которых имеются дескрипторы в таблицах Механизм сегментации формирует линейный адрес по схеме, приведенной на рис 4 21Дескрипторы выбираются с помощью 16-битных селекторов,программно загружаемых в сегментные регистры, формат селекторов приведен на рис 4 22Индекс совместно с индикатором таблицы TI позволяет выбрать дескриптор из локальной (TI = 1) или глобальной (TI = 0)Логический адрес15Рис.
4.21. Формирование линейного адреса153 2 1IndexТiОRPLРис. 4.22. Формат селектора адреса424Глава 4. Персональные компьютерытаблицы дескрипторов Для неиспользуемых сегментных регистровпредназначен нулевой селектор сегмента, формально адресующийся к самому первому элементу глобальной таблицы Попытка обращения к памяти по такому сегментному регистру вызовет прерывание Прерывание возникнет и при попытке загрузки нулевого селектора в регистр CS или SS, Поле RPL указывает требуемыйуровень привилегийДескрипторы представляют собой 8-байтные структуры данных,используемые для определения свойств программных элементов(сегментов, вентилей и таблиц). Дескриптор определяет положениеэлемента в памяти, размер занимаемой им области (лимит), его назначение и характеристики защиты.
Все дескрипторы хранятся втаблицах, обращение к которым поддерживается процессором аппаратно.Защита памяти с помощью сегментации не позволяет• использовать сегменты не по назначению (например, пытаться трактовать область данных как коды инструкций);• нарушать права доступа (пытаться модифицировать сегмент,предназначенный только для чтения, обращаться к сегменту,не имея достаточных привилегий, и т п.);• адресоваться к элементам, выходящим за лимит сегмента,• изменять содержимое таблиц дескрипторов (то есть параметров сегментов), не имея достаточных привилегий.Защищенный режим предоставляет средства переключения задач.
Состояние каждой задачи (значение всех связанных с ней регистров процессора) может быть сохранено в специальном сегментесостояния задачи TSS, на который указывает селектор в регистре задачи TR. При переключении задач достаточно загрузить новый селектор в регистр задачи, и состояние текущей задачи автоматическисохранится в ее TSS, а в процессор загрузится состояние новой (возможно, ранее прерванной) задачи, и начнется (продолжится) ее выполнение.Четырехуровневая иерархическая система привилегий (рис.