![Управление памятью в ОС](../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)