Страничная и сегментная память
08.10.2024
Last updated
08.10.2024
Last updated
Виртуальная память делится на страницы одинакового размера (512 байт — 64 Кбайт). Эти страницы помещаются в физическую память, разбитую на страничные кадры. Чтобы обращаться к данным, используется таблица страниц, которая связывает виртуальные адреса с физическими.
Процесс перевода адреса происходит через MMU — контроллер, который преобразует виртуальный адрес в физический, проверяет, находится ли нужная страница в памяти, и, если да, формирует физический адрес для доступа.
Если страницы нет в памяти, она загружается с диска по запросу (вызов по требованию). Операционная система предсказывает, какие страницы понадобятся, и загружает их заранее (рабочее множество).
Для освобождения памяти ОС использует алгоритмы замещения:
LRU — удаляет страницу, которую давно не использовали.
FIFO — удаляет самую старую страницу.
Когда программа не полностью заполняет последнюю страницу, возникает внутренняя фрагментация — неиспользуемое пространство внутри страницы. Чем меньше размер страницы, тем меньше фрагментация, но при этом потребуется больше страниц, что увеличивает нагрузку на ресурсы компьютера и частоту обращения к диску. Поэтому выбор размера страницы — это компромисс между эффективностью использования памяти и производительностью.
Сегментация — это метод организации памяти, при котором используется несколько независимых адресных пространств (сегментов). Каждый сегмент может менять размер, не влияя на другие. Это упрощает работу с памятью при изменении данных или программы.
Сегменты — это логические элементы (например, процедуры, массивы), которые могут иметь разные права доступа. Например, сегмент может быть доступен только для чтения или только для выполнения, что помогает защитить программу от ошибок.
Сегментация может работать двумя способами:
Чистая сегментация — сегменты загружаются в память по запросу, как страницы. Если памяти не хватает, старые сегменты удаляются. Однако, в отличие от страниц, сегменты имеют переменный размер, что вызывает внешнюю фрагментацию — пустое пространство между сегментами. Для её устранения иногда требуется дефрагментация, что снижает производительность.
Сегментация с разбиением на страницы — сегменты делятся на страницы фиксированного размера. Это снижает проблемы с фрагментацией, но требует отдельную таблицу страниц для каждого сегмента.