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

Программирование: Разработка и отладка программ


Адресное пространство программы - Обзор

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

Архитектура памяти системы - Введение

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

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

Пространство физических адресов в 32-разрядных системах

Аппаратное обеспечение предоставляет доступ к виртуальной памяти с диапазоном адресов от 0x0000000000000 до 0xFFFFFFFFFFFFF. Общее адресное пространство, таким образом, составляет более 1 000 Тб. Команды обращения к памяти оперируют с 32-разрядными адресами: 4 бита указывают сегментный регистр, а 28 бит задают смещение внутри сегмента. Такая схема адресации обеспечивает доступ к 16 сегментам, до 256 Мб каждый. Каждый сегментный регистр содержит 24-разрядный ИД сегмента, который вместе с 28-разрядным смещением образует адрес виртуальной памяти. Этот 52-разрядный виртуальный адрес ссылается на единое системное пространство виртуальной памяти.

Адресное пространство процесса представляет собой 32-разрядное адресное пространство, то есть программы используют 32-разрядные указатели. При этом процессы или обработчики прерываний могут обращаться только к тем областям системной виртуальной памяти (сегментам), ИД которых хранятся в сегментном регистре. Для быстрого обращения к различным сегментам (число которых может быть больше 16) процесс может использовать разные сегментные регистры.

32-разрядные процессы в 64-разрядных системах используют то же рабочее адресное пространство, что и в 32-разрядных системах (23 2 байт), но могут работать с тем же пространством виртуальных адресов, что и 64-разрядные процессы (28 0 байт).

Пространство физических адресов в 64-разрядных системах

Аппаратное обеспечение предоставляет доступ к адресам виртуальной памяти, лежащим в непрерывном диапазоне от 0x00000000000000000000 до 0xFFFFFFFFFFFFFFFFFFFF. Общее адресное пространство, таким образом, составляет более 1 триллиона Тб. Команды обращения к памяти оперируют с 64-разрядными адресами: 36 бит указывают сегментный регистр, а 28 бит задают смещение внутри сегмента. Такая схема адресации обеспечивает доступ более чем к 64 миллионам сегментов, до 256 Мб каждый. Каждый сегментный регистр содержит 52-разрядный ИД сегмента, который вместе с 28-разрядным смещением образует адрес виртуальной памяти. Этот 80-разрядный виртуальный адрес ссылается на единое системное пространство виртуальной памяти.

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

Адресация сегментных регистров

Ядро системы загружает несколько сегментных регистров, тем самым неявно разрешая всем процессам обращение к областям памяти, которые нужны для работы большинства процессов. Эти регистры позволяют обращаться к двум сегментам ядра, сегменту общих библиотек и к сегменту устройств ввода-вывода, совместно используемым всеми процессами. Программам, не входящим в ядро, содержимое этих сегментов доступно только для чтения. Существует также сегмент для системного вызова процесса exec, который совместно используется (только для чтения) и несколькими процессами, применяемыми в одной программе; частный сегмент данных общих библиотек, содержащий данные библиотек, доступные только для чтения; сегмент, доступный для чтения-записи, и частный сегмент процесса. В остальные сегменты можно загрузить значения в соответствии с принципам отображения памяти для увеличения общего объема памяти, либо для работы с файлами, отображаемыми в память, в соответствии с правилами, устанавливаемыми ядром. Информация о средствах преобразования адресов памяти приведена в разделе Отображение памяти - Основные сведения.

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

Пространство подкачки

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

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

Стратегия управления памятью

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

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

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

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

Выделение памяти

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

Связанная информация

В руководстве AIX 5L Version 5.1 Performance Management Guide целый раздел посвящен администратору виртуальной памяти (VMM) и алгоритмам его работы.

В разделе Работа с памятью ядра описаны расширения ядра, предназначенные для работы с его памятью.


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