ОС сбрасывает кэш процессора при сбое процесса?

Когда процесс внезапно завершается операционной системой (предположим, Linux) через GPF, SIGKILL или подобное, ОС сбрасывает измененные строки кэша ЦП процесса в основную память? Есть ли другое поведение в зависимости от процессора или ОС?

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

Спасибо за любую помощь!

1 ответ

Вообщем да. "Сбой" процесса не приведет к потере последних записей в память.

С точки зрения ЦП, возбуждение исключения используется так же часто для "нормальных" событий, как и для фатальных. Например, доступ к не отображенной странице памяти не всегда вызывает сбой посредством GPF/SEGV; многие операционные системы будут использовать это событие для реализации динамического пейджинга в памяти (например, чтение страниц отображенного в памяти файла; выделение физической памяти для области памяти с нулевым заполнением; копирование страниц памяти COW). Точно так же другие исключения ЦП, такие как программные прерывания или программно-эмулированные инструкции, могут интерпретироваться операционной системой и передаваться обратно процессу, не убивая его.

(Также: рассмотрим случаи генерации дампа памяти и отладчиков. Завершенный процесс не всегда уничтожается сразу; операционная система может сохранять свое состояние в памяти для различных целей.)

Большинство операционных систем либо очищают кеш при переключении контекста, либо позволяют ЦП нормально выписывать страницы из кеша. В любом случае недавние записи не будут проигнорированы.

Другие вопросы по тегам