2016-12-07 4 views
0

Поскольку у меня есть только первое издание книги: Понимая ядро ​​Linux, я прочитал некоторый исходный код Linux 2.2.14, который очень старый.Являются ли страницы памяти, принадлежащие открытому файлу, управляемым как vm_area_struct?

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

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

Или мое понимание, например, страницы файлов не управляются списком vm_area_struct процесса, это совершенно неправильно?

ответ

0

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

При нехватке памяти может возникнуть смысл перемещать часть того, что в настоящее время находится в памяти, на другое хранилище. Анонимные страницы приземляются в свопе. Файлообменные страницы, если они чисты, просто выселяются. Если грязный, сначала напишите. Поэтому, в частности, они не попадают в swap - почему бы вы поместили их там, если вы можете сделать один и тот же ввод-вывод и просто очистить файл. Обратите внимание, хотя это может иметь смысл, если файл был поддержан удаленным fs, и в то время он был недоступен, тогда как swap был локальным.

Рассмотрение с vm_area_struct является общей красной селедкой. Я только заметлю, что ваша ментальная модель здесь, похоже, отключена. Сначала небольшая нить, открывающая файл, не делает карту процесса чем-либо. Возможно, вы имели в виду mmaping файл. Файл может обрабатываться несколькими различными процессами одновременно, и даже если нет и не открыт кем-либо, страницы могут просто сохраняться как кеш. Анонимная память имеет сходные соображения при использовании - например, что происходит после fork? Следовательно, хотя действительно заданный mm struct будет иметь «соединение» с конкретной страницей, есть слой ниже.

Смежные вопросы