- •6 Пара. Управление памятью. Виртуальная память (слайд №1) Управление памятью в ос
- •4.1. Понятие об организации и управлении физической памятью в ос
- •4.2. Методы связного распределения основной памяти
- •4.2.1. Связное распределение памяти для одного пользователя
- •4.2.2. Связное распределение памяти при мультипрограммной обработке
- •Откачка и подкачка
- •Алгоритмы определения устаревших страниц
- •Недостатки
- •4.3. Организация виртуальной памяти
- •4.3.1. Основные концепции виртуальной памяти
- •4.3.2. Страничная организация виртуальной памяти
- •Страничная организация
- •Реализация таблицы страниц
- •4.3.3. Сегментная организация виртуальной памяти
- •Принципы сегментной организации памяти
- •Архитектура сегментной организации памяти
- •Пример сегментной организации памяти
- •Пример использования разделяемых сегментов
- •4.3.4. Странично-сегментная организация виртуальной памяти
- •4.4. Управление виртуальной памятью
- •4.4.1. Стратегии управления виртуальной памятью
- •4.4.2. Стратегии вталкивания (подкачки)
- •4.4.3. Стратегии размещения
- •4.4.4. Стратегии выталкивания
- •Связывание программ и данных с адресами в памяти
- •-Виртуальная память и стандартные интерфейсы ос
- •-Паравиртуализация и бинарная трансляция
Архитектура сегментной организации памяти
Поскольку сегменты различаются по длине, распределение памяти в виде сегментов – это общая задача динамического распределения памяти (см. "Страничная организация памяти").
На рис. 17.2 приведена схема адресации при сегментном распределении памяти. Логический адрес (s, d), где s – номер сегмента, d – смещение внутри сегмента, обрабатывается следующим образом. По номеру сегмента s происходит обращение в таблицу сегментов, и определяется база сегмента – его начальный адрес в основной памяти. Смещение d сравнивается с длиной (границей) сегмента. Если оно меньше, то оно складывается с базой, и в результате получается физический адрес, по которому и происходит обращение в память. Если смещение больше или равно базе, происходит прерывание – ошибка адресации. На схеме не показана еще одна проверка – для номера сегмента s проверяется, что он не превосходит значения регистра длины таблицы сегментов, иначе – прерывание.
Рис. 17.2. Схема адресации при сегментной организации памяти.
UNIX, Linux, Solaris - часто встречающееся системное сообщение: Segmentation violation (нарушение сегментации) при прерывании. Причина подобного сообщения обычно следующая: программа пытается обратиться по пустому (нулевому) указателю, номер сегмента в котором, естественно, равен 0, а номер сегмента 0 считается в системе недопустимым. Таким образом, через проверку номера сегмента, UNIX защищает от такой часто встречающейся ошибки, как обращение по пустому указателю. Аналогично, по той же самой причине, если программа пытается практически любое другое число (например, 5) рассматривать как адрес и обращаться по нему, то также генерируется прерывание и сигнал SIGSEGV (segmentation violation).
Пример сегментной организации памяти
(слайд №17)
Рис. 17.3. Пример сегментной организации памяти.
В примере программа использует пять сегментов с номерами от 0 до 4: сегмент 0 – подпрограмма, сегмент 1 – стандартные подпрограммы (sqrt и др.), сегмент 2 – основная программа, сегмент 3 – стек, сегмент 4 – таблица символов. Показано размещение сегментов в памяти.
Пример использования разделяемых сегментов
(слайд №18)
Рис. 17.4. Пример использования разделяемых сегментов.
В примере два процесса используют общий сегмент – код редактора, который имеет в таблицах сегментов обоих процессов один и тот же номер – 0. Кроме того, каждый из процессов имеет собственный сегмент данных с номером 1, однако эти сегменты, естественно, у обоих процессов разные.
4.3.4. Странично-сегментная организация виртуальной памяти
Системы со странично-сегментной организацией обладают достоинствами обоих способов реализации виртуальной памяти. Сегменты обычно содержат целое число страниц, причем не обязательно, чтобы все страницы сегмента находились в первичной памяти одновременно, а смежные страницы виртуальной памяти не обязательно должны оказаться смежными в первичной памяти. В системе со странично-сегментной организацией применяется трехкомпонентная (трехмерная) адресация. Виртуальный адрес n здесь определяется как упорядоченная тройка n = (s, p, d), где s - номер сегмента, p - номер страницы, а d - смещение в рамках страницы, где находится нужный элемент.
Операционная система для каждого процесса формирует, во-первых, одну таблицу сегментов процесса, и, во-вторых, таблицы страниц сегментов (по одной на каждый сегмент процесса).
Таблица сегментов процесса содержит в своих строках информацию о количестве страниц в сегменте и о начальных адресах s’ размещения таблиц страниц сегментов в первичной памяти ЭВМ.
Каждая страница таблиц сегмента содержит в своих строках информацию о начальном адресе p’ размещения в первичной памяти страничного кадра для данной страницы виртуальной памяти.
Динамическое преобразование виртуальных адресов в системах со странично-сегментной организацией отличается от преобразования по схеме наличием еще одного уровня вычисления адреса, как это показано на схеме рис.4.10, и появлением таблиц страниц для каждого сегмента процесса.