tail head cat sleep
QR code linking to this page

Man page  — MLOCK

명칭

mlock, munlock – 물리 페이지를 메모리내에서 락 (언로크) 한다

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <sys/types.h>
#include <sys/mman.h>

int
mlock(const void *addr, size_t len);

int
munlock(const void *addr, size_t len);

해설

mlock() 시스템 콜은, addr (으)로부터 개시한다 len 바이트의 가상 주소 범위에 대응하는 물리 페이지를 메모리에 잠급니다. munlock() 호출은, 1 개(살) 이상의 mlock() 호출에 의해 락 되고 있었다 페이지를 언로크 합니다. 이러한 양쪽 모두에 대해, addr 파라미터는 페이지 사이즈의 정수배가 아니면 안됩니다. len 파라미터가 페이지 사이즈의 정수배가 아닌 경우, 끝맺을 수 있습니다. 범위 전체가 확보되고 있을 필요가 있습니다.

mlock() 호출의 뒤, 지시받은 페이지는, 언로크 될 때까지 비상주페이지 폴트도 어드레스 변환 fault도 일으키지 않습니다. 그러나, TLB 의 관리를 소프트웨어로 실장하고 있는 아키텍쳐에서는, 보호 위반 fault, 또는 TLB 미스 fault를 일으킬 가능성은 있습니다. 페이지에 관한 모든 락 된 매핑이 삭제될 때까지 물리 페이지는 메모리에 머뭅니다. 복수의 프로세스가, 각각의 가상 주소 매핑으로부터 같은 물리 페이지를 잠근다 가능성이 있습니다. 같이 1 개의 프로세스가 같은 페이지에 대한 다른 복수의 가상 매핑에 의해, 또는 같은 주소 범위에의 네스트 했다 mlock() 호출에 의해, 페이지를 다중에 잠근다 가능성이 있습니다. 언로크는, munlock() 에 의해 명시적으로, 또는 munmap() 에 의해 암묵적으로 행해집니다. munmap() (은)는 MAP되어 있지 않은 주소 범위의 할당을 해제합니다. 락 된 매핑은 fork(2) 에 의한 child process에는 계승되지 않습니다.

물리 메모리는 잠재적으로 부족한 리소스이므로, 프로세스는 어느 정도 잠글 수 있을까의 제한을 받습니다. 1 개의 프로세스는, 시스템 전체에 공통의 ``고정된 페이지''한계, 또는 프로세스마다의 RLIMIT_MEMLOCK 리소스 한계의 언젠가 작은 (분)편의 값까지 mlock() 할 수 있습니다.

이러한 호출을 이용할 수 있는 것은 슈퍼 유저 뿐입니다.

반환값

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

호출이 성공하면(자), 범위내의 모든 페이지가 락 (언로크) 됩니다. 실패했을 경우는, 범위내의 모든 페이지의 락 상태는 변경되지 않습니다.

에러

mlock() (은)는 다음의 경우에 처리를 실패합니다.
[EPERM]
  호출측이 슈퍼 유저가 아닙니다.
[EINVAL]
  지정된 주소가 페이지 경계에 정렬되어 있지 않은지, 또는 길이가 부입니다.
[EAGAIN]
  지시받은 범위의 락에 의해, 락 된 메모리에 대한 시스템 한계 또는 프로세스마다의 한계를 초과해 버립니다.
[ENOMEM]
  지시받은 주소 범위의 일부를 할당할 수 있고 있지 않습니다. 페이지의 fault / 매핑으로 에러가 있었습니다.
munlock() (은)는 다음의 경우에 실패합니다.
[EPERM]
  호출측이 슈퍼 유저가 아닙니다.
[EINVAL]
  지정된 주소가 페이지 경계에 정렬하고 있지 않는지, 또는 길이가 부입니다.
[ENOMEM]
  지시받은 주소 범위의 일부를 할당할 수 있고 있지 않습니다. 지시받은 주소 범위의 일부가 락 되고 있지 않습니다.

관련 항목

fork(2), mincore(2), minherit(2), mmap(2), munmap(2), setrlimit(2), getpagesize(3)

버그

Sun 의 실장과 달리, 같은 주소 범위에 관한 복수의 mlock() 호출에 대해서, 실제로 페이지를 언로크 하기 위해서 대응하는 수의 munlock() 호출이 필요합니다. 즉 mlock() 의 네스트입니다. 이것은 실장상의 결과이며 사양은 아니라고 생각할 필요가 있습니다.

프로세스마다의 리소스의 한계는 락 된 가상 메모리의 양에의 제한으로, 시스템 전체에 공통의 제한은 락 된 물리 페이지의 수에 대한 물건입니다. 이와 같이, 2 개(살)의 다른 매핑으로부터 같은 물리 페이지를 잠그면(자) 프로세스마다의 제한에 대해서는 2 페이지로서 카운트 되어 시스템 제한에서는 1 페이지만으로서 카운트 됩니다.

프로세스마다의 리소스 제한은 현시점에서는 서포트되고 있지 않습니다.

역사

mlock() 함수와 munlock() 함수는 BSD 4.4 그리고 처음 등장했습니다.

MLOCK (2) June 2, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

There are two major products of Berkeley, CA -- LSD and UNIX. We don't believe this to be strictly by coincidence.
Jeremy S. Anderson