![Управление памятью в ОС](../Pictures/06_01.%20Управление%20памятью%20в%20ОС.png) ## Методы распределения внешней памяти - **Без использования внешней памяти** - **Фиксированными разделами**. При установке ОС вся физическая память делится на разделы фиксированной длины. После чего количество разделов и их размеры остаются неизменными. Таким образом количество одновременно выполняемых задач не более числа разделов, а размер самой большой задачи не более размера самого большого раздела - **Динамическими разделами** - **Переменными разделами** - **С использованием внешней памяти** - **Страничное распределение**. Все виртуальное адресное пространство разделяется на страницы фиксированного размера (например, 4 Кб). На аналогичные страницы разбивается и вся физическая память. Когда процесс поступает в операционную систему, диспетчер памяти должен разместить каждую страницу процесса в физической памяти. Если в физической памяти для всех страниц не хватает, они располагаются в специальном файле или даже разделе операционной системы (т. н. файл подкачки или swap-файл). В любом случае текущая страница процесса должна находится в физической памяти. Для того, чтобы корректно работать в подобном режиме, операционная система для каждого процесса заводит таблицу страниц, где для каждой виртуальной страницы указывается, присутствует она в физической памяти или нет, и если присутствует - то по какому адресу. Такие таблицы бывают 2 видов: GDT (Global Descriptor Table, таблица системного процесса) и LDT (Local Descriptor Table, таблица пользовательского процесса). Адреса этих таблиц находятся в регистрах GDTR и LDTR, команды которых являются привилегированными. ![Страничное распределение](../Pictures/06_02.%20Страничное%20распределение.png) Может случится так, что страница находится во внешней памяти, а свободного места в физической нет. Необходимо какую-то страницу выгрузить во внешнюю память, а текущую загрузить из внешней в физическую. Возникает вопрос - по какому принципу выбирать страницу для выгрузки? Для этого существует несколько алгоритмов: FIFO (First In First Out), LRU (Least Recently Used), LFU (Last Frequency Used), Random. Основной плюс страничного механизма в том, что все страницы одинакового размера, а значит полностью отсутствует фрагментация памяти. Минусы: замедление вычисления физического адреса за счет страничного механизма; код и данные любого процесса делятся на страницы без учета логической структуры, что приводит к более частому межстраничному переходу. - **Сегментное распределение**. При этом механизме виртуальное адресное пространство делится не на страницы одинаковых размеров, а на логические сегменты. В таблице дескрипторов сегментов процесса нужно указывать начальный адрес сегмента, его размер, адрес, с которого начинается физический сегмент, права доступа и некоторую другую информацию. ![Сегментное распределение](../Pictures/06_03.%20Сегментное%20распределение.png) Плюсы: деление на логические сегменты и, следовательно, более редкие межсегментные переходы; возможность создавать разделяемые сегменты. Минус - фрагментация памяти. - **Сегментно-страничное распределение**. Все виртуальное адресное пространство делится на логические сегменты, что позволяет использовать все плюсы сегментного механизма. Но перемещение страниц между внешней памятью и физической происходит страницами, для чего каждый сегмент делится на страницы. ![Сегментно-страничное распределение](../Pictures/06_04.%20Сегментно-страничное%20распределение.png)