Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

4.4.1. Страничная организация памяти

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

Виртуальными адресами, которые формируют виртуальное адресное пространство, называют адреса, которые получены программным способом. Виртуальные адреса в компьютерах, которые не используют виртуальную память, непосредственно выставляются на шине системной памяти. Таким образом, это приводит к чтению или записи тех слов физической памяти, которые имеют такой же адрес. В компьютерах, использующих виртуальную память, виртуальные адреса поступают в диспетчер памяти (Memory Management Unit (MMU)), который занимается отображением полученных адресов на реальные адреса памяти системы (рис. 4.5).

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

Рис

Рис. 4.5. Расположение и предназначение
диспетчера памяти

Например, архитектура x86-64 поддерживает следующие размеры для страниц — 4 Кбайт, 2 Мбайт и 1 Гбайт. Пользовательские приложения обычно используют страницы размером 4 Кбайт. Ядро системы обычно использует одну большую страницу размером 1 Гбайт.

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

Чтобы получить номер страничного блока, который соответствует виртуальной странице, в качестве индекса в таблице страниц используется номер страницы. Если значение бита присутствия-отсутствия равно 0, то будет вызвано системное прерывание, в противном случае из таблицы страниц извлекается номер страничного блока. Номер страничного блока копируется в старшие биты выходного регистра вместе со смещением из полученного виртуального адреса. Вместе они составляют искомый физический адрес в памяти, значение которого выставляется на шине памяти.

Предыдущий раздел Оглавление Следующий раздел