Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_osi.doc
Скачиваний:
72
Добавлен:
11.02.2015
Размер:
218.11 Кб
Скачать

28. Методы распределения памяти между процессами с использованием внешнего накопителя

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

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

  1. своппинг(swapping). Это самая простая стратегия заключается в том, что каждый процесс полностью переносится в память, работает некоторое время и затем целиком возвращается на диск.

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

Хороших результатов можно достигнуть комбинируя оба этих способа.

Своппинг

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

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

Виртуальная память

Виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память решает следующие задачи:

*размещает данные в запоминающих устройствах разного типа;

*перемещает по мере необходимости данные между запоминающими устройствами разного типа;

*преобразует виртуальные адреса в физические.

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

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

Наиболее распространенными реализациями виртуальной памяти является страничное, сегментное и странично-сегментное распределение памяти, а также свопинг. ЕЩЕ НИЖЕ СМОТРИ ПРО ВИРТУАЛЬНУЮ ПАМЯТЬ

29. Виртуальная память. Способы организации виртуальной памяти. Страничная организация виртуальной памяти. Сегментная и странично - сегментная организация виртуальной памяти.

Виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память решает следующие задачи:

размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;

перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память;

преобразует виртуальные адреса в физические.

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

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

страничная организация виртуальной памяти

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

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

Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

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

сегментная и странично - сегментная организация виртуальной памяти

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

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

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

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

Странично-сегментное распределение

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

30. организация виртуальной памяти при меньшем размере оперативной памяти. Алгоритмы подкачки. организация виртуальной памяти при меньшем размере оперативной памяти. Алгоритмы подкачки Unix. страничное замещение, swapping, копирование страниц при попытке записи.

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

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

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

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

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

Алгоритмы:

FIFO(first in first out)- первым выгрузится самый старый процесс.

LRU(least recently used) будет выгружена страница к которой меньше всего обращений. Сложный алгоритм, так как требует создания таблицы, где хранятся обращения к страницам памяти. Для этого используются специальные счетчики задач, которые возрастают с каждым обращением.

Во время работы с виртуальной памятью может возникнуть ситуация TRASHING. Когда два процесса обращаются друг к другу и выгружают друг друга.

Алгоритмы подкачки Unix. страничное замещение, swapping

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

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

Откачку страниц, не входящих в рабочие наборы процессов, производит специальный системный процесс-stealer. Он начинает работать, когда количество страниц в списке свободных страниц достигает установленного нижнего порога. Функцией этого процесса является анализ необходимости откачки страницы (на основе признака изменения) и запись копии страницы (если это требуется) в соответствующую область внешней памяти (т.е. либо в системную область подкачки - swapping space для анонимных страниц, либо в некоторый блок файловой системы для страницы, входящей в сегмент отображаемого файла).

Но если возникает требование страницы в условиях, когда список описателей свободных страниц пуст, то начинает работать механизм свопинга. Основной повод для применения другого механизма состоит в том, что простое отнятие страницы у любого процесса (включая тот, который затребовал бы страницу) потенциально вело бы к ситуации thrashing, поскольку разрушало бы рабочий набор некоторого процесса.

Разновидностью виртуальной памяти является свопинг.

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