Данные с НМЖД читаются в ОЗУ. Если данные не нужны, а память, где они лежат, нужна — система просто использует эту память. Всё.
Где должно возникать "медленнее" — непонятно. В ОЗУ не лежат изменённые файлы, до последнего ждущие самого неподходящего момента для синхронизации с НМЖД.
В какое-такое ОЗУ?
Напрямую, в планки памяти?Дмитрий, в Linux, как и в любой другой системе, работающей в "защищенном режие" процессора адресация памяти виртуальна. И распределением памяти, ее выгрузкой на диск (в файл подкачки), загрузкой обратно по соотв. сигналу (прерыванию) и так далее, занимается специальная служба, менеджер. Этот менеджер следит за свободными страницами памяти и ведет таблицу их использования. Работает он с внешним миром через механизм syscall.
Файловый кеш - это некая служба НИЖЕ по уровню, чем менеджер памяти. И этот файловый кеш запрашивает у менеджера памяти память под свои нужды. В зависимости от политик - до 99% свободной памяти, как настроишь. В случае, если свободной памяти становится маловато, кеш отдает свою память обратно менеджеру памяти, перераспределяя при этом свои страницы кеша, выполняя те или иные действия конфигурационного характера. Все это требует процессорного времени. В результате - память "из-под кеша" выделяется примерно в 20-50 раз медленнее, чем из общего пула.
Это я на пальцах описал, не вдаваясь глубинную суть процессов, скрытых в ядре. Если есть нужда - могу написать очень подробно и предметно.
А для того, чтобы узнать метрики памяти, моя программа использует вызов
sysinfo() из библиотеки libc
man sysinfo
. Который в Linux приводит к вызову соотв.
syscall (sys_sysinfo). Скажите, почему в структуре
struct sysinfo кеш не упоминается ни разу?