Лекция 3 Управление памятью
Распределение памяти предполагает удовлетворение потребностей как пользователей, так и системных средств. Эти требования в большей части противоречивы. Системные цели: -увеличение степени использования оперативной памяти при параллельном развитии нескольких процессов в мультипрограммном режиме, -защита информации при развитии этих процессов, -обеспечение взаимодействия между процессами и т. д. Требования пользователей: -быстрое выполнение коротких программ, -выделение оперативной памяти в размерах, превышающих физически существующую, -легкость и простота взаимодействия с другими программами при использовании, например, общих процедур и т. п.
Функции системы управления памятью : - учет состояния свободных и уже распределенных областей памяти и модернизация этой информации всякий раз, когда в распределении памяти производятся изменения; - распределение памяти для выполнения задач (определение, какой задаче, когда и в каком количестве выделить оперативную память); - непосредственное выделение задаче оперативной памяти; если свободные области оперативной памяти отсутствуют, то предварительное их освобождение путем сохранения информации во внешней памяти.
Aсвободно D BB CCC a)a)б)в)г) a – начальное распределение; б – после завершения программы A; в – после завершения программы B; г – после завершения программы C Исходное состояние: V ОП = 10 МБ, для выполнения программ A, B, C, D требуются следующие объемы памяти: A – 2МБ, B – 1МБ, C – 4МБ, D – 4МБ. ПРИМЕР СТАТИЧЕСКОГО РАСПРЕДЕЛЕНИЯ ПАМЯТИ
При динамическом распределении памяти каждой программе в начальный момент выделяется лишь часть от всей необходимой ей памяти, а остальная часть выделяется по мере возникновения реальной потребности в ней. Такой подход базируется на следующих предпосылках. Во-первых, при каждом конкретном исполнении в зависимости от исходных данных некоторые части программы (до 25% ее длины) вообще не используются. Следует стремиться к тому, чтобы эти фрагменты кода не загружались в ОП. Во-вторых, исполнение программы характеризуется так называемым принципом локальности ссылок. Он подразумевает, что при исполнении программы в течение некоторого относительно малого интервала времени происходит обращение к памяти в пределах ограниченного диапазона адресов (как по коду программы, так и по данным). Следовательно, на протяжении этого времени нет необходимости хранить в ОП другие блоки программы. Современные системы распределения памяти опираются на две концепции: - динамического использования ресурсов и - виртуализации.
Принцип виртуальной памяти предполагает, что пользователь при подготовке своей программы имеет дело не с физической ОП, действительно работающей в составе компьютера и имеющей некоторую фиксированную емкость, а с виртуальной (кажущейся) одноуровневой памятью, емкость которой равна всему адресному пространству, определяемому размером адресной шины (L ша ) компьютера: V вирт >> V физ, V вирт = 2 Lша. Виртуальная память, обеспечивая возможность программисту обращаться к очень большому объему непрерывного адресного пространства, предоставляемого в его монопольное распоряжение, обладает обычными свойствами: побайтовая адресация, время доступа, сравнимое со временем доступа к оперативной памяти.
Номер физической страницы Смещение в странице Номер программы Номер виртуальной страницы Смещение в странице Физический адрес Виртуальный адрес n p L Таблица страничного m=f(n, p) m L Принцип преобразования виртуального страничного адреса в физический
Пример преобразования адреса виртуальной страницы в адрес физической страницы Пусть компьютер использует адресное пространство, предполагающее разбиение на страницы объемом V стр =1, и имеет оперативную память V ОЗУ =3 страницы. Пусть на компьютере одновременно выполняются четыре программы, имеющие следующее количество страниц: V A =2, V B =1, V C =3, V D =2. Переключение между программами происходит через t k = 1. Время выполнения каждой страницы любой программы составляет t = 2t k. Страницы программ загружаются в оперативную память по мере их необходимости и, по возможности, в свободные области ОЗУ. Если вся память занята, то новая страница замещает ту, к которой дольше всего не было обращений (механизм LRU). Тогда таблица загрузки оперативной памяти и таблицы страничного преобразования для каждой программы будут следующий вид.
Страница Такты Динамическое распределение оперативной памяти ОЗУ 0А0А0А0А0А0А0D0D0D0D0D0D0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C1C1C1C1C1 1B0B0B0B0B0B0A0A0А0А0А0А0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1 2C0C0C0C0C0C0B0B0B0B0B0B0A1A1А1А1А1А1A1A1А1А1А1А1 C2C2C2C2 Таблица страничного преобразования для программы A A Таблица страничного преобразования для программы B B Таблица страничного преобразования для программы C C Таблица страничного преобразования для программы D D
Архитектура компьютера различает физическое адресное пространство (ФАП) и логическое адресное пространство (ЛАП). Физическое адресное пространство – это память, организованная как простой одномерный массив байтов, доступ к которому реализуется аппаратурой памяти по адресу, присутствующему на шине адреса микропроцессорной системы (МПС). Логическое адресное пространство организуется программистом исходя из своих потребностей. Процессор автоматически транслирует логические адреса в физические, выдаваемые затем на системную шину. Трансляция логических адресов программ в физические осуществляет диспетчер памяти (блок управления памятью memory manager unit – MMU).
Варианты организации логического адресного пространства : – плоское (линейное) ЛАП; состоит из массива байтов, не имеющего определенной структуры; трансляция адреса не требуется, так как логический адрес совпадает с физическим; – сегментированное ЛАП; Состоит из сегментов, каждый из которых в общем случае содержит переменное число байтов; логический адрес содержит 2 части: идентификатор сегмента и смещение внутри сегмента. Трансляцию адреса проводит MMU; – страничное ЛАП; состоит из страниц, каждая из которых содержит фиксированное число байтов; логический адрес состоит из номера (идентификатора) страницы и смещения внутри страницы; трансляция проводится блоком управления памятью MMU; – сегментно-страничное ЛАП; состоит из сегментов, которые, в свою очередь, состоят из страниц; логический адрес состоит из идентификатора сегмента и смещения внутри сегмента. MMU производит трансляцию логического адреса в номер страницы и смещение в ней, которые затем транслируются в физический адрес.
Режимы формирования физического адреса: - режим реальных адресов (реальный режим); - режим защищенной памяти (защищенный режим). При работе в реальном режиме возможности процессора ограничены: - объем адресуемой памяти составляет 1 Мб, - длина сегмента постоянная и равна 2 16 байт, - отсутствует страничная организация памяти, - отсутствуют механизмы защиты. Этот режим обычно используется на начальном этапе загрузки компьютера для перехода в защищенный режим.
ФА - физический адрес ЭА - эффективный адрес (смещение в сегменте, формируемое исходя из режима адресации операнда Абаз - базовый адрес сегмента Формирование физического адреса в реальном режиме работы микропроцессора ФА - физический адрес Абаз - базовый адрес сегмента ЭА - эффективный адрес (смещение в сегменте, формируемое исходя из режима адресации операнда Для команды ADD AX,[CX+DI+25] эффективный адрес операнда ЭА = [CX]+[DI]+25 ФAФA команда операнд Сегмент кода Сегмент данных CS DS SS ES IP x2 4 ЭAЭA ФAФA Абаз Сегментные регистры
Обобщённая схема формирования адреса при сегментно-страничной организации памяти в защищённом режиме работы
Обобщённая схема формирования адреса при сегментно-страничной организации памяти
Структура дескриптора сегмента
Бит разрядности D (demention) определяет длину адресов и операндов, используемых в команде по умолчанию. Бит пользователя U (User) может использоваться системными программистами по своему усмотрению. Доступен только на высшем уровне привилегий. Микропроцессор в своей работе этот бит игнорирует. Бит обращения A: устанавливается в 1при любом обращении к сегменту. Используется операционной системой для того, чтобы отслеживать сегменты, к которым дольше всего не было обращений.
Байт доступа определяет основные правила обращения с сегментом. Бит присутствия P показывает возможность доступа к сегменту. При P = 1 сегмент находится в физической памяти. Если P=0 (сегмент отсутствует), поля базового адреса и предела дескриптора игнорируются. При этом процессор отвергает все последующие попытки использовать дескриптор в командах. Операционная система копирует запрошенный сегмент с диска в память (при этом, возможно, удаляя другой сегмент), загружает в дескриптор новый базовый адрес сегмента, устанавливает P=1 и осуществляет рестарт, то есть повторное выполнение виноватой команды. Описанный процесс называется свопингом, или подкачкой. Поле DPL (Descriptor privilege level) указывает уровень привилегий дескриптора, определяемый возможность доступа к сегменту со стороны тех или иных программ.
СRAСегмент кода 10EDWAСегмент данных 0Т и пСистемный объект ФОРМАТ ПОЛЯ ТИПА БАЙТА ДОСТУПА В сегменте данных: бит направления расширения ED (Expand Down): ED = 1 – сегмент стека (относительный адрес должен быть больше размера сегмента), при ED = 0 – сегмент собственно данных (относительный адрес должен быть меньше или равен размера сегмента); бит разрешения записи W (Writeable): при W = 1 – разрешено изменение сегмента, при W = 0 запись в сегмент запрещена; при попытке записи в сегмент возникает исключение по защите памяти.
В сегменте кода: бит C (Conforming): бит подчинения или согласования – определяет дополнительные правила обращения, которые обеспечивают защиту сегментов программ (специальный порядок обращения к подчиненным и неподчиненным сегментам – разрешение или запрещение межсегментных переходов); При С = 1 – подчиненный сегмент кода. В этом случае сегмент намеренно лишается защиты по привилегиям. Такое средство удобно для организации в системе библиотек, программы которых должны быть доступны всем выполняющимся в системе задачам. Библиотечные программы оформляются как подчиненные сегменты кода и они могут быть вызваны командой типа CALL любой текущей задачей. При C= 0 – обычный сегмент кода; бит R (Readable) – бит считывания. Устанавливает, можно ли обращаться к сегменту только на исполнение или на исполнение и считывания (например, констант) как данных с помощью префикса замены сегмента. При R = 0 допускается только выборка из сегмента для выполнения через CS, при R = 1 чтение из сегмента разрешено. При любой попытке записи в сегмент кода возникает прерывание.
ФОРМАТ СЕЛЕКТОРА Index: поле индекса – номер дескриптора в соответствующей таблице дескрипторов. TI (Table Indicator): индикатор таблицы – показывает, к какой таблице идёт обращение. RPL (Request privilege level) – уровень привилегий запроса. При обращении сравнивается с полем DPL в байте доступа дескриптора. Обращение разрешается, если уровень привилегий запроса не ниже, чем уровень привилегий дескриптора.
ПОЛУЧЕНИЕ ДЕСКРИПТОРА, НАХОДЯЩЕГОСЯ В ГЛОБАЛЬНОЙ ТАБЛИЦЕ ДЕСКРИПТОРОВ x2 3