Сегментные регистры и трансляция сегментов.
При использовании сегментированной математической памяти необходима процедура преобразования адреса сегментированной (математической памяти) в адреса линейной физической памяти при каждом обращении к памяти.
Адрес объекта в сегментированной памяти задается двумя компонентами базовым адресом сегмента и смещением в сегменте. В команде задается только смещение в сегменте. Базовый адрес сегмента задается содержимым одного из четырех сегментных регистров.
Например: МП IA-16 содержали 4 сегментных регистров по 16 бит:
· ES – дополнительного сегмента данных
· CS – сегмента кода
· SS – сегмента стека
· DS – сегмента данных
Использование регистров CS, SS, DS и ES возможно по умолчанию и с использованием префикса замены сегмента. Базовые адреса сегментов используются для преобразования адреса сегментированной памяти в линейную.
Емкость физической памяти в МП IA-16 позволяет разместить одновременно до 16 полных сегмента по 64 Кбайт (216 байт). Но одновременно, без изменения содержимого сегментных регистров, в реальном режиме IA-16 можно обращаться только к четырем, по числу сегментных регистров.
Переход на использование остальных сегментов (кроме кодовых), размещенных в оперативной памяти можно производить:
· при помощи загрузкой базовых адресов в соответствующие сегментные регистры командами пересылки (mov)
· командами загрузки сегментных регистров (LES, LDS и LSS).
Все операции работы со стеком ориентированы на словарную организацию стека. По этой причине адрес указателя стека и базовый адрес сегментного регистра SS должны бить четными.
Переходы на новые кодовые сегменты производятся командами межсегментных передач управления.
|
Преобразование адреса сегментированной памяти в адрес линейной (плоской) памяти производится процедурой трансляции сегмента: сложением базового адреса сегмента с адресом операнда в сегменте.
Дискрипторы
Дескриптор — описательный элемент.
Значения:
1. Дескриптор HTML — элемент языка разметки гипертекста HTML, например текст, иллюстрация, таблица. В разговорной речи дескрипторы называют тегами.
2. Файловый дескриптор — неотрицательное целое число, присваемое ОС открытому процессом файлу.
3. Дескриптор сегмента
4. Дескриптор шлюза
Строка в Symbian OS
Рассмотрим дескриптор сегмента и дескриптор шлюза:
Дескриптор сегмента — служебная структура в памяти, которая определяет сегмент. Длина дескриптора равна 8 байтам.
Структура сегментного дескриптора
База (жёлтые поля, 32 бита) — начало сегмента в линейной памяти.
Лимит (красные поля, 20 бит) — (размер сегмента в байтах)-1 (База+Лимит = линейный адрес последнего байта).
Права доступа (синие поля, 12 бит) — флаги, определяющие наличие сегмента в памяти, уровень защиты, тип, разрядность + один пользовательский флаг.
Дескриптор шлюза — служебная структура данных, служащая для различных переходов. Используется только в защищённом режиме. В реальном режиме некоторым аналогом может служить дальний адрес. Длина дескриптора стандартна и равна 8 байтам.
Структура дескриптора шлюза
Смещение (Offset, жёлтые поля) — смещение процедуры в сегменте кода.
|
Селектор (Selector, оранжевое поле) — селектор сегмента процедуры, на который происходит переход. Может быть сегментом кода или TSS.
Количество параметров (Words count, голубое поле, биты 32-36) — количество слов (16-разрядный стек) или двойных слов (32-разрядный стек), копируемых из стека вызывающей программы в стек вызываемой процедуры. Актуально только при смене уровня привилегий, используется только в шлюзах вызова (Call Gate).
Тип/права доступа (голубые поля, биты 40-47) — права доступа к шлюзу и его тип.