Проблемы при острой нехватки памяти.

 

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

 

Алгоритмы подкачки UNIX

Тут чтобы обеспечить переносимость создали идею, где Виртуальная память процессов делится на несколько сегментов

1) Сегмент программного кода или TEXT SEGMENT Этот сегмент является сегментом только для чтения, а во вторых он является разделяемым, в нём хранятся только команды т.к. в теории и на практике программный код не меняется во время выполнения, он может разделяться между несколькими процессами одновременно для экономии памяти.

2) Сегмент данных DATA SEGMENT – этот сегмент доступен в обоих режимах содержит неинициализированные и инициализированные статические переменные программы , используемые в данном процессе.

3) Сегмент Стека STACK SEGMENT – в нём хранятся автоматические переменные программы явно или неявно к ней присутствующие.

4) Разделяемый сегмент SHARE SEGMENT – Получается при подключении к процессу сегмента разделяемой памяти. Это нужно для синхронизации несколькх процессов и для их совместной работы.

5) Сегмент файлов отображаемых в виртуальной памяти MAPPED FILES выделяется на чтение и запись и является разделяемым. Одна из разновидностей разделяемого сегмента но предназначен для работы с файлами.

 

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

1) PAGE DEAMON – осуществляет страничный обмен

2) Процесс-SWAPPER – в случае необходимости выгружает процессы целиком.

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

Если в системе памяти в данный момент не достаточно, процессы работают как обычно, в случае, когда нужно освободить память. Т.е. количество свободных ячеек приближается к пороговому значению включается программа PAGE DEAMON. Который сканируя страницы памяти определяет какие страницы можно выгрузить и начинает их выгружать. Как только количество свободных страниц достигает нормального значения, PAGE DEAMON прекращает выгрузку. Если вдруг в системе начинает наблюдаться острая нехватка памяти, т.е количество свободных страниц превышает критическое значение. Page Deamon не справляется, активируется программа Swapper, которая начинает целиком выгружать процессы на диск. Тот процесс, который затребовал себе страницу памяти, которой нет в ОЗУ помещается в очередь на выгрузку.

 

 

Дополнительные возможности в системе Unix

1) Копирование страницы при попытке записи. ( copy on write) - рисунок в тетради Леонида Евгеньевича. При создании нового процесса не тратится время на копирование физических страниц, так же экономится память. Например процессу Б требуется записать что то в четвёртую страницу, в этом случае при попытке записи в физическую страницу памяти обнаруживается что установлен запрет на запись. При этом происходит прерывание и управление передаётся операционной системе. ОС определяет какой именно процесс родитель или предок пытается записать страницу, создаёт копию данной страницы в памяти и эта страница присоединяется к виртуальному адресному пространству соответствующего процесса и управление передаётся опять программе.

Таким образом в памяти наблюдается следующая ситуация: (Рисунок смотрите в тетради.) Те страницы которые изменялись будут скопированы, но только те которые требуется, а неизменные страницы останутся не тронутыми – в памяти будет находиться не две, а полторы копии процесса.