2016-11-30 10 views
1

Когда я просматриваю код в одном драйвере устройства в Linux, я обнаружил, что в потоке (процессе) установлен флаг PF_MEMALLOC. Я нашел определение этого флага в файле заголовка, который, говоря, что «Выделение памяти»Что такое использование флага PF_MEMALLOC

#define PF_MEMALLOC  0x00000800  /* Allocating memory */ 

Итак, мои сомнения здесь есть, что именно использование этого флага, если установить его в процесс/нить, как код current->flags |= PF_MEMALLOC;

ответ

3

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

Это делается для того, чтобы убедиться, что если код, который пытается освободить страницы для удовлетворения первоначального запроса на выделение, должен выделять небольшой объем памяти для продолжения, этот код не будет рекурсивно пытаться освобождать страницы.

Большинство водителей не должны использовать этот флаг.