#include <sys/mman.h> int mlockall(int flags);
메모리 잠금은 주로 두 가지 경우에 응용된다: 실시간 알고리즘과 high-security 데이타 처리. 실시간 응용프로그램의 경우는 결정론적인 타이밍과 스케줄링 같은 것이 요구되는데, 이 때 페이징은 예상치 못한 프로그램 실행 지연을 야기하는 주요 원인이다. 또한 실시간 응용프로그램은 보통 sched_setscheduler로 실시간 스케쥴러를 사용한다. 암호 보안 소프트웨어는 데이터로 암호나 보안키 같은 중요 바이트를 처리한다. 페이징 결과, 이 데이터가 지속적인 스왑 저장 장치에 저장되며 보안 소프트웨어가 RAM에서 이 데이터를 지우고 끝난 후에도 오랫동안 외부에 노출될 수 있다. 보안 응용 프로그램에서 작은 메모리 영역만을 잠가야하고, 이 때는 mlock을 이용하기 적당하다.
flags 인자는 다음 상수를 논리 OR를 하여 지정될 수 있다.
만약 MCL_FUTURE이 지정되고 잠긴 페이지 수가 허용된 한계를 초과하면 시스템 콜은 ENOMEM 에러로 실패할 것이다. 스택이 늘어나 새 페이지가 대응되면, 커널은 스택 확장을 거부하고 SIGSEGV 시그널을 보낸다.
실시간 프로세스는 시간 임계 영역을 수행하기 전에 충분한 스택 페이지를
잠가두어, 그 함수 호출에 의해 페이지 오류가 발생하지 않는다. 이는 충분히
큰 지역 변수를 가지고, 스택 페이지를 만들기 위해 이 큰 배열이 차지한 메모리에
쓰기를 하는 함수를 호출하여서 이룰 수 있다. 이런 방법으로 충분한 페이지를
스택에 대응시켜 RAM에 잠가둘 수 있다. 이 쓰기는 임계 영역에서 copy-on-write
페이지 오류가 발생하지 않게 한다.
메모리 잠근은 스택이 아니다.
즉,
mlock이나
mlockall이
여러번 호출되어 여러번 잠겼던 페이지는 상응하는 범위에 대한
munlock이나
munlockall를
단 한번 호출하여 잠금을 풀 수 있다.
여러 위치나 여러 프로세스에 의해 잠겨진 페이지는 적어도 하나의
위치나 프로세스에 의해 잠겨져 있는 한 RAM에서 계속적으로 잠금이 유지된다.
mlockall과 munlockall를 이용할 수 있는 POSIX 시스템에서 _POSIX_MEMLOCK은 <unistd.h>에 정의되어 있다.