mlockall 및 munlockall 서브루틴
용도
프로세스의 주소 공간을 잠그거나 잠금 해제합니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#include <sys/mman.h>
int mlockall (flags)
int flags;
int munlockall (void);설명
- MCL_CURRENT
- 현재 프로세스의 주소 공간에 매핑된 모든 페이지를 잠급니다.
- MCL_FUTURE
- 향후 매핑이 설정되면 프로세스의 주소 공간에 매핑되는 모든 페이지를 잠급니다.
MCL_FUTURE를 지정하면 리소스 부족 등으로 인해 시스템에서 이 메모리 양을 잠글 수 없는 경우 향후 매핑 기능이 실패할 수 있습니다.
Munlockall 서브루틴은 프로세스의 주소 공간에 현재 매핑된 모든 페이지의 잠금을 해제합니다. Munlockall 서브루틴을 호출한 후 프로세스의 주소 공간에 매핑되는 모든 페이지는 MCL_FUTURE를 지정하는 mlockall 서브루틴에 대한 호출이나 MCL_CURRENT를 지정하는 mlockall 서브루틴에 대한 후속 호출이 없는 한 잠기지 않습니다. 프로세스의 주소 공간에 매핑된 페이지가 다른 프로세스의 주소 공간에도 매핑되어 있고 해당 프로세스에 의해 잠겨 있는 경우, 다른 프로세스가 설정한 잠금은 munlockall 하위 루틴 호출의 영향을 받지 않습니다.
- 로더 항목
- 사용자 로더 항목
- 페이지 설명자 세그먼트
- uSLA 힙 세그먼트
- uSLA 텍스트 세그먼트
- 64비트 공유 라이브러리 로드 목록과 관련된 모든 전역 세그먼트(shlib 힙 세그먼트, shlib 레 세그먼트, shlib 텍스트 및 데이터 힙 세그먼트)를 반환합니다.
MCL_CURRENT를 지정하는 mlockall 서브루틴이 성공적으로 반환되면 프로세스 주소 공간의 현재 매핑된 모든 페이지가 메모리에 상주하고 잠깁니다. Munlockall 서브루틴에서 돌아오면 프로세스의 주소 공간에 현재 매핑된 모든 페이지가 프로세스의 주소 공간과 관련하여 잠금 해제됩니다.
호출 프로세스는 이 서브루틴을 사용할 수 있는 루트 사용자 권한이 있어야 합니다.
매개변수
| 항목 | 설명 |
|---|---|
| 플래그 | 잠글 페이지가 현재 프로세스의 주소 공간에 매핑된 페이지인지, 향후 매핑될 페이지인지, 아니면 둘 다인지 결정합니다. |
리턴 값
성공적으로 완료되면 mlockall 서브루틴은 0을 반환합니다. 그렇지 않으면 추가 메모리가 잠기지 않고 서브루틴이 -1 반환하고 오류를 나타내는 errno를 설정합니다.
성공적으로 완료되면 munlockall 서브루틴은 0을 반환합니다. 그렇지 않으면 추가 메모리가 잠금 해제되지 않고 서브루틴이 -1 반환하고 오류를 나타내는 errno를 설정합니다.
오류 코드
| 항목 | 설명 |
|---|---|
| EINVAL | 플래그 매개변수가 0이거나 구현되지 않은 플래그가 포함되어 있거나 프로세스에 이미 일부 메모리가 잠겨 있는 경우입니다. |
| ENOMEM | 현재 프로세스의 주소 공간에 매핑된 모든 페이지를 잠그면 프로세스가 잠글 수 있는 메모리 양에 대한 제한을 초과하게 됩니다. |
| EPERM | 호출 프로세스에 요청된 작업을 수행할 수 있는 적절한 권한이 없습니다. |
다음과 같은 경우 munlockall 서브루틴이 실패합니다:
| 항목 | 설명 |
|---|---|
| EINVAL | 프로세스에 이미 일부 메모리가 잠겨 있습니다 |
| EPERM | 호출 프로세스에 요청된 작업을 수행할 수 있는 적절한 권한이 없습니다 |