이 름
mlockall − 호 출 한 프 로 세 스 의 페 이 징 을 금 지 시 킨 다 .
사 용 법
#include <sys/mman.h>
int mlockall(int flags);
설 명
mlockall은 호 출 한 프 로 세 스 의 주 소 공 간 에 대 응 되 는 모 든 페 이 지 에 대 한 페 이 징 을 금 지 시 킨 다 . 여 기 에 는 코 드 , 데 이 터 와 스 택 페 이 지 또 한 공 유 라 이 브 러 리 , 사 용 자 영 역 커 널 데 이 터 , 공 유 메 모 리 , 메 모 리 에 대 응 된 파 일 이 포 함 된 다 . 모 든 페 이 지 는 mlockall이 성 공 했 을 때 RAM에 상 주 하 는 것 이 보 장 된 다 . 그 리 고 munlock이 나 munlockall에 의 해 다 시 잠 금 이 풀 릴 때 까 지 또 는 프 로 세 스 가 종 료 할 때 까 지 또 는 exec에 의 해 다 른 프 로 그 램 이 시 작 될 때 까 지 RAM에 상 주 하 는 것 이 보 장 된 다 . fork에 의 한 자 식 프 로 세 스 는 페 이 지 잠 금 을 상 속 받 지 않 는 다 .
메 모 리 잠 금 은 주 로 두 가 지 경 우 에 응 용 된 다 : 실 시 간 알 고 리 즘 과 high-security 데 이 타 처 리 . 실 시 간 응 용 프 로 그 램 의 경 우 는 결 정 론 적 인 타 이 밍 과 스 케 줄 링 같 은 것 이 요 구 되 는 데 , 이 때 페 이 징 은 예 상 치 못 한 프 로 그 램 실 행 지 연 을 야 기 하 는 주 요 원 인 이 다 . 또 한 실 시 간 응 용 프 로 그 램 은 보 통 sched_setscheduler로 실 시 간 스 케 쥴 러 를 사 용 한 다 . 암 호 보 안 소 프 트 웨 어 는 데 이 터 로 암 호 나 보 안 키 같 은 중 요 바 이 트 를 처 리 한 다 . 페 이 징 결 과 , 이 데 이 터 가 지 속 적 인 스 왑 저 장 장 치 에 저 장 되 며 보 안 소 프 트 웨 어 가 RAM에 서 이 데 이 터 를 지 우 고 끝 난 후 에 도 오 랫 동 안 외 부 에 노 출 될 수 있 다 . 보 안 응 용 프 로 그 램 에 서 작 은 메 모 리 영 역 만 을 잠 가 야 하 고 , 이 때 는 mlock을 이 용 하 기 적 당 하 다 .
flags 인 자 는 다 음 상 수 를 논 리 OR를 하 여 지 정 될 수 있 다 .
MCL_CURRENT |
프 로 세 스 의 주 소 공 간 에 현 재 대 응 되 는 모 든 페 이 지 를 잠 근 다 . | ||
MCL_FUTURE |
앞 으 로 프 로 세 스 의 주 소 공 간 에 대 응 될 모 든 페 이 지 를 잠 근 다 . 예 를 들 어 새 로 운 메 모 리 대 응 파 일 이 나 공 유 메 모 리 영 역 뿐 만 아 니 라 늘 어 난 힙 과 스 택 의 페 이 지 에 사 용 되 는 페 이 지 에 해 당 된 다 . |
만 약 MCL_FUTURE이 지 정 되 고 잠 긴 페 이 지 수 가 허 용 된 한 계 를 초 과 하 면 시 스 템 콜 은 ENOMEM 에 러 로 실 패 할 것 이 다 . 스 택 이 늘 어 나 새 페 이 지 가 대 응 되 면 , 커 널 은 스 택 확 장 을 거 부 하 고 SIGSEGV 시 그 널 을 보 낸 다 .
실 시 간 프 로 세 스 는 시 간 임 계 영 역 을 수 행 하 기 전 에 충 분 한 스 택 페 이 지 를 잠 가 두 어 , 그 함 수 호 출 에 의 해 페 이 지 오 류 가 발 생 하 지 않 는 다 . 이 는 충 분 히 큰 지 역 변 수 를 가 지 고 , 스 택 페 이 지 를 만 들 기 위 해 이 큰 배 열 이 차 지 한 메 모 리 에 쓰 기 를 하 는 함 수 를 호 출 하 여 서 이 룰 수 있 다 . 이 런 방 법 으 로 충 분 한 페 이 지 를 스 택 에 대 응 시 켜 RAM에 잠 가 둘 수 있 다 . 이 쓰 기 는 임 계 영 역 에 서 copy-on-write 페 이 지 오 류 가 발 생 하 지 않 게 한 다 .
메 모 리 잠 근 은 스 택 이 아 니 다 . 즉 , mlock이 나 mlockall이 여 러 번 호 출 되 어 여 러 번 잠 겼 던 페 이 지 는 상 응 하 는 범 위 에 대 한 munlock이 나 munlockall를 단 한 번 호 출 하 여 잠 금 을 풀 수 있 다 . 여 러 위 치 나 여 러 프 로 세 스 에 의 해 잠 겨 진 페 이 지 는 적 어 도 하 나 의 위 치 나 프 로 세 스 에 의 해 잠 겨 져 있 는 한 RAM에 서 계 속 적 으 로 잠 금 이 유 지 된 다 .
mlockall과 munlockall를 이 용 할 수 있 는 POSIX 시 스 템 에 서 _POSIX_MEMLOCK은 <unistd.h>에 정 의 되 어 있 다 .
반 환 값
성 공 시 , mlockall은 0을 리 턴 한 다 . 에 러 시 , −1 을 리 턴 하 며 , errno는 적 절 한 값 으 로 설 정 된 다 .
에 러
ENOMEM |
프 로 세 스 가 허 용 되 는 잠 금 페 이 지 의 최 대 수 를 초 과 했 다 . | ||
EPERM |
호 출 한 프 로 세 스 가 올 바 른 권 한 을 갖 고 있 지 않 다 . 단 지 루 트 프 로 세 스 에 만 페 이 지 의 잠 금 을 허 용 된 다 . | ||
EINVAL |
잘 못 된 flags가 지 정 되 었 다 . |
호 환
POSIX.1b, SVr4. SVr4는 EAGAIN 에 러 조 건 을 추 가 적 으 로 기 술 한 다 .
관 련 항 목
munlockall(2), mlock(2), munlock(2)
역 자
임 종 균 <hermes44 [AT] secsm.org>, 2000년 5월 26일