Locking Memory in LINUX
작성자 : 김문규
최초 작성일 : 2008. 9. 9
리눅스의 paging에 대해서 아십니까? 이는 메모리를 효율적으로 사용하기 위한 기법이지만 프로그래머 입장에서는 골치아픈 존재가 될 수 있습니다. 만약에 메모리 DB를 만들기 위해 데이터를 메모리로 올렸다고 하지요. 그런데, 많이 인덱싱 되지 않는 레코드가 있을 경우에는 리눅스는 과감하게 해당 메모리 영역을 swap-out 해버릴 수 있습니다. 난감한 상황이 아닐 수 없습니다.
그래서 이 경우에는 강제로 swap out 되지 않도록 메모리를 잠그는 명령을 내려주어야만 합니다.
1. 일부 공간 잠그기
#include <sys/mman.h>
int mlock(const void* addr, size_t len);
int mlock(const void* addr, size_t len);
2. 해당 프로세스의 주소 공간 전체 잠그기
#include <sys/mman.h>
int mlockall(int flags); // flag : MCL_CURRENT, MCL_FUTURE
int mlockall(int flags); // flag : MCL_CURRENT, MCL_FUTURE
위의 명령은 앞서 말한 경우에 사용을 하지만, 섣부른 사용은 시스템 전체를 망칠 수 있음을 명심하기 바랍니다. 개인적인 생각으로는 해당 프로세스에 dedicated 된 machine이 아닌 경우에는 전체를 잠그는 행동은 아주 위험할 수 있으니 더욱 유의하길 바랍니다.
'개발 노트' 카테고리의 다른 글
[C/C++] 현재 시간 얻기 (1) | 2008.09.29 |
---|---|
OpenSSL 시작하기 (0) | 2008.09.09 |
JNI 시작하기 (Java와 C/C++의 연동) (2) | 2008.09.05 |
마이크로소프트의 WPF 관련 whitepaper (0) | 2008.09.03 |
MS Visual Studio 2005로 WPF 개발환경 구축하기 (1) | 2008.09.01 |