Распределние памяти: Paging (страничное распределение) и Segmentation (сегментное распределение)
(продолжение предыдущего поста)
1. Принцип разделения памяти
- Paging (страничное распределение):
- Логическое адресное пространство процесса делится на блоки фиксированного размера, называемые страницами (pages).
- Физическая память делится на блоки фиксированного размера, называемые фреймами (frames).
- На изображении видно, что логический адрес состоит из номера страницы (Page Number, 3 бита) и смещения (Offset, 10 бит), а физический адрес — из номера фрейма (Frame Number, 2 бита) и смещения (Offset, 10 бит).
- Используется таблица страниц (Page Table) для сопоставления номеров страниц с номерами фреймов.
- Segmentation (сегментное распределение):
- Память делится на сегменты переменного размера, которые соответствуют логическим частям программы (функции, объекты, массивы данных).
- На изображении логический адрес состоит из номера сегмента (Segment Number) и смещения (Offset).
- Используется таблица сегментов (Segment Table), где для каждого сегмента указаны базовый адрес (Base Address) и предел (Limit) — максимальный размер сегмента.
- Перед обращением к памяти проверяется условие Offset < Limit (если нет — генерируется прерывание Trap).
2. Структура адреса
- В Paging: адрес состоит из двух частей — номер страницы и смещение. Преобразование логического адреса в физический происходит через таблицу страниц.
- В Segmentation: адрес также состоит из двух частей — номер сегмента и смещение, но преобразование учитывает базовый адрес сегмента и его предел.
3. Преимущества
- Paging:
- Устраняет внешнюю фрагментацию (fragmentation) за счёт использования фиксированных блоков.
- Упрощает распределение памяти.
- Поддерживает эффективное перемещение (своппинг) и использование виртуальной памяти.
- Segmentation:
- Обеспечивает логическое разделение частей программы, что упрощает управление кодом и данными.
- Позволяет защищать и совместно использовать сегменты между процессами.
- Упрощает управление растущими структурами данных (например, динамическими массивами).
4. Недостатки
- Paging:
- Требует поддержания таблицы страниц, что влечёт дополнительные накладные расходы.
- Возможны задержки из-за частых обращений к таблице страниц.
- Segmentation:
- Переменные размеры сегментов могут приводить к внешней фрагментации.
- Управление таблицей сегментов может быть сложнее, особенно при большом количестве сегментов.
5. Применение
- Paging чаще используется в системах, где важны простота и производительность, а память управляется через унифицированные размеры страниц.
- Segmentation предпочтительна в средах, где структура программы и шаблоны использования памяти динамичны и разнообразны.
В качестве резюме: Paging ориентирован на эффективность и простоту за счёт фиксированных блоков, а Segmentation — на гибкость и соответствие логической структуре программы за счёт переменных сегментов.
Post #3188
1.9K