Сегментная организация памяти и ее эволюция
Адресное пространство памяти МП i8086/8088 организовано на основе фон-неймановской архитектуры, причем адресное пространство ввода – вывода является изолированным (рис.1.1). Существует два уровня представления памяти – физический и логический /12-14/.
На нижнем физическом уровне память организована в виде одномерного 1-Мбайтового блока, каждый байт которого может быть адресован отдельно с помощью 20-битового физического адреса в диапазоне от 00000h до FFFFFh. Любые два смежных байта в памяти могут рассматриваться как 16-битовое слово. Младший байт слова имеет меньший адрес, а старший - больший. Адресом слова считается адрес его младшего байта. Таким образом, 20-битовый адрес памяти может рассматриваться и как адрес байта, и как адрес слова.
Команды, байты и слова данных можно свободно размещать по любому адресу, что позволяет экономить память благодаря ее плотной упаковке. Однако для экономии времени выполнения программы целесообразно размещать слова данных в памяти по четным адресам, так как МП передает такие слова за один цикл шины. Слово с четным адресом называется выравненнымна границе слов. Слова с нечетными адресами (невыравненные) также допустимы, но для их передачи требуются два цикла шины, что снижает производительность МП (Каждый цикл имеет четыре обязательных такта Т) Отметим, что шинный интерфейс инициирует необходимое для выборки слова число обращений к памяти автоматически, так что двукратное обращение к памяти не требует специального указания в программе. Особенно важно иметь выровненные слова для операций со стеком, так как в них участвуют только слова. Следовательно, указатель стека SP необходимо всегда инициализировать на четный адрес.
Команды всегда выбираются словами по четным адресам, за исключением первой выборки после передачи управления по нечетному адресу, когда выбирается один байт. Поток команд разделяется на байты при заполнении очереди команд внутри МП, так что выравнивание команд не влияет на производительность и поэтому не используется.
Физическими адресами оперирует процессор. Физический адрес выдается на шину адреса в начале каждого цикла шины, связанного с обращением к памяти, и сопровождается сигналом ALE.
На верхнем логическом уровне пространство памяти емкостью 1 Мбайт представляется как набор сегментов, определяемых программным путем. Сегмент состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти емкостью 64 Кбайт.
Каждому сегменту программой назначается начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS и ES, тем самым фиксируются текущие сегменты кода (программы), данных, стека и дополнительных данных. Для обращения к командам и данным, находящимся в других сегментах, необходимо изменять содержимое сегментных регистров, что позволяет использовать все пространство памяти емкостью 1 Мбайт. Сегментные регистры инициализируются в начале программы путем засылки в них соответствующих значений. Частный случай загрузки всех сегментных регистров нулями приводит к организации памяти, характерной для МП i8080, т. е. фактически к отказу от сегментации памяти.
В сегментном регистре хранится 16 старших битов 20-битового начального адреса сегмента. Четыре младших бита адреса принимаются равными нулю и дописываются справа к содержимому сегментного регистра при вычислении физических адресов ячеек памяти. Поэтому начальные адреса сегментов всегда кратны 16. Поскольку других ограничений на размещение сегментов в памяти нет, сегменты могут быть соседними (смежными), не перекрывающимися, частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам.
Логический адрес ячейки памяти состоит из двух 16-битовых беззнаковых значений: начального адреса сегмента, который называется также просто базой или сегментом (обозначается Seg), и исполнительного (эффективного) адреса (обозначается ЕА), который определяет расстояние от начала сегмента до этой ячейки. Часто ЕА называют также внутрисегментным смещением (offset). Для вычисления физического адреса база сегмента сдвигается влево на 4 бит и суммируется со смещением, как показано на рис.4.6, где также приведены возможные источники компонент логического адреса. Смещение или исполнительный адрес ЕА вычисляются в соответствии с заданным способом адресации.
Перенос из старшего бита, который может возникнуть при суммировании игнорируется. Это приводит к так называемой кольцевой организации памяти при которой за ячейкой с максимальным адресом FFFFFh следует ячейка с нулевым адресом. Аналогичную кольцевую организацию имеет и каждый сегмент.
Иллюстрация принципа сегментной организации памяти приведена на рис.4.7, а источники логического адреса для различных типов обращения к памяти указаны в табл.4.3. Команды всегда выбираются из текущего сегмента кода в соответствии с логическим адресом CS: IP.
Таблица. 4.3
Примеры использование сегментных регистров
Тип обращения к памяти | Сегмент (по умолчанию) | Вариант | Смещение |
Выборка команды | CS | Нет | IP |
Стековая операция | SS | Нет | SP |
Переменная | DS | CS,SS,ES | ЕА |
Цепочка-источник | DS | CS,SS,ES | SI |
Цепочка-приемник | ES | Нет | DI |
ВР как базовый регистр | ES | CS,SS,DS | ЕА |
Стековые команды всегда обращаются к текущему сегменту стека по адресу SS:SP. Если при вычислении адреса ЕА используется регистр ВР, то обращение производится также к стековому сегменту. В последнем случае принцип стека «первый пришел - последний вышел» игнорируется и ячейки стекового сегмента рассматриваются как ОЗУ с произвольной выборкой, что обеспечивает большую гибкость в использовании этих ячеек.
Стек, как обычно, организуется в ОЗУ, и его положение определяется содержимым регистров SS и SP. Регистр SS хранит базовый адрес текущего сегмента стека, а регистр SP указывает на вершину стека, т. е. содержит смещение вершины стека в стековом сегменте. При каждом обращении к стеку пересылается одно слово, причем содержимое SP модифицируется автоматически: при записи (включении) в стек оно уменьшается на два, при чтении (извлечении) из стека – увеличивается на два.
Операнды, как правило, размещаются в текущем сегменте данных, и обращение к ним организуется по адресу DS:EA. Однако программист может заставить МП обратиться к переменной, находящейся в другом текущем сегменте. Считается, что цепочка-источник находится в текущем сегменте данных, а смещение задается регистром SI. Цепочка-получатель обязательно располагается в текущем дополнительном сегменте, а смещение берется из регистра DI.
Команды обработки цепочек автоматически модифицируют содержимое индексных регистров SI и DI по мере продвижения по цепочке в направлении, ответствующем флагу DF.
Сегментная структура памяти обеспечивает возможность создания позиционно независимых или динамически перемещаемых программ, что необходимо в мультипрограммной среде для эффективного использования оперативной памяти. Чтобы обеспечить позиционную независимость, все смещения в программе должны задаваться относительно фиксированных значений, содержащихся в сегментных регистрах. Это позволяет произвольно перемещать программу в адресном пространстве памяти, изменяя только содержимое сегментных регистров.
Сегментная организация памяти и логические адреса являются важными архитектурными особенностями МП семейства i80*86, позволяющими программистам эффективно разрабатывать мультизадачные (многозадачные) информационно – управляющие системы. Понятно, что процессор оперирует с физическими адресами, а программист – с логическими, но переход от логических адресов к физическим несложен и определяется в общем виде формулой
Физ. Адрес = Seg x 16 + EA.
На основе сегментной организации памяти в старших моделях МП реализуется защищенный режим (Protected Mode) работы процессоров /14-16/. В отличие от реального режима (Real Mode) работы, при котором декларируется полная совместимость с МП i8086, защищенный режим поддерживает независимое и одновременное выполнение многих задач. При этом обеспечивается защита ресурсов каждой из задач от возможного воздействия других задач, причем под задачами подразумеваются как приложения, так и задачи операционной системы.
Основным защищаемым ресурсом является память, в которой хранятся коды команд, данные и различные системные таблицы, например, таблица векторов прерываний. Защищать требуется и совместно используемую аппаратуру, обращение к которой обычно происходит через операции ввода – вывода и прерывания.
Сегменты памяти выделяются задачам операционной системой, но в реальном режиме любая задача может переопределить значения сегментных регистров, задающих положение сегментов в пространстве памяти, и использовать область данных и программ, выделенные под другие задачи. Это приводит к искажению программ и данных и, следовательно, невозможности выполнения задач. В защищенном режиме сегменты тоже распределяются операционной системой, но прикладная программа может использовать только разрешенные для нее сегменты памяти.
Логический адрес в защищенном режиме также состоит из двух компонент – селектора и смещения (ЕА). Селектор записывается в те же сегментные регистры, что и сегментный адрес в реальном режиме. Однако преобразование логического адреса в физический выполняется не только операцией сложения, но и с помощью специальных таблиц преобразования адресов – таблиц дескрипторов сегментов. В 16–битовом селекторе, формат которого приведен на рис.4.8, содержится индекс (номер) строки в таблице дескрипторов сегментов, в строках которой (дескрипторах сегментов) хранятся базовые адреса сегментов.
Таким образом, с помощью селектора из таблицы дескрипторов сегментов извлекается базовый адрес сегмента, к которому далее прибавляется смещение. Упрощенная схема преобразования логического адреса в физический в защищенном режиме приведена на рис.4.9.
Защита областей памяти, используемых разными задачами, основана на дополнительной информации, записанной в селекторах адресов и дескрипторах сегментов.
В формате селектора адреса кроме 13 – битового поля индекса (номера) строки, содержатся 1 – битовое поле TI (Table Indicator) индикатора таблицы и 2 – битовое поле RPL (Requested Privilege Level) уровня привилегий.
Поле TI указывает на тип используемых таблиц дескрипторов – глобальную GDT (TI=0) или локальную LDT (TI=1). Таблица GDT – единственная в вычислительной системе и содержит описание сегментов операционной системы. Таблиц LDT может быть много. Эти таблицы содержат описание сегментов программ, работающих под управлением операционной системы, т.е. отдельных задач.
Процессор может обращаться только к тем сегментам памяти, для которых имеются дескрипторы в таблицах.
Поле RPL задает запрашиваемый программой уровень привилегий. Уровни привилегий нумеруются от 0 до 3, нулевой уровень соответствует максимальным (неограниченным) возможностям доступа и отводится для ядра операционной системы. Уровень 3 имеет самые ограниченные права и обычно предоставляется прикладным задачам. Систему защиты можно представить в виде концентрических колец, соответствующих уровням привилегий, а сами уровни привилегий иногда называют кольцами защиты /15/. Сервисы, предоставляемые задачам, могут находится в разных кольцах защиты. Передача управления между задачами контролируется вентилями или шлюзами, проверяющими правила использования уровней привилегий.
Через вентили задачи могут получить доступ только к разрешенным им сервисам других сегментов.
Каждый из дескрипторов сегментов представляет собой 8 – байтовую структуру данных, описывающую соответствующий сегмент. Кроме 32 – битового поля, содержащего базовый адрес сегмента, в дескрипторе имеются несколько служебных полей:
поле предела, содержащее размер сегмента, который может быть больше 64 Кбайт и достигать 4 Гбайт;
поле доступа, определяющее тип сегмента, права доступа (чтение, чтение/запись, исполнение кода), уровень привилегий сегмента и другие атрибуты доступа.
Таким образом, сегментная организация памяти и дополнительная информация, содержащаяся в селекторах и дескрипторах, позволяет процессору осуществлять эффективный контроль вычислительного процесса. Обнаруживаются и блокируются (вызываются исключения) ситуации:
использования сегментов не по назначению (например, сегмент кодов команд как сегмент данных);
нарушения прав доступа (попытки модификации сегмента, предназначенного только для чтения, обращения к сегменту без достаточного уровня привилегий и т.д.);
адресация к элементам памяти, выходящим за пределы сегмента;
изменения содержимого таблиц дескрипторов (параметров сегментов), не имея достаточных привилегий и т.п.
Очевидно, что предложенные архитектурные решения значительно повышает надежность вычислительных систем.
Будучи разработанным для многозадачных и многопользовательских систем, защищенный режим предоставляет эффективные средства быстрого переключения задач /15-17/. Операция переключения задач (Task Switch Operation) процессора сохраняет состояние процессора и связь с предыдущей задачей, загружает состояние новой задачи и начинает ее выполнение. Переключение задач выполняются по инструкциям межсегментного перехода (JMP), вызова (CALL), аппаратным и программным прерываниям (INT). Состояние каждой задачи (значения всех связанных с ней регистров процессора) может быть сохранено в специальном сегменте состояния задачи TSS (Task State Segment), на который указывает селектор в регистре задачи TR (Task Register). При переключении задач достаточно загрузить новый селектор в регистр задачи, и состояние текущей задачи автоматически сохраниться в ее TSS, а в процессор загрузиться состояние новой задачи и начнется ее выполнение.
На рис.4.9 рассмотрена двухступенчатая схема преобразования логического адреса в физический. В современных процессорах схема преобразования логического адреса в физический усложнена и стала трехступенчатой /17/. На выходе второй ступени формируется линейный адрес, который далее на третьей ступени преобразуется в физический. Это усложнение схемы преобразования адресов является следствием использования принципа страничной организации памяти, при котором память представляется как набор страниц одинакового размера, например, 4 Кбайт.
Механизм страничной организации необходим для поддержки виртуального режима работы памяти, при котором объем памяти, предоставляемой пользователю как память верхнего уровня (оперативная память), значительно превышает физический объем оперативной памяти, реально установленной в вычислительной системе.
Виртуализация достигается за счет свопинга или подкачки, когда на место неиспользуемой страницы в оперативную память из дисковой памяти загружается актуальная страница, а неиспользуемая страница выгружается из оперативной памяти и записывается в дисковую.
Линейный адрес содержит базовый адрес каталога страниц, базовый адрес страницы и смещение внутри ее, которые необходимы для формирования физического адреса, выдаваемого на адресную шину.
4.5. Адресное пространство ввода – вывода
Адресное пространство ввода – вывода предназначено для обращения к регистрам внешних по отношению к процессору устройств. Его размер ограничен 64 Кбайт. Для обращения к устройствам ввода – вывода МП i8086/8088 имеет отдельные команды IN и OUT /18,19/. Данные при чтении могут помещаться в регистр AL или AX и выводятся из этих же регистров. В циклах ввода – вывода используется только 16 младших байт шины адреса (старшие биты при этом нулевые), что позволяет адресовать до 64 К регистров ввода – вывода. Адрес внешнего устройства задается либо в команде (только младший байт, старший – нулевой), либо берется из регистра DX (полный 16 – битовый адрес). Во втором случае возможно вычисление адресов портов при выполнении программы, что удобно при организации вычислительных циклов для обслуживании нескольких портов с помощью одной процедуры.
4.6.Программная модель микропроцессоров i8086/8088
Дата добавления: 2016-06-13; просмотров: 1378;