Сегментная модель памяти процессоров памяти процессоров х86 х86 Архитектура Компьютеров2011
ОСНОВНЫЕ ТЕМЫ ЛЕКЦИИ Управление памятью в защищенном режиме виртуальной адресации Дескрипторы сегментов МП 386+ Вычисление физического (исполнительного) адреса в виртуальном режиме Свопинг сегментов между дисками и памятью Архитектура Компьютеров2011
УПРАВЛЕНИЕ ПАМЯТЬЮ В ЗАЩИЩЕННОМ РЕЖИМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ Простая сегментация памяти в процессоре I8086 (и в РЕАЛЬНОМ РЕЖИМЕ для последующих процессоров) обладает недостатками, усложняющими разработку мультизадачных систем: Сегменты памяти, определяемые только одними сегментными регистрами, имеют всего два атрибута: начальный адрес и максимальный размер 64 Кбайта. Никаких аппаратных средств контроля правильности использования сегментов нет.
Размещение сегментов в памяти произвольное: сегменты могут частично или полностью перекрываться или не иметь общих областей. Программа может обратиться к любому сегменту для считывания или записи данных, а также для выполнения команд. Для защиты определенных областей памяти от несанкционированного доступа требуются внешние схемы. Нет никаких препятствий для обращения даже к физически несуществующей памяти. Когда программа выдает адрес несуществующей ячейки памяти, результат зависит только от особенностей схем дешифрации адреса и управления внешней шиной; система может даже зависнуть в ожидании данных, которые никогда не будут считаны.
В ЗАЩИЩЕННОМ РЕЖИМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ (РВА) процессоров I80286 и последующих процессоров 386+ реализовано несколько уровней привилегий и механизмов защиты задач, требующих больше информации о каждом сегменте. Каждая программа (независимо от уровня привилегий) не может обращаться к сегменту до тех пор, пока он не описан для программы. Каждый сегмент в РЕЖИМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ (РВА) характеризуется (описы- вается) специальной 8-ми байтовой структурой данных, называемой ДЕСКРИПТОРОМ СЕГ- МЕНТА (segment descriptor).
В описание сегмента (в дескриптор) включается: БАЗОВЫЙ АДРЕС сегмента, РАЗМЕР СЕГМЕНТА, ТИП (определяющий целевое использование сегмента), УРОВЕНЬ ПРИВИЛЕГИЙ и дополнительная информация о состоянии. При создании дескриптора область адресного пространства определяется как используемая с учетом ограничений, содержащихся в дескрипторе. Если не описать область адресного пространства памяти дескриптором, соответствующий диапазон адресов оказывается недоступным и процессор отказывается обращаться к нему.
Когда программа ошибочно или намеренно формирует такой недействительный адрес, процессор «перехватывает» виновную команду до попытки считывания/записи по неопределенному адресу. ДЕСКРИПТОРЫ СЕГМЕНТОВ МП 386+ для программной совместимости с МП I80286 имеют формат, представленный на рис. Младшие 48 битов совместимы с форматом дескриптора МП I80286, у которого старшие два байта дескрипторов (биты ) обязательно содержат нули.
Поэтому базовый адрес у МП I80286 содержит только 24 бита (доступное адресное пространство в РВА – 16 Мбайт), а максимальный размер сегмента – 64 Кбайта (определяется 16-тью разрядами предела в дескрипторе и 16-тью разрядами формируемого эффективного адреса – ЕА). Старший байт дескриптора МП 386+ (биты ) содержит СТАРШИЙ БАЙТ БАЗОВОГО АДРЕСА. Начальный адрес сегмента может находиться в линейном адресном пространстве 4 Гбайта. Старшие разряды базы (31…24) Предел (19…16) GD0U Байт прав доступа 40 Младшие разряды предела (15…0) Младшие разряды базового адреса (23…0)
ПРЕДЕЛ РАЗМЕРНОСТИ СЕГМЕНТА (limit) задается 20-ти битовым полем. Предел равен размеру сегмента в байтах (или страницах) минус единица. Учитывая, что адреса нумеруются от нуля, предел задает максимально возможное смещение в конкретном сегменте или последнюю адресуемую страницу в сегменте. G (бит 55 – дробности) – указывает в каких единицах задан предел (размер) сегмента : при G = 0 – в байтах; при G = 1 – в страницах по 4 Кбайт; D (бит 54 – разрядности) – определяет разрядность формируемого внутрисегментного смещения или выбираемого операнда: при D = 0 – 16 разрядов; при D = 1 – 32 разряда.
Байт 5 дескриптора сегмента (биты ) содержит так называемые ПРАВА ДОСТУПА (Access Rights) и часто называется байтом AR (или БАЙТОМ ДОСТУПА). БИТ ПРИСУТСТВИЯ (наличия) – Р (Present) – и БИТ ОБРАЩЕНИЯ – А (Accessed) – помогают операционной системе реализовать виртуальную память Для сегмента кодаPDPL11CRA Для сегмента данныхPDPL10EDWA Для системного объектаPDPL0xxxx
В СИСТЕМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ ПАМЯТИ при выполнении программы в памяти одновременно находятся только некоторые ее сегменты, а остальные хранятся на диске. Когда программа пытается обратиться к сегменту, которого в памяти нет, возникает ОСОБЫЙ СЛУЧАЙ и процедура его обработки считывает ("вталкивает") в память нужный сегмент. Если в памяти места для сегмента недостаточно, процедура обработки должна вначале освободить требуемое место, пересылая ("выталкивая") один или несколько сегментов из памяти на диск. Весь этот процесс называется СВОПИНГОМ ("подкачкой").
Операционная система создает иллюзию того, что все сегменты программы все время находятся в памяти. ОПЕРАЦИОННАЯ СИСТЕМА ВИРТУАЛЬНОЙ ПАМЯТИ отмечает все сегменты, находящиеся в памяти, установкой Р = 1, а сегменты, которых в памяти нет (они на диске), установкой Р = 0. БИТ ОБРАЩЕНИЯ – А – помогает операционной системе выбрать сегмент, который передается на диск, когда в памяти нет достаточного места для нового сегмента. Приемлемая стратегия при необходимости освобож- дения пространства памяти заключается в том, чтобы обменять (swap) сегмент, к которому не было обра- щения самое продолжительное время. Эта стратегия называется LRU – ЗАМЕНЯЕТСЯ ДОЛЬШЕ ВСЕГО НЕ ИСПОЛЬЗОВАВШИЙСЯ СЕГМЕНТ.
Биты А всех сегментов первоначально должны находиться в состоянии «0». Когда селектор определенного дескриптора загружается в сегмен- тный регистр, бит А этого дескриптора устанавливается (А = 1). Через регулярные интервалы времени операционная система сканирует все дескрипторы и сбрасывает их биты А в нуль. Если во время сканирования обнаруживается дескриптор с битом А = 1, то к нему после предыдущего сканирования были обращения. Операционная система должна произвести инкремент СЧЕТЧИКА ИСПОЛЬЗОВАНИЯ такого сегмента. Когда необходимо выбрать сегмент для передачи на диск, им будет сегмент С НАИМЕНЬШИМ СЧЕТЧИКОМ ИСПОЛЬЗОВАНИЯ.
Биты 1, 2, 3 в байте прав доступа называются также ПОЛЕМ ТИПА (Type). Это поле определяет целевое использование сегмента, задавая допустимые в сегменте операции Поле типаТип сегмента и допустимые операции 000Сегмент данных; разрешено только считывание 001Сегмент данных; разрешены считывание и запись 010 Сегмент стека; разрешено только считывание (бессмысленный тип, на практике не применяется) 011Сегмент стека; разрешены считывание и запись 100Сегмент кода; разрешено только выполнение 101Сегмент кода; разрешены выполнение и считывание 110 Подчиненный сегмент кода; разрешено только выполнение 111 Подчиненный сегмент кода; разрешены выполнение и считывание Типы сегментов в режиме виртуальной адресации
Ограничения на доступ по СЧИТЫВАНИЮ, ЗАПИСИ И ВЫПОЛНЕНИЮ помогают поддерживать целостность системы, обнаруживать ошибки и предотвращать программное «пиратство» в многопо- льзовательских системах. Например, попытка копиро- вания данных из сегмента кода, указывая префикс CS: замены сегмента, вызовет особый случай зашиты. В системе виртуальной памяти сегмент с запрещенной записью НЕ НУЖНО физически передавать на диск (если его все же нужно удалить из памяти), так как после передачи с диска он не изменялся. Двухбитовое ПОЛЕ УРОВНЯ ПРИВИЛЕГИЙ ДЕСКРИПТОРА DPL (Descriptor Privilege Level) определяет уровень привилегий, ассоциируемый с той областью памяти, которую описывает дескриптор. УРОВЕНЬ ПРИВИЛЕГИЙ имеет значения от 0 (наибольшие привилегии) до 3 (наименьшие привилегии).
ВЫЧИСЛЕНИЕ ФИЗИЧЕСКОГО (ИСПОЛНИТЕЛЬНОГО) АДРЕСА В ВИРТУАЛЬНОМ РЕЖИМЕ МП 286+ имеют три типа адресов: ЛОГИЧЕСКИЙ (виртуальный); ИСПОЛНИТЕЛЬНЫЙ (линеаризованный); ФИЗИЧЕСКИЙ. ЛОГИЧЕСКИЙ (ВИРТУАЛЬНЫЙ) АДРЕС включает селектор и смещение. СЕЛЕКТОР – содержимое сегментного регистра. СМЕЩЕНИЕ – сумма базы, индекса и отклонения. Блок сегментации транслирует ЛОГИЧЕСКИЕ АДРЕСА в ИСПОЛНИТЕЛЬНЫЕ. ФИЗИЧЕСКИМ называется АДРЕС НА КОНТАКТАХ ПРОЦЕССОРА.
В ВИРТУАЛЬНОМ РЕЖИМЕ 32-х или 48-ми битовый указатель называется ВИРТУАЛЬНЫМ АДРЕСОМ. Он, как и ЛОГИЧЕСКИЙ АДРЕС в реальном режиме, состоит из 16-ти битового СЕЛЕКТОРА и СМЕЩЕНИЯ, длиной 16 или 32 бита. По-прежнему СЕЛЕКТОР определяет НАЧАЛЬНЫЙ (БАЗОВЫЙ) АДРЕС СЕГМЕНТА, к которому для получения физического адреса прибавляется СМЕЩЕНИЕ. 16-ти битовый СЕЛЕКТОР виртуального адреса (загружаемый в соответствующий сегментный регистр) состоит из трех полей : RPL – ЗАПРАШИВАЕМЫЙ УРОВЕНЬ ПРИВИЛЕГИЙ – используется операционной системой для решения проблем защиты информации;
TI – ИНДИКАТОР ТАБЛИЦЫ – выбирает ГЛОБАЛЬНУЮ ДЕСКРИПТОРНУЮ ТАБЛИЦУ (GDT), если ТI = 0; эта единственная таблица GDT разделяется всеми задачами; если ТI = 1, то используется ЛОКАЛЬНАЯ ДЕСКРИПТОРНАЯ ТАБЛИЦА (LDT), причем каждая задача имеет свою LDT; 13-ти битовое поле ИНДЕКСА содержит индекс (смещение или адрес) внутри выбранной таблицы. Так как имеющаяся в конкретном компьютере память обычно меньше, чем необходимая память для программ, в тех ситуациях, когда памяти компьютера не хватает, приходится привлекать методы организации ВИРТУАЛЬНОЙ ПАМЯТИ и внешние запоминающие устройства (дисковые накопители).
Преобразова- ние адреса в виртуальном режиме Таблица (GDT или LDT) может занимать в памяти полный сегмент размером до 64 КБайта. Локальная Дескрипторная Таблица – LDT Глобальная Дескрипторная Таблица – GDT TI=0 TI=1 Логический (Виртуальный) адрес (32 или 48 бит) TIRPL Индекс (13 бит) Селектор (16 бит) Смещение (32 или 16 бит) База Базовый адрес (24 или 32 бита) для I бита 16 или для бита 32 бита Σ Исполнительный (или Физический) адрес (24 или 32 бита) 64 бита
В любой момент времени в основной памяти компьютера находятся только несколько сегментов задачи. ОПЕРАЦИОННАЯ CИСТЕМА должна пересылать сегменты с диска в память, когда они потребуются, и возвращать их на диск, освобождая память, когда сегменты долго не используются. Каждая задача может оперировать с 16 К (2 14 ) селекторами сегментов. Каждый сегмент может быть размером 4 ГБайт (2 32 Байт), создавая тем самым общее пространство 2 46 Байт (64 ТБайт) для задачи. Для МП I80286 размер сегмента может быть до 64 КБайта (2 16 Байт), а общее виртуальное простран- ство одной задачи может достигать 1 ГБайт (2 30 Байт).
При формировании ИСПОЛНИТЕЛЬНОГО АДРЕСА приходится в каждой команде несколько раз обращаться к дескриптору в памяти для выборки БАЗОВОГО АДРЕСА СЕГМЕНТА. Это замедляет выполнение каждой команды. Для сокращения временных затрат при выборке Базового адреса сегмента на кристалле процессора имеются программно недоступные (теневые) ДЕСКРИПТОРНЫЕ РЕГИСТРЫ, неразрывно связаны с соответствующими СЕГМЕНТНЫМИ РЕГИСТРАМИ. Когда значение селектора загружается в СЕГМЕН- ТНЫЙ РЕГИСТР, в режиме виртуальной адресации (РВА) соответствующий ДЕСКРИПТОР- НЫЙ РЕГИСТР автоматически загружается информацией из дескрипторной таблицы.
Каждый дескрипторный регистр хранит 32-х битовый БАЗОВЫЙ АДРЕС СЕГМЕНТА, 20-ти битовый РАЗМЕР СЕГМЕНТА и другие необходимые АТРИБУТЫ сегмента. БАЗОВЫЙ АДРЕС сегмента становится компонентом формирования исполнительного адреса, 20-ти битовый РАЗМЕР СЕГМЕНТА используется для проверки границ рабочей области, а АТРИБУТЫ проверяются на соответствие типу запрашиваемой памяти (типу обращения).
Сегментные регистры Дескрипторные регистры – программно недоступны (загружаются автоматически) 15 0 Базовые адреса сегментов Размеры сегментов Атрибуты сегментов СелекторCS СелекторSS СелекторDS СелекторES СелекторFS СелекторGS
ПРАКТИЧЕСКИЕ РЕКОМЕНДАЦИИ С УЧЕТОМ ИЗЛОЖЕННОГО МАТЕРИАЛА Для повышения быстродействия компьютера ЖЕЛАТЕЛЬНО УВЕЛИЧИВАТЬ ОБЪЕМ ОПЕРАТИВНОЙ ПАМЯТИ (ОЗУ). При этом операционная система будет реже свопировать сегменты между памятью и «Винчестером» (HDD). Для уменьшения времени свопинга (обмена сегментами между памятью и накопителями) желательно регулярно проводить ДЕФРАГ- МЕНТАЦИЮ ДИСКА.
Вопросы для экспресс-контроля Назовите недостатки сегментной модели организа- ции памяти в Реальном Режиме Назначение дескрипторов Назовите основные поля дескрипторов Максимальный объем программы в виртуальном режиме для процессоров i286 и i386+ Зачем нужен свопинг сегментов? Как определяется сегмент в памяти для свопинга? Зачем нужны программно-недоступные дескрип- торные регистры?
Лекция окончена СПАСИБО ЗА ВНИМАНИЕ