logo search
Методичка

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

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

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

В процессорах семейства IA-32 страничная организация памяти (paging) позволяет разделить сегмент на блоки памяти размером 4096 байтов, которые называются страницами (page). В результате можно легко сделать так, чтобы суммарный объем оперативной памяти, используемой во всех выполняющихся на компьютере программах, превышал объем реальной (т.е. физической) памяти компьютера. Именно поэтому страничная организация памяти очень часто называется виртуальной памятью (virtual memory). Работоспособность системы виртуальной памяти обеспечивает специальная программа, являющаяся частью операционной системы, которая называется диспетчером виртуальной памяти (virtual memory manager).

Страничная организация памяти как нельзя лучше решает наболевшую проблему для всех разработчиков аппаратного и программного обеспечения – проблему нехватки памяти. Дело в том, что перед началом выполнения любая программа должна быть загружена в оперативную память компьютера, размер которой, как известно, всегда ограничен по тем или иным причинам (например, в силу конструктивных особенностей компьютера или цены модуля памяти). Пользователи компьютера обычно загружают в память сразу несколько программ, чтобы в процессе работы иметь возможность быстро переключаться между ними (например, переходить из одного окна в другое). С другой стороны, объемы дисковой памяти намного превышают объемы оперативной памяти компьютера, да и к тому же эта память намного дешевле. Поэтому за счет привлечения дисковой памяти при использовании страничной организации памяти для пользователя создается впечатление, что он располагает ОЗУ неограниченного объема. Разумеется, за все нужно платить; скорость доступа к дисковой памяти на несколько порядков ниже, чем к оперативной памяти.

При выполнении программы, участки ее оперативной памяти (или страницы), которые не используются в данный момент, можно безболезненно сохранить на диске. Говорят, что часть задачи вытеснена (swapped) на диск. В оперативной памяти компьютера имеет смысл сохранять только те страницы, к которым процессор активно обращается, например, выполняет некоторый программный код. Если же процессор должен обратиться к странице памяти, которая в настоящий момент вытеснена на диск, происходит системная ошибка (или прерывание) из-за отсутствия страницы (pagefault). Обработкой этой ошибки занимается диспетчер виртуальной памяти операционной системы, который находит на диске страницу, содержащую нужный код или данные, и загружает ее в свободный участок оперативной памяти. Если вы хотите убедиться в том, что страничная организация памяти действительно работает, достаньте где-нибудь старый компьютер, оснащенный ОЗУ сравнительно небольшого объема (32 или 64 Мбайт) и попытайтесь одновременно запустить 5–10 различных программ. При переходе из окна одной программы в окно другой вы будете ощущать небольшую (или очень большую, все зависит от объема памяти!) задержку, поскольку в этот момент операционная система компьютера будет вытеснять часть страниц одной задачи на диск и загружать с диска в освободившиеся участки памяти страницы другой задачи. Если добавить компьютеру оперативной памяти, операционная система будет быстрее реагировать на команды пользователя, поскольку при этом часть страниц не вытесняется на диск и сохраняется в оперативной памяти. Другими словами, чем больший объем ОЗУ, тем меньше страниц вытесняется на диск за единицу времени.

Вопросы для самопроверки

  1. Какова основная идея использования многоуровневой памяти?

  2. В чём заключается принцип локализуемости обрабатываемых данных?

  3. Какова организация кэш-памяти?

  4. Какие существуют протоколы когерентности памяти?

  5. Каков размер сегмента при страничной организации памяти?