Skip to content

Виртуальная память и cache

Виртуальная память - память которая предоставляется процессу, если процесс запросит 1Гб - то ему будет выделено 1Гб вирт памяти(но не факт что процесс израсходует ее всю), но если сработает overcommit_memory, то придет OOMKiller и запустится освобождение памяти и одним из первых попадут процессы, которые потребляет больше памяти(например СУБД)

В рамках процесса есть собственное адресное пространство памяти, только присуще этому процессу, но ничего общего с физической памятью не имеет.

Физическая память начнет выделяться только тогда, когда программа начнет в эту память что-то записывать.

Будет построена Карта памяти - по сути это маппинг виртуального адр пространства на физическое адр адреса.

Вирт память нужна для защищенности программы , для защищенной работы ядра(ядро в своем пространстве) и процессы в пространство ядра попасть не смогут. И это достигается за счет того, что в процессоре есть защищенный режим работы с памятью, если бы не было, то про вирт память речи и не было.

В оперативной памяти существует страницы файловые и анонимные(когда приложение в процессе выполнения генерит данные в ОП). Из cache можно выгрузить файловые страницы оперативной памяти, потому что у них есть связь с данными на диске(например прочитанный файл):

очистить buf/cache:

sync; echo 1 > /proc/sys/vm/drop_caches
sync - will flush the file system buffer
drop_cache - will clean cache without killing any application/service
1 - PageCache only, 2- dentries,inodes, 3 - 1+2
а в случае с анонимными страницами таким кэшем выступает swap, если он включен.

очистить swap: swapoff -a && swapon -a