2016-11-30 1 views
1

리눅스의 한 장치 드라이버에서 일부 코드를 탐색 할 때 스레드 (프로세스)에 PF_MEMALLOC 플래그가 설정되어 있음을 발견했습니다. 나는 말 헤더 파일에이 플래그의 정의를 발견 코드 current->flags |= PF_MEMALLOC; 같은 프로세스/스레드에서 설정이 플래그를 정확히 사용 "메모리 배당"그래서플래그 PF_MEMALLOC의 용도는 무엇입니까

#define PF_MEMALLOC  0x00000800  /* Allocating memory */ 

, 여기 내 의심,

답변

3

이 플래그는 메모리 할당 경로로 현재 실행중인 스레드를 나타 내기 위해 커널 내에서 사용되므로 워터 마크를 무시하고 더티 페이지를 쓰지 않아도되는 메모리를 재귀 적으로 할당 할 수 있습니다.

원래의 할당 요청 자체를 만족시키기 위해 페이지를 비우려고 시도하는 코드가 진행하기 위해 소량의 메모리를 할당해야한다면 해당 코드는 재귀 적으로 페이지를 비우지 않습니다.

대부분의 드라이버는이 플래그가 필요하지 않습니다.

관련 문제