Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БОС_Магданов.docx
Скачиваний:
10
Добавлен:
01.03.2025
Размер:
460.85 Кб
Скачать

6.Управление памятью в операционных системах.

Различают два вида памяти:

  1. Основная или оперативная.

  2. Внешняя.

В оперативной памяти выделяют особую сверхбыстродействующую часть - кэш.

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

Под организацией памяти понимается то, каким образом она предоставляется. Под управлением памятью понимается то, как она используется. Предоставление памяти осуществляется в основном следующими способами:

  1. Фиксируемыми блоками равного размера.

  2. Фиксированными разделами неодинакового размера.

  3. Динамическими разделами, размеры которых изменяются в ходе работы.

Использование может осуществляться следующими способами:

  1. Размещение в памяти единовременно только одной программы.

  2. Нескольких программ одновременно.

  3. Размещение программ в конкретном заранее заданном разделе.

  4. Размещение каждой программы в одном непрерывном (односвязном) пространстве памяти.

  5. Размещение программы в несмежных областях памяти.

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

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

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

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

Если у нас в ОС реализован режим мультипрограммирования, то нам необходимо распределять память между несколькими одновременно выполняющимися задачами. Существует 2 основных способа такого распределения:

  1. Это распределение фиксированными разделами,

  2. Распределение переменными разделами,

  3. А также распределение свопингом (сворачивание), которое может использоваться и в первых 2х и самостоятельно.

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

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

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

В итоге мы наблюдаем новое явление, которое получило название Фрагментация памяти, т.е. чередование занятых и незанятых участков памяти (2 причины – очереди и наличие свободных участков памяти). Защита памяти при распределении фиксированными разделами также выполняется с помощью регистров границы, но теперь для каждого раздела их требуется 2, в первом указывается адресное начало блока, во втором его верхняя граница.

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

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

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

Стратегии размещения информации в памяти заключаются в следующем:

  1. Стратегия первый подходящий содержит следующие шаги – упорядочить таблицу свободных областей в порядке возрастания адресов -> поместить информацию в первый встретившийся блок подходящего размера.

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

  3. Стратегия самый неподходящий – упорядочить таблицу в порядке убывания размера областей -> поместить информацию в первый встретившийся блок с размером не менее требуемого.

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

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

//Замечу что проблема очень остро стояла 40 лет когда умудрялись первые вычислительные монстры и имели память 32 килобайта, которую умудрялись делить на несколько заданий, именно тогда появились первый оверлейные перекрытия, но для программиста он не снимает проблемы физической памяти. Возникло понятие, почему бы нам не программировать свободно в виртуальных адресах. И пусть уже потом ОС эти адреса переводят в реальные адреса.

Существует 2 наиболее известных способа реализации виртуальной памяти:

  1. страничный

  2. сегментный

  3. встречаются также их комбинации.

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

Адреса, на которые ссылаются процесс или программа называются виртуальными, а реальные адреса называются реальными или физическими адресами. Виртуальные адреса образуют пространство виртуальных адресов, реальная память образуют диапазон реальных (физических) адресов. Для установления соответствия между этими адресами разработаны механизмы динамического преобразования адресов.

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

Механизм динамического преобразования ведет учет какие ячейки в виртуальной памяти в данный момент находятся в реальной и где именно в ней они размещаются. Это делается с помощью таблиц механизма динамического преобразования адресов (ДПА, DAT). Информация, перемещаемая из виртуальной памяти механизмом ДПА, группируется в блоки. Размер блока определяет, какую часть реальной памяти ДПА будет использовать непроизводительно для своих целей.

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

Существует четыре основных схемы преобразования адресов виртуальных в реальные:

  1. Схема прямого отображения адреса

  2. Схема отображения адреса при страничной организации памяти, схема отображения при сегментной организации памяти

  3. Схема отображения при сегментно – страничной организации.

Как правило, здесь используется политика косвенной или базовой адресации – упорядоченная пара двух адресов – 1ый базовый адрес, 2ой смещение относительно базового V=(b,d).

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

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

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