[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Принципы управления системой: Операционная система и устройства


Стратегия выделения пространства подкачки

В операционной системе выделение пространства подкачки может выполняться в двух режимах. Режим выделения определяется значением переменной PSALLOC. По умолчанию применяется алгоритм динамического выделения пространства подкачки. Для применения алгоритма статического выделения пространства подкачки следует присвоить переменной среды PSALLOC значение early.

Информация о пространстве подкачки

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

Система отслеживает число свободных блоков пространства подкачки и предупреждает о нехватке пространства подкачки. Когда число свободных блоков становится меньше установленного порога, называемого уровнем предупреждения пространства подкачки, система информирует об этом все процессы (кроме kprocs), отправляя сигнал SIGDANGER. Если объем свободного пространства подкачки оказывается меньше второго установленного порога, называемого критическим уровнем пространства подкачки, система отправляет сигнал SIGKILL процессам, использующим большую часть пространства подкачки, и процессам, не обрабатывающим сигнал SIGDANGER (по умолчанию сигнал SIGDANGER игнорируется процессами). Система отправляет сигнал SIGKILL до тех пор, пока число свободных блоков в пространстве подкачки не выйдет из критического диапазона.

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

Сравнение статического и динамического режима выделения пространства подкачки

Способ выделения памяти и пространства подкачки определяется значением переменной операционной системы PSALLOC. Если переменная PSALLOC не задана, ей присвоено значение null, или любое другое значение, отличное от early, то по умолчанию применяется алгоритм динамического выделения.

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

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

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

Для применения статического алгоритма выделения памяти и пространства подкачки следует изменить значение переменной среды PSALLOC. Этот алгоритм выделяет процессам пространство подкачки сразу после запроса. Если в этот момент объем свободного пространства окажется недостаточным, то запрос на выделение памяти выполнен не будет.

Если переменной среды PSALLOC будет присвоено значение early, то с этого момента все программы, запускаемые в данной среде (исключая уже запущенные процессы), будут выполняться в режиме статического выделения памяти. Если при работе в этом режиме в момент получения запроса зарезервировать требуемый объем памяти не удастся, то подпрограммы malloc и brk вернут код ошибки.

Процессам, выполняемым в режиме статического выделения памяти, сигнал SIGKILL в случае нехватки пространства подкачки не отправляется.

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

Изменение переменной среды PSALLOC для перехода в режим статического выделения памяти

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

  1. Введите следующую команду:

    PSALLOC=early;export PSALLOC
    

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

  2. Укажите следующую команду в файле .shrc или .kshrc:

    PSALLOC=early;export PSALLOC
    

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

  3. Добавьте следующую запись в файл /etc/environment:

    PSALLOC=early
    

    В этом случае все процессы системы, кроме процесса init (с ИД - 1), будут запущены в режиме статического выделения памяти и будут защищены от механизма обработки сигнала SIGKILL.

  4. Для присвоения переменной среды PSALLOC значения early в программе вызовите функцию putenv. Режим статического выделения памяти будет применяться после следующего вызова подпрограммы exec.

Информация о режиме статического выделения памяти

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

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

Некоторые приложения, запускаемые в режиме статического выделения памяти могут использовать очень большой объем пространства подкачки. Современному серверу AIXwindows для выполнения приложений в режиме статического выделения памяти необходимо более 250 Мб пространства подкачки. Объем пространства подкачки, необходимый для каждого приложения, зависит от алгоритма и режима работы приложения.

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

Программный интерфейс

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

  1. Для того чтобы узнать текущее значение переменной среды PSALLOC, вызовите функцию getenv.
  2. Если переменной среды PSALLOC присвоено неверное значение, измените его с помощью подпрограммы setenv. Так как значение переменной PSALLOC проверяет только подпрограмма execve, то вызовите подпрограмму execve, указав в ней набор параметров и переменных среды, полученных приложением. После того, как приложение повторно проверит значение переменной среды PSALLOC и обнаружит правильное значение, его работа будет продолжена.
  3. Если функция getenv вернет верное значение переменной среды PSALLOC, ничего изменять не нужно. Выполнение приложения продолжится в обычном режиме.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]