Структура памяти процесса в ОС Linux
Управление памятью в ОС Linux. Карта памяти.
Алгоритмы выделения памяти в ОС Linux.
Виртуальное адресное пространство в ОС Linux.
Виртуальные адресные пространства делятся на однородные, непрерывные, выровненные по границам области. Каждая область состоит из участка смежных страниц с одинаковой защитой и страничной организацией. Между областями виртуального адресного пространства могут быть пустые промежутки. Ссылка на такой промежуток приводит к фатальной страничной ошибке. Каждая область описывается в ядре, структурой vm_area_struct. Все эти элементы связываются вместе в список, отсортированный по виртуальным адресам. Когда список становится слишком длинным (более, чем 32 элемента), для ускорения поиска по нему создается дерево. В элементе vm_area_struct перечислены свойства области, например режим защиты, направление роста сегмента, информация о том, закреплен (не подкачивается) ли он в памяти, является ли данная область приватной для какого-либо процесса, имеет ли область резервное хранение на диске, и, если имеет, то где.
Подкачка в ОС Linux.
Единицей управления памятью в linux является страница. и почти весь компонент управления памятью работает с точностью до страницы. основная идея подкачки страниц очень проста и тесна связана с алгоритмом PFRA (page frame algorithm)
идея подкачки в linux:
процессу не обязательно находиться целиком в памяти, для того, чтобы выполняться.
все, что нужно, это пользовательская структура (необходимая страница) и таблица страниц. если они подкачаны в память, процесс считается находящимся в памяти, и может планироваться для выполнения. Страницы сегментов текста, данных, стека, подкачиваются динамически по мере появления ссылок на них.
если пользовательская структура страниц не находится в памяти, то процесс не может выполняться до тех пор, пока таблица страниц и необходимые страницы не будут загружены в память.
подкачка частично реализована ядром и частично процессом. называется Page Daemon. его приоритет равен 2.
Работа данного процесса можно представить следующим образом:
В большинстве случаев, процесс работает в фоновом режиме, периодически просыпаясь и совершая необходимые действия. Если системе срочно необходима работа данного процесса, то он запускается принудительно. После пробуждения, процесс анализирует ситуацию, и если он видит, что количество страниц слишком мало, то он начинает освобождать страницы.
Операционная система linux является системой с подкачкой страниц по требованию без упреждающей подкачки.
Текстовые сегменты и отображаемые на адресное пространства файлы подгружаются из соответствующих им файлов на диске. Все остальное подгружается либо в раздел подкачки, либо один из файлов подкачки. Файлы подкачки могут добавляться и удаляться динамически и у каждого свой приоритет.
подкачка страниц из отдельного раздела диска, доступ к которому осуществляется как к отдельному устройству, не содержащему файловую систему, более эффективно по нескольким причинам:
1. не требуются отображения блоков файлов в блоки диска. (Не нужен лишний перевод из физического уровня в логический)
2. физическая запись может иметь любой размер, а не только размер блока файлов.
3. страница всегда пишется на диск в виде единого непрерывного участка. (В файле подкачки это может быть не так)
страницы на устройстве подкачки не выделяется до тех пор, пока они не потребуются. каждый файл подкачки начинается с битового массива, в котором сообщается, какие страницы свободны. когда страница, у которой нет резервного хранения на диске, должна быть удалена из памяти, то из разделов или файлов подкачки , в котором еще есть свободное место, выбирается раздел или файл с наивысшим приоритетом и в нем выделяется страница. как правило, любой раздел подкачки, имеет более высокий приоритет, чем любой файл подкачки. далее, таблица страниц обновляется, чтобы отобразить тот факт, что страница отсутствует в памяти.