mlockall 및 munlockall 서브루틴

용도

프로세스의 주소 공간을 잠그거나 잠금 해제합니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

#include <sys/mman.h>

int mlockall (flags)
int flags;

int munlockall (void);

설명

Mlockall 서브루틴은 프로세스의 주소 공간에 매핑된 모든 페이지가 잠금이 해제되거나 프로세스가 종료되거나 다른 프로세스 이미지를 실행할 때까지 메모리 상주 상태가 되도록 합니다. Flags 매개변수는 잠글 페이지가 현재 프로세스의 주소 공간에 매핑된 페이지인지, 향후 매핑될 페이지인지, 아니면 둘 다인지 결정합니다. 플래그 매개변수는 다음 기호 상수 중 하나 이상의 비트 포함 OR로 구성되며, 이 상수는 sys/mman.h 헤더 파일에 정의되어 있습니다:
MCL_CURRENT
현재 프로세스의 주소 공간에 매핑된 모든 페이지를 잠급니다.
MCL_FUTURE
향후 매핑이 설정되면 프로세스의 주소 공간에 매핑되는 모든 페이지를 잠급니다.

MCL_FUTURE를 지정하면 리소스 부족 등으로 인해 시스템에서 이 메모리 양을 잠글 수 없는 경우 향후 매핑 기능이 실패할 수 있습니다.

Munlockall 서브루틴은 프로세스의 주소 공간에 현재 매핑된 모든 페이지의 잠금을 해제합니다. Munlockall 서브루틴을 호출한 후 프로세스의 주소 공간에 매핑되는 모든 페이지는 MCL_FUTURE를 지정하는 mlockall 서브루틴에 대한 호출이나 MCL_CURRENT를 지정하는 mlockall 서브루틴에 대한 후속 호출이 없는 한 잠기지 않습니다. 프로세스의 주소 공간에 매핑된 페이지가 다른 프로세스의 주소 공간에도 매핑되어 있고 해당 프로세스에 의해 잠겨 있는 경우, 다른 프로세스가 설정한 잠금은 munlockall 하위 루틴 호출의 영향을 받지 않습니다.

고정된 라이브러리의 경우, 내부적으로 애플리케이션과 관련된 작업을 수행하기 위해 메모리를 참조하는 사용자와 애플리케이션을 대신하여 메모리를 참조하는 시스템을 구분했습니다. 전자는 고정되어 있고 후자는 고정되어 있지 않습니다. 잠금 해제된 상태로 유지되는 사용자 주소 지정이 가능한 로더 데이터에는 다음이 포함됩니다:
  • 로더 항목
  • 사용자 로더 항목
  • 페이지 설명자 세그먼트
  • uSLA 힙 세그먼트
  • uSLA 텍스트 세그먼트
  • 64비트 공유 라이브러리 로드 목록과 관련된 모든 전역 세그먼트(shlib 힙 세그먼트, shlib 레 세그먼트, shlib 텍스트 및 데이터 힙 세그먼트)를 반환합니다.
이 제한은 구현에만 영향을 미치며 API가 실패하는 원인이 되지 않습니다.

MCL_CURRENT를 지정하는 mlockall 서브루틴이 성공적으로 반환되면 프로세스 주소 공간의 현재 매핑된 모든 페이지가 메모리에 상주하고 잠깁니다. Munlockall 서브루틴에서 돌아오면 프로세스의 주소 공간에 현재 매핑된 모든 페이지가 프로세스의 주소 공간과 관련하여 잠금 해제됩니다.

호출 프로세스는 이 서브루틴을 사용할 수 있는 루트 사용자 권한이 있어야 합니다.

매개변수

항목 설명
플래그 잠글 페이지가 현재 프로세스의 주소 공간에 매핑된 페이지인지, 향후 매핑될 페이지인지, 아니면 둘 다인지 결정합니다.

리턴 값

성공적으로 완료되면 mlockall 서브루틴은 0을 반환합니다. 그렇지 않으면 추가 메모리가 잠기지 않고 서브루틴이 -1 반환하고 오류를 나타내는 errno를 설정합니다.

성공적으로 완료되면 munlockall 서브루틴은 0을 반환합니다. 그렇지 않으면 추가 메모리가 잠금 해제되지 않고 서브루틴이 -1 반환하고 오류를 나타내는 errno를 설정합니다.

오류 코드

다음과 같은 경우 mlockall 서브루틴이 실패합니다:
항목 설명
EINVAL 플래그 매개변수가 0이거나 구현되지 않은 플래그가 포함되어 있거나 프로세스에 이미 일부 메모리가 잠겨 있는 경우입니다.
ENOMEM 현재 프로세스의 주소 공간에 매핑된 모든 페이지를 잠그면 프로세스가 잠글 수 있는 메모리 양에 대한 제한을 초과하게 됩니다.
EPERM 호출 프로세스에 요청된 작업을 수행할 수 있는 적절한 권한이 없습니다.

다음과 같은 경우 munlockall 서브루틴이 실패합니다:

항목 설명
EINVAL 프로세스에 이미 일부 메모리가 잠겨 있습니다
EPERM 호출 프로세스에 요청된 작업을 수행할 수 있는 적절한 권한이 없습니다