Академический Документы
Профессиональный Документы
Культура Документы
Средства и
механизмы управления основной
памятью
Презентация
На тему: “менеджер памяти в Linux.
Средства и механизмы управления
основной памятью
Менеджер памяти
0 – значение по умолчанию. В этом случае используется эвристика, которая следит за тем, чтобы мы не
смогли выделить виртуальной памяти в процессе намного больше, чем есть в системе;
1 – говорит о том, что мы никак не следим за объёмом выделяемой памяти. Это полезно, например, в
программах для вычислений, которые выделяют большие массивы данных и работают с ними особым
способом;
Если говорить упрощённо, то у ядра есть один большой Free List (на самом деле, это не
так), в котором хранятся страницы памяти, которые можно выдавать процессам. Ядро
пытается поддерживать размер этого списка в каком-то не нулевом состоянии, чтобы
быстро выдавать память процессам. Пополняется этот список за счёт четырех
источников: Page Cache, Swap, Kernel Memory и OOM Killer.
Мы должны различать участки памяти на горячую и холодную и как-то пополнять за счет них наши Free
Lists. Page Cache устроен по принципу LRU/2 очереди. Есть активный список страниц (Active List) и
инактивный список (Inactive List) страничек, между которыми есть какая-то связь. В Free List прилетают
запросы на выделение памяти (allocation). Система отдаёт страницы из головы этого списка, а в хвост
списка попадают страницы из хвоста инактивного (inactive) списка. Новые страницы, когда мы читаем файл
через Page Cache, всегда попадают в голову и проходят до конца инактивного списка, если в эти страницы
не было еще хотя бы одного обращения. Если такое обращение было в любом месте инактивного списка,
то страницы попадают сразу в голову активного списка и начинают двигаться в сторону его хвоста. Если же
в этот момент опять к ним происходит обращение, то страницы вновь пробиваются в верх списка. Таким
образом система пытается сбалансировать списки: самые горячие данные всегда находятся в Page Cache в
активном списке, и Free List никогда не пополняется за их счет.
Также тут стоит отметить интересное поведение: страницы, за счет которых
пополняется Free List, которые в свою очередь прилетают из инактивного списка, но до
сих пор не отданные для аллокации, могут быть возвращены обратно в инактивный
списка (в данном случае в голову инактивного списка).
Итого у нас получается пять таких листов: Active Anon, Inactive Anon, Active File, Inactive
File, Unevictable. Такие списки создаются для каждой NUMA ноды и для каждой Memory
Zone.