Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы_лекции.doc
Скачиваний:
47
Добавлен:
28.09.2019
Размер:
1.71 Mб
Скачать

2.4. Распределение памяти с динамическими разделами

Устранение фрагментации памяти возможно распределением памяти на разделы с подвижными границами. Такие разделы называются динамическими. Первой операционной системой использовавшей такой способ распределения памяти была OS MVT. В составе операционной системы в этом случае присутствует специальный планировщик памяти, который ведёт список свободных фрагментов памяти. При появлении новой задачи планировщик памяти выделяет ей фрагмент, подходящий по размеру. Это делается одним из трёх способов:

  • выделяется первый подходящий раздел;

  • выделяется самый подходящий раздел;

  • выделяется самый неподходящий раздел, имеющий больший объём, чем задача (самый эффективный способ).

При завершении задачи освободившийся фрагмент по возможности присоединяется к смежному с ним свободному фрагменту.

Однако даже такой способ распределения не даёт гарантии устранения фрагментации памяти. Поэтому периодически происходит перемещение свободных фрагментов памяти в область старших адресов. Для этой цели останавливаются все вычислительные процессы, далее происходит указанное перемещение фрагментов, а затем при запуске процессов происходит отображение виртуальных адресов на физические. Этот приём называется уплотнением памяти.

2.5. Распределение памяти с фрагментацией задач

Фрагментация задач предусматривает не борьбу с фрагментацией памяти, а использование свободных фрагментов памяти для размещения в них фрагментов задач. Такие методы распределения памяти называются разрывными. К их числу относятся сегментный, страничный и сегментно-страничный методы.

Сегментная организация памяти (рис. 2.2) предусматривает:

  • разбиение программы на логические части, которые называются сегментами;

  • выделение каждому сегменту физической памяти, раз мер которой определяется исходя из заявленного объёма сегмента.

Логическое обращение к элементам программы (ЭП) в сегменте будет состоять из имени сегмента и смещения начального байта элемента внутри сегмента. Логическое имя преобразуется в физический адрес начала сегмента, который является базовым адресом. Физический адрес нужного байта получается как сумма базового адреса и смещения.

Операционная система ведёт специальную таблицу сегментов текущей задачи, которую называют таблицей дескрипторов сегментов текущей задачи. Дескриптор сегмента – специаль­ная информационная структура, которая характеризует сегмент с точки зрения размещения, длины (L), присутствия в оперативной памяти (Р), прав доступа, отметка об обращении к сегменту (как часто или как давно этот сегмент используется) и т.д.

Регистр таблицы дескрипторов сегментов

Виртуальный адрес элемента программы

Segment

Destination

S

D

А

A + S

Таблица дескрипторов сегментов текущей задачи

Р

Адрес начала сегмента

Длина

Права доступа

1

NS

L

R-X

А

NS+D

Сегмент № S

NS

NS+D

ЭП

Рис. 2.2. Схема адресации при сегментной организации памяти

При передаче управления задаче операционная система заносит в регистр таблицы дескрипторов сегментов адрес (А) указанной таблицы. Виртуальный адрес элемента программы (ЭП) состоит из номера сегмента (S) и смещения (D). Сумма адреса А и номера сегмента S является адресом дескриптора сегмента в таблице дескрипторов сегментов текущей задачи. Сумма адреса начала сегмента NS и смещения D даёт адрес элемента программы ЭП в текущем сегменте. Бит Р=1 указывает, что сегмент находится в оперативной памяти машины.

Как показывает практика, далеко не все сегменты программы должны находиться в памяти. Поэтому можно часть неиспользуемых сегментов выгружать из памяти на диск, а с диска загружать сегменты других задач. Этот приём называется свопингом сегментов. Свопинг сегментов позволяет увеличивать число задач, размещённых в памяти. Вследствие этого происходит повышение производительности системы. Свопинг сегментов осуществляется в соответствии со следующими дисциплинами замещения сегментов:

  • FIFO (First In First Out) – первым пришёл, первым выбыл;

  • LRU (Least Resently Used) – выбывает дольше других неиспользуемый;

  • LFU (Least Frequently Used) – выбывает реже других используемый;

  • Random – случайный выбор сегмента, подлежащего выбытию.

Сегментная организация памяти позволяет также реализовать идею разделения сегментов различными программами пользователя, т.е. поиск и длительное нахождение во внутренней памяти сегментов, используемых несколькими программами.

Проблема защиты памяти в этом случае включает в себя помимо общих мероприятий защиту таблиц дескрипторов сегментов и самих сегментов от модификации программами пользователя. Все попытки выполнения модификации

Недостатками сегментного способа организации памяти являются:

  • большие потери времени на чтение дескриптора и вычисление физического адреса ячейки;

  • значительные затраты памяти и процессорного времени на ведение и обработку таблиц дескрипторов;

  • значительная фрагментация памяти, хотя и меньшая, чем у неразрывных методов распределения памяти.

Страничный способ организации памяти (рис. 2.3) предполагает равенство фрагментов программ по размеру и кратными степени двойки. В этом случае операция сложения можно заменить операциями слияния, которые выполняются быстрее. Все фрагменты программы, кроме последних, имеют одинаковый размер. Одинаковыми становятся и размеры памяти, выделяемой для каждого фрагмента. Фрагмент памяти, хранящий фрагмент программы называется страницей. Таким образом, оперативная память разбивается на физические страницы, а программы – на виртуальные. Часть виртуальных страниц задачи размещается во внутренней памяти, а часть – во внешней на магнитных дисках. Место хранения страниц во внешней памяти называют страничным файлом, файлом подкачки или swap-файлом. Некоторые операционные системы, в частности UNIX, хранят выгруженные из внутренней памяти страницы в специальных разделах диска.

Операционная система в этом случае ведёт таблицу страниц. Виртуальный адрес элемента программы (рис. 2.3,б) состоит из номера страницы Pg и номера ячейки I внутри страницы (индекса). Благодаря одинаковому размеру физических страниц памяти стало возможно говорить о двумерной модели адресного пространства (рис. 2.3,а). Одной из координат пространства является номер страницы, а второй – индекс. Описание страницы, включающее в себя адрес страницы NP в памяти, код прав доступа, бит присутствия в памяти P и т.д. называется дескриптором страницы.

Процесс определения адреса элемента программы ЭП аналогичен ранее описанному процессу, но операция сложения при вычислении адреса используется только при вычислении адреса дескриптора страницы в таблице страниц. Вторая операция сложения заменена операцией конкатенации (слияния) адреса начала страницы NP и индекса I (к адресу страницы справа приписывается индекс), которая выполняется быстрее.

Рис. 2.3. Двумерная модель адресного пространства (а) и схема адресации (б) при страничной организация памяти

Для обслуживания свопинга страниц применяются дисциплины замещения FIFO, LFU и LRU, которые упоминались при описании сегментного распределения памяти. Как правило, используются дисциплины аппаратно зависимые LFU и LRU, однако в семействе операционных систем Windows для обеспечения аппаратной независимости используется неэффективная дисциплина FIFO. Для компенсации её недостатка используется приём "буферизация". Он заключается в предварительной пометке страницы, подлежащей выводу во внешнюю память или расформированию. Если при дальнейшей работе страница и дальше используется редко или кратковременно, то она выгружается или расформировывается. Если до момента расформирования или выгрузки страница вызывается, то она уходит в конец очереди FIFO, а на её место помещается следующий кандидат. Таким образом, в голове очереди FIFO практически постоянно находятся часто или длительно используемые страницы.

Недостаток оперативной памяти приводит к тому, что в ней удаётся разместить не все часто используемые страницы. Вследствие этого с высокой частотой возникают прерывания выполнения программ для выполнения свопинга страниц. Это вредное явление называется "пробуксовкой памяти". Оно снижает производительность вычислительной системы. Одним из средств борьбы с пробуксовкой памяти является наращивание оперативной памяти.

В операционных системах, поддерживающих пакетный режим работы, применяется метод "рабочего множества". Установлено, что в течение конечного интервала времени Т среднее количество активных (т.е. часто или длительно используемых) страниц значительно меньше общего числа страниц, которые требуются работающими программами. Это множество активных страниц называется рабочим множеством. Тогда планировщик должен планировать только такое количество задач, сумма рабочих множеств которых не превышала бы возможности вычислительной системы.

Основным достоинством страничной организации памяти является малая фрагментация оперативной памяти. Однако неизбежным недостатком её является разделение программы на страницы, не учитывающее логические связи между элементами программы. Этот недостаток вызывает повышенное по сравнению с сегментным разделением памяти количество прерываний на переходы между страницами, что существенно снижает производительность систем. Существенными оказываются и накладные расходы на обслуживание страниц.

Сегментно-страничный способ организации памяти (рис. 2.4) предусматривает существование в виртуальном адресе элемента программы трёх компонент: номера сегмента, номера страницы в сегменте и номера ячейки памяти в странице. Если пренебречь разными размерами сегментов, то можно говорить о трехмерной модели адресного пространства, координатами которого являются номер сегмента, номер страницы и индекс ячейки памяти (рис. 2.4,а).

Операционная система ведёт таблицу дескрипторов сегментов текущей задачи и таблицу страниц сегмента задачи. При запуске программы в регистр дескрипторов сегментов записывается адрес таблицы дескрипторов сегментов. Вычисление физического адреса элемента программы осуществляется в три этапа:

  • вычисление адреса дескриптора сегмента как суммы адреса таблицы дескрипторов и номера сегмента;

  • вычисление адреса дескриптора страницы как суммы адреса начала сегмента и номера страницы;

  • вычисление адреса элемента программы как результата конкатенации адреса страницы и индекса элемента программы.

Очевидны большой расход памяти на таблицы дескрипторов сегментов и страниц и большие затраты времени на вычисление адреса, т.к. процедура вычисления адреса включает в себя две операции сложения и одну конкатенации. Преимуществами этого метода распределения памяти является практическое отсутствие её дефрагментации и низкое число прерываний выполнения программы на свопинг сегментов и страниц.

В целях уменьшения затрат времени на доступ к данным применяется кэширование по ассоциативному принципу. Ассоциативный принцип предусматривает замену результатов просмотра двух таблиц одним тегом, помещаемым в специальную ячейку кэш-памяти. Этот тег содержит адрес элемента программы в кэш-памяти. Поле тегов часто называют аргументом, а поле с данными – функцией.

а)

б)

Рис. 2.4. Трёхмерная модель адресного пространства (а) и схема адресации (б) при страничной организация памяти

В заключение изложенного следует отметить, что сегментно-страничная организация памяти является самой дорогой и в настоящее время используется, в основном, в высокопроизводительных вычислительных системах.

Контрольные вопросы:

  1. Что такое символьные имена?

  2. Что такое логическое адресное пространство?

  3. Что такое виртуальное адресное пространство?

  4. Что такое физическое адресное пространство?

  5. Какую функцию при определении физического адреса данных и команд выполняет система программирования?

  6. Какую функцию при определении физического адреса данных и команд выполняет операционная система?

  7. Какую особенность имеют программы при полной тождественности виртуального адресного пространства и физической памяти?

  8. Какую особенность имеют программы при полной идентичности виртуального адресного пространства и пространства имён программы?

  9. Как происходит определение физического адреса по базовому адресу и смещению при загрузке программы?

  10. Как физический адрес определятся при выполнении программы, если загрузчик программы не участвует в его определении?

  11. Что такое простое непрерывное распределение памяти?

  12. Какие недостатки имеет простое непрерывное распределение памяти?

  13. Что такое распределение памяти с перекрытием?

  14. Что такое оверлейные модули?

  15. Что такое распределение памяти статическими разделами?

  16. Какие недостатки имеет распределение памяти статическими разделами?

  17. Что такое свопинг разделов?

  18. Что такое фрагментация памяти?

  19. Что такое распределение памяти с динамическими разделами?

  20. Какой недостаток имеет распределение памяти с динамическими разделами?

  21. Какими способами планировщик памяти выделяет раздел при появлении новой задачи?

  22. Как происходит распределение памяти при её сегментной организации7

  23. Какие недостатки имеет сегментная организация памяти?

  24. Что такое таблица сегментов, какой она имеет формат и в каких целях она ведётся операционной системой?

  25. Какой формат имеет логический адрес при сегментной организации памяти?

  26. Как при сегментной организации памяти вычисляется физический адрес?

  27. Какие дисциплины используются при свопинге сегментов?

  28. Каковы недостатки сегментного способа организации памяти?

  29. Что такое страница памяти?

  30. Какой формат имеет логический адрес при страничной организации памяти?

  31. Как распределяется память при её страничной организации?

  32. Что такое таблица страниц? Каков её формат? В каких целях она ведётся?

  33. Как определяется физический адрес при страничной организации памяти?

  34. Каковы недостатки страничной организации памяти?

  35. Что такое сегментно-страничная организация памяти?

  36. Какой формат имеет логический адрес при сегментно-страничной организа­ции памяти?

  37. Как определяется физический адрес при сегментно-страничной организации памяти?

  38. Опишите двумерную модель памяти?

  39. Опишите трёхмерную модель памяти. При каких упрощениях возможно говорить о трёхмерной модели памяти?