mlock(2) - wariua/manpages-ko GitHub Wiki
mlock, mlock2, munlock, mlockall, munlockall - ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ํ๊ณ ํ๊ธฐ
#include <sys/mman.h>
int mlock(const void *addr, size_t len);
int mlock2(const void *addr, size_t len, int flags);
int munlock(const void *addr, size_t len);
int mlockall(int flags);
int munlockall(void);
mlock()
, mlock2()
, mlockall()
์ ํธ์ถ ํ๋ก์ธ์ค ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ ๋ด์ง ์ ์ฒด๋ฅผ ๋จ์ ๊ณ ์ ํ์ฌ ๊ทธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ์์ญ์ผ๋ก ๋น ์ง์ง ์๋๋ก ํ๋ค.
munlock()
๊ณผ munlockall()
์ ๋ฐ๋ ๋์์ ์ํํ๋ค. ์ฆ, ํธ์ถ ํ๋ก์ธ์ค ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ ๋ด์ง ์ ์ฒด์ ๊ณ ์ ์ ํ์ด์ ํด๋น ์ฃผ์ ๊ณต๊ฐ ๋ฒ์์ ํ์ด์ง๊ฐ ๋ค์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์๊ตฌ ์ ์ค์์ผ๋ก ๋๊ฐ ์ ์๋๋ก ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ๊ณผ ํด์ ๋ ํ์ด์ง ๋จ์๋ก ์ด๋ค์ง๋ค.
mlock()
์ addr
์์ ์์ํด์ len
๋ฐ์ดํธ๋งํผ ์ด์ด์ง๋ ์ฃผ์ ๋ฒ์์ ํ์ด์ง๋ค์ ๊ณ ์ ํ๋ค. ํธ์ถ์ด ์ฑ๊ณต ๋ฐํํ ๋ ์ง์ ํ ์ฃผ์ ๋ฒ์๋ฅผ ์ผ๋ถ๋ผ๋ ํฌํจํ๋ ๋ชจ๋ ํ์ด์ง๋ค์ด ๋จ์ ์์ฃผํด ์๋ค๊ณ ๋ณด์ฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ํ๊ธฐ ์ ๊น์ง๋ ๊ทธ ํ์ด์ง๋ค์ด ๋จ ๋ด์ ์๋ค๊ณ ๋ณด์ฅ๋๋ค.
mlock2()
๋ addr
์์ ์์ํด์ len
๋ฐ์ดํธ๋งํผ ์ด์ด์ง๋ ์ง์ ํ ๋ฒ์์ ํ์ด์ง๋ค์ ๊ณ ์ ํ๋ค. ํ์ง๋ง ํธ์ถ์ด ์ฑ๊ณต ๋ฐํํ ํ ๊ทธ ๋ฒ์์ ํฌํจ๋ ํ์ด์ง๋ค์ ์ํ๊ฐ flags
์ธ์ ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
flags
์ธ์๋ 0 ๋๋ ๋ค์ ์์์ผ ์ ์๋ค.
MLOCK_ONFAULT
- ํ์ฌ ์์ฃผ ์ค์ธ ํ์ด์ง๋ค์ ๊ณ ์ ํ๊ณ ๋ฒ์ ์ ์ฒด์ ํ์๋ฅผ ํด์ ๋๋จธ์ง ๋น์์ฃผ ํ์ด์ง๋ค์ด ํ์ด์ง ํดํธ์ ์ํด ์ฑ์์ง ๋ ๊ณ ์ ๋๋๋ก ํ๋ค.
flags
๊ฐ 0์ด๋ฉด mlock2()
๋ mlock()
๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
munlock()
์ addr
์์ ์์ํด์ len
๋ฐ์ดํธ๋งํผ ์ด์ด์ง๋ ์ฃผ์ ๋ฒ์์ ํ์ด์ง๋ค์ ๊ณ ์ ํด์ ํ๋ค. ์ด ํธ์ถ ํ์๋ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์๋ฅผ ์ผ๋ถ๋ผ๋ ํฌํจํ๋ ๋ชจ๋ ํ์ด์ง๋ค์ ๋ค์ ์ปค๋์ด ์ธ๋ถ ์ค์ ๊ณต๊ฐ์ผ๋ก ์ฎ๊ธธ ์ ์๊ฒ ๋๋ค.
mlockall()
์ ํธ์ถ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๋งต ๋ ํ์ด์ง๋ค์ ๋ชจ๋ ๊ณ ์ ํ๋ค. ์ฌ๊ธฐ์๋ ์ฝ๋์ ๋ฐ์ดํฐ, ์คํ ์ธ๊ทธ๋จผํธ์ ํ์ด์ง๋ค๋ฟ ์๋๋ผ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ฌ์ฉ์ ๊ณต๊ฐ ์ปค๋ ๋ฐ์ดํฐ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ๋ ํฌํจ๋๋ค. ํธ์ถ์ด ์ฑ๊ณต ๋ฐํํ ๋ ๋งต ๋ ํ์ด์ง๋ค์ด ๋ชจ๋ ๋จ์ ์์ฃผํด ์๋ค๊ณ ๋ณด์ฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ํ๊ธฐ ์ ๊น์ง๋ ๊ทธ ํ์ด์ง๋ค์ด ๋จ ๋ด์ ์๋ค๊ณ ๋ณด์ฅ๋๋ค.
flags
์ธ์๋ ๋ค์ ์์๋ฅผ 1๊ฐ ์ด์ ๋นํธ OR ํด์ ๊ตฌ์ฑํ๋ค.
MCL_CURRENT
- ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ํ์ฌ ๋งต ๋์ด ์๋ ๋ชจ๋ ํ์ด์ง๋ค์ ๊ณ ์ ํ๋ค.
MCL_FUTURE
- ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ํฅํ ๋งต ๋๋ ๋ชจ๋ ํ์ด์ง๋ค์ ๊ณ ์ ํ๋ค. ์๋ฅผ ๋ค์ด ํ๊ณผ ์คํ์ ํค์ฐ๋ ๋ฐ ํ์ํ ์ ํ์ด์ง๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ ๋ด์ง ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด๋น๋ ์ ์์ ๊ฒ์ด๋ค.
-
MCL_ONFAULT
(๋ฆฌ๋ ์ค 4.4๋ถํฐ) -
MCL_CURRENT
๋MCL_FUTURE
, ๋๋ ๋ ๋ชจ๋์ ํจ๊ป ์ฌ์ฉํ๋ค. ํ์ฌ(MCL_CURRENT
) ๋ด์ง ํฅํ(MCL_FUTURE
) ๋งคํ ๋ชจ๋์ ํดํธ๋ก ๋ค์ด์จ ํ์ด์ง๋ฅผ ๊ณ ์ ํ๊ฒ ํ์ํ๋ค.MCL_CURRENT
์ ์ฌ์ฉํ๋ฉด ํ์ฌ ํ์ด์ง๋ค์ ๋ชจ๋ ๊ณ ์ ํ๋mlockall()
์ด ๋ถ์ฌ ํ์ด์ง๋ฅผ ํดํธ๋ก ๋ค์ด์ง๋ ์๋๋ค.MCL_FUTURE
์ ์ฌ์ฉํ๋ฉด ํฅํ ๋งคํ ๋ชจ๋์ ํ์ด์ง๊ฐ ํดํธ๋ก ๋ค์ด์ฌ ๋ ๊ณ ์ ํ๊ฒ ํ์ํ๋ ๋งคํ ์์ฑ ์ ๊ณ ์ ์ผ๋ก ์ธํด ํ์ด์ง๋ค์ด ์ฑ์์ง์ง๋ ์๋๋ค.MCL_ONFAULT
๋MCL_CURRENT
๋MCL_FUTURE
, ๋๋ ๋ ๋ชจ๋์ ํจ๊ป ์จ์ผ ํ๋ค.
MCL_FUTURE
๋ฅผ ์ง์ ํด ๋๋ฉด ์ดํ ์์คํ
ํธ์ถ(๊ฐ๋ น mmap(2), sbrk(2), malloc(3))๋ก ์ธํด ๊ณ ์ ๋ฐ์ดํธ ์๊ฐ ํ์ฉ ์ต๋์น(์๋ ์ฐธ๊ณ )๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ ๊ฒฝ์ฐ ๊ทธ ์์คํ
ํธ์ถ์ด ์คํจํ ์ ์๋ค. ๊ฐ์ ์ํฉ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํ ์ฑ์ฅ์ด ์คํจํ ์๋ ์๋๋ฐ, ์ปค๋์ด ์คํ ํ์ฅ์ ๊ฑฐ๋ถํ๊ณ ํ๋ก์ธ์ค์๊ฒ SIGSEGV
์๊ทธ๋์ ๋ณด๋ด๊ฒ ๋๋ค.
munlockall()
์ ํธ์ถ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ผ๋ก ๋งต ๋์ด ์๋ ํ์ด์ง๋ค์ ๋ชจ๋ ๊ณ ์ ํด์ ํ๋ค.
์ฑ๊ณต ์ ์ด ์์คํ
ํธ์ถ๋ค์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ์ ์ ํ ์ค์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ ๋ด์ ๊ณ ์ ์ ์ด๋ค ๋ณํ๋ ์๊ธฐ์ง ์๋๋ค.
ENOMEM
- (๋ฆฌ๋
์ค 2.6.9 ๋ฐ ์ดํ) ํธ์ถ์์๊ฒ 0 ์๋
RLIMIT_MEMLOCK
์ฐ์ฑ ์์ ์ ํ์ด ์๋๋ฐ ํ์ฉ ํ๊ณ๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ํ๋ ค ํ๋ค. ํ๋ก์ธ์ค์ ํน๊ถ(CAP_IPC_LOCK
)์ด ์์ผ๋ฉด ์ด ์ ์ฝ์ด ์ ์ฉ๋์ง ์๋๋ค. ENOMEM
- (๋ฆฌ๋ ์ค 2.4 ๋ฐ ์ด์ ) ํธ์ถ ํ๋ก์ธ์ค๊ฐ ๋จ ์ ๋ฐ์ ๋๊ฒ ๊ณ ์ ํ๋ ค ํ๋ค.
EPERM
- ํธ์ถ์์๊ฒ ํน๊ถ์ด ์๋๋ฐ ์์ฒญ ๋์์ ์ํํ๊ธฐ ์ํด ํน๊ถ(
CAP_IPC_LOCK
)์ด ํ์ํ๋ค.
mlock()
, mlock2()
, munlock()
:
EAGAIN
- ์ง์ ํ ์ฃผ์ ๋ฒ์์ ์ผ๋ถ ๋ด์ง ์ ์ฒด๋ฅผ ๊ณ ์ ํ ์ ์๋ค.
EINVAL
- ๋ง์
addr+len
์ ๊ฒฐ๊ณผ๊ฐaddr
๋ณด๋ค ์๋ค. (๊ฐ๋ น ๋ง์ ์์ ์ค๋ฒํ๋ก์ฐ๊ฐ ์ผ์ด๋ฌ์ ์๋ ์๋ค.) EINVAL
- (๋ฆฌ๋
์ค ์ธ)
addr
์ด ํ์ด์ง ํฌ๊ธฐ์ ๋ฐฐ์๊ฐ ์๋๋ค. ENOMEM
- ์ง์ ํ ์ฃผ์ ๋ฒ์์ ์ผ๋ถ๊ฐ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ ๋ด์ ๋งต ๋ ํ์ด์ง์ ๋์ํ์ง ์๋๋ค.
ENOMEM
- ์์ญ์ ๊ณ ์ ํ๊ฑฐ๋ ํ๋ฉด ์์ดํ ์์ฑ(๊ฐ๋ น ๊ณ ์ ๊ณผ ๋น๊ณ ์ )์ ๋งคํ ์ด๊ฐ์๊ฐ ํ์ฉ ์ต๋์น๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ค. (์๋ฅผ ๋ค์ด ํ์ฌ ๊ณ ์ ๋ ๋งคํ ์ค๊ฐ์ ์ด๋ ๋ฒ์๋ฅผ ํ๋ฉด ์์ชฝ์ ๊ณ ์ ๋ ๋งคํ๊ณผ ๊ฐ์ด๋ฐ์ ํ๋ฆฐ ํ์ด์ง๋ฅผ ํฉ์ณ์ ์ธ ๊ฐ ๋งคํ์ด ์๊ธด๋ค.)
mlock2()
:
EINVAL
- ๋ชจ๋ฅด๋
flags
๋ฅผ ์ง์ ํ๋ค.
mlockall()
:
EINVAL
- ๋ชจ๋ฅด๋
flags
๋ฅผ ์ง์ ํ๋ค. ๋๋MCL_FUTURE
์MCL_CURRENT
์ด๋ ์ชฝ๋ ์์ดMCL_ONFAULT
๋ฅผ ์ง์ ํ๋ค.
munlockall()
:
EPERM
- (๋ฆฌ๋
์ค 2.6.8 ๋ฐ ์ด์ ) ํธ์ถ์์๊ฒ ํน๊ถ(
CAP_IPC_LOCK
)์ด ์๋ค.
๋ฆฌ๋
์ค 4.4๋ถํฐ mlock2()
๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. glibc ๋ฒ์ 2.27์์ ์ง์์ด ์ถ๊ฐ๋์๋ค.
POSIX.1-2001, POSIX.1-2008, SVr4.
mlock2()
๋ ๋ฆฌ๋
์ค ์ ์ฉ์ด๋ค.
mlock()
๋ฐ munlock()
์ด ์ฌ์ฉ ๊ฐ๋ฅํ POSIX ์์คํ
์๋ <unistd.h>
์ _POSIX_MEMLOCK_RANGE
๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, <limits.h>
์ ์์ PAGESIZE
๋ (์ ์๋ผ ์์ง ์์ผ๋ฉด) sysconf(_SC_PAGESIZE)
ํธ์ถ๋ก ํ์ด์ง์ ๋ฐ์ดํธ ์๋ฅผ ์์๋ผ ์ ์๋ค.
mlockall()
๋ฐ munlockall()
์ด ์ฌ์ฉ ๊ฐ๋ฅํ POSIX ์์คํ
์์๋ <unistd.h>
์ _POSIX_MEMLOCK
์ด 0๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ์ ์๋์ด ์๋ค. (sysconf(3)๋ ์ฐธ๊ณ .)
๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ ์ฃผ๋ ์ฉ์ฒ๊ฐ ๋ ๊ณณ ์๋ค. ์ค์๊ฐ ์๊ณ ๋ฆฌ๋ฌ๊ณผ ๊ณ ์์ค ๋ณด์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ด๋ค. ์ค์๊ฐ ์์ฉ์์๋ ์๊ฐ์ด ์์ธก ๊ฐ๋ฅํด์ผ ํ๋๋ฐ, ์ค์ผ์ค๋ง์์๋ ๊ทธ๋ ์ง๋ง ํ์ด์ง์ ์์ํ ์ ์๋ ํ๋ก๊ทธ๋จ ์คํ ์ง์ฐ์ ์ฃผ์ ์์ธ์ด๋ค. ์ฌ๊ธฐ ๋ํด ์ผ๋ฐ์ ์ผ๋ก ์ค์๊ฐ ์์ฉ์์๋ sched_setscheduler(2)๋ก ์ค์๊ฐ ์ค์ผ์ค๋ฌ๋ก ์ ํํ๊ฒ ๋๋ค. ์ํธ ๋ณด์ ์ํํธ์จ์ด์์๋ ์ข ์ข ์ํธ๋ ๋น๋ฐํค ๊ฐ์ ์์ฃผ ์ค์ํ ๋ฐ์ดํธ๋ค์ ์๋ฃ ๊ตฌ์กฐ๋ก ๋ค๋ฃฌ๋ค. ํ์ด์ง ๊ฒฐ๊ณผ๋ก ๊ทธ ๋น๋ฐ๊ฐ์ด ์์์ ์ธ ์ค์ ์ ์ฅ ๋งค์ฒด๋ก ์ฎ๊ฒจ์ง ์ ์์ ๊ฒ์ด๊ณ , ๋ณด์ ์ํํธ์จ์ด๊ฐ ๋จ์์ ๊ทธ ๋น๋ฐ๊ฐ์ ์ญ์ ํ๊ณ ์ข ๋ฃํ ํ ์ค๋ซ๋์ ๊ณต๊ฒฉ์๊ฐ ๊ทธ ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ ์๋ ์์ ๊ฒ์ด๋ค. (ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ๊ณผ ์๊ด์์ด ๋ฉํฑ ๋ฐ ์ผ๋ถ ๋ฐ์คํฌํฑ์ ์ ์ ๋ชจ๋๊ฐ ์์คํ ๋จ์ ์ฌ๋ณธ์ ๋์คํฌ์ ์ ์ฅํ๊ฒ ๋๋ค๋ ์ ์ ์๊ณ ์์ด์ผ ํ๋ค.)
mlockall()
์ ์ด์ฉํด ํ์ด์ง ํดํธ ์ง์ฐ์ ๋ฐฉ์งํ๋ ค๋ ์ค์๊ฐ ํ๋ก์ธ์ค์์๋ ์๊ฐ์ด ์ค์ํ ์์ญ์ ์ง์
ํ๊ธฐ ์ ์ ์คํ ํ์ด์ง๋ฅผ ์ถฉ๋ถํ๊ฒ ๊ณ ์ ํด์ ํจ์ ํธ์ถ๋ก ์ธํด ํ์ด์ง ํดํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ๊ฒ ์ข๋ค. ์ถฉ๋ถํ ํฐ ์๋ ๋ณ์(๋ฐฐ์ด)๋ฅผ ํ ๋นํด์ ๊ทธ ๋ฐฐ์ด์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ๊ธฐ๋ฅผ ํ์ฌ ์คํ ํ์ด์ง๋ค์ ๊ฑด๋๋ฆฌ๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํ์ ์ถฉ๋ถํ ๋ง์ ํ์ด์ง๊ฐ ๋งต ๋์ด์ ๋จ์ ๊ณ ์ ํ ์ ์๋ค. ์ฐ๊ธฐ๋ฅผ ํ๋ ๊ฒ์ ์๊ณ ๊ตฌ์ญ์์ copy-on-write ํ์ด์ง ํดํธ์กฐ์ฐจ ์ผ์ด๋์ง ์๊ฒ ํ๊ธฐ ์ํด์์ด๋ค.
fork(2)๋ฅผ ํตํด ์์ฑ๋๋ ์์์ด ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ ๋ฌผ๋ ค๋ฐ์ง ์์ผ๋ฉฐ, execve(2) ๊ณผ์ ๋ฐ ํ๋ก์ธ์ค ์ข
๋ฃ ์์ ์๋์ผ๋ก ์ ๊ฑฐ๋๋ค (๊ณ ์ ์ด ํ๋ฆฐ๋ค). fork(2)๋ฅผ ํตํด ์์ฑ๋๋ ์์์ด mlockall()
์ MCL_FUTURE
๋ฐ MCL_FUTURE | MCL_ONFAULT
์ค์ ์ ๋ฌผ๋ ค๋ฐ์ง ์์ผ๋ฉฐ, execve(2) ๊ณผ์ ์์ ํด์ ๋๋ค.
์ฐธ๊ณ ๋ก fork(2)์์๋ ์ฃผ์ ๊ณต๊ฐ์ copy-on-write๋ก ๋์ํ๊ฒ ๋ง๋ ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ด์ด์ง๋ ์ฐ๊ธฐ ์ ๊ทผ์ด ํ์ด์ง ํดํธ๋ฅผ ์ ๋ฐํ๊ฒ ๋๊ณ , ์ด๋ก ์ธํด ์ค์๊ฐ ํ๋ก์ธ์ค์ ๋์ ์ง์ฐ์ด ์๊ธธ ์ ์๋ค. ๋ฐ๋ผ์ mlockall()
์ด๋ mlock()
๋์ ํ์ fork(2)๋ฅผ ํธ์ถํ์ง ์๋ ๊ฒ ๋งค์ฐ ์ค์ํ๋ค. ๋์ ์ฐ์ ์์๋ก ๋๋ ์ค๋ ๋์ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์์ ๋ฎ์ ์ฐ์ ์์๋ก ๋๋ ์ค๋ ๋์์ ์ฐ๊ธฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
munmap(2)์ ํตํด ์ฃผ์ ๋ฒ์์ ๋งต์ ํด์ ํ๋ฉด ์ฃผ์ ๋ฒ์์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ด ์๋์ผ๋ก ์ ๊ฑฐ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ ์ค์ฒฉ๋์ง ์๋๋ค. ์ฆ, mlock()
, mlock2()
, mlockall()
ํธ์ถ๋ก ์ฌ๋ฌ ๋ฒ ๊ณ ์ ๋ ํ์ด์ง๊ฐ ํด๋น ๋ฒ์์ ๋ํ munlock()
๋ด์ง munlockall()
ํธ์ถ ํ ๋ฒ์ผ๋ก ํด์ ๋๋ค. ์ฌ๋ฌ ์์น์ ๋งต ๋์ด ์๊ฑฐ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ๋งต ๋์ด ์๋ ํ์ด์ง๋ ์ ์ด๋ ํ ์์น ๋ด์ง ํ ํ๋ก์ธ์ค์ ๊ณ ์ ๋์ด ์๋ ๋์์ ๋จ์ ๊ณ ์ ๋์ด ์๋๋ค.
MCL_FUTURE
๋ฅผ ์ฐ๋ mlockall()
ํธ์ถ ํ์ ๊ทธ ํ๋๊ทธ๋ฅผ ์ง์ ํ์ง ์์ ํธ์ถ์ด ๋ค์ ์์ผ๋ฉด MCL_FUTURE
ํธ์ถ์ ์ํด ์ด๋ค์ก๋ ๋ณ๊ฒฝ ์ฌํญ๋ค์ด ์ฌ๋ผ์ง๊ฒ ๋๋ค.
mlock2()
์ MLOCK_ONFAULT
ํ๋๊ทธ์ mlockall()
์ MCL_ONFAULT
ํ๋๊ทธ๋ฅผ ์ด์ฉํ๋ฉด ํฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ ์ค (์์) ์ผ๋ถ๋ง ๊ฑด๋๋ฆฌ๋ ์์ฉ์์ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์ ๋งคํ ๋ด ํ์ด์ง ๋ชจ๋๋ฅผ ๊ณ ์ ํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ ์๋นํ ๋ถ๋ด์ ์ ๋ฐํ ๊ฒ์ด๋ค.
๋ฆฌ๋
์ค์์ mlock()
, mlock2()
, munlock()
์ addr
์ ์๋์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ด์ง ๊ฒฝ๊ณ๋ก ๋ด๋ฆผ ํ๋ค. ํ์ง๋ง mlock()
๋ฐ munlock()
์ POSIX.1 ๋ช
์ธ์์๋ addr
์ด ํ์ด์ง์ ์ ๋ ฌ๋์ด ์๊ธฐ๋ฅผ ๊ตฌํ์์ ์๊ตฌํ ์ ์๋๋ก ํ๋ค. ๋ฐ๋ผ์ ์ด์ ๊ฐ๋ฅํ ์์ฉ์์๋ ์ ๋ ฌ๋์ด ์๊ฒ ํด์ผ ํ๋ค.
๋ฆฌ๋
์ค ํ์ ์ธ /proc/[pid]/status
ํ์ผ์ VmLck
ํ๋๋ ID๊ฐ PID
์ธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ค ๋ช ํฌ๋ก๋ฐ์ดํธ๊ฐ mlock()
, mlock2()
, mlockall()
, ๊ทธ๋ฆฌ๊ณ mmap(2) MAP_LOCKED
์ ์ํด ๊ณ ์ ๋์ด ์๋์ง ๋ณด์ฌ ์ค๋ค.
๋ฆฌ๋
์ค 2.6.8 ๋ฐ ์ด์ ์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ํ๋ ค๋ฉด ํ๋ก์ธ์ค์๊ฒ ํน๊ถ(CAP_IPC_LOCK
)์ด ์์ด์ผ ํ๋ฉฐ ๊ทธ ํ๋ก์ธ์ค๊ฐ ๊ณ ์ ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ํ๊ณ๋ฅผ RLIMIT_MEMLOCK
์ฐ์ฑ ์์ ์ ํ์ด ๊ท์ ํ๋ค.
๋ฆฌ๋
์ค 2.6.9๋ถํฐ๋ ํน๊ถ ํ๋ก์ธ์ค๊ฐ ๊ณ ์ ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ํ์ ๋์ง ์์ผ๋ฉฐ RLIMIT_MEMLOCK
์ฐ์ฑ ์์ ์ ํ์ ๋์ ๋นํน๊ถ ํ๋ก์ธ์ค๊ฐ ๊ณ ์ ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ํ๊ณ๋ฅผ ๊ท์ ํ๋ค.
๋ฆฌ๋
์ค 4.8 ๋ฐ ์ด์ ์์ ๋นํน๊ถ (์ฆ CAP_IPC_LOCK
์๋) ํ๋ก์ธ์ค์ ๊ณ ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ณ์ฐ์ ๋ฒ๊ทธ๊ฐ ์์๋ค. ๊ทธ๋์ addr
๊ณผ len
์ผ๋ก ์ง์ ํ ๋ฒ์๊ฐ ๊ธฐ์กด ๊ณ ์ ๊ณผ ๊ฒน์น๋ ๊ฒฝ์ฐ์ ๊ฒน์น๋ ์์ญ์ ์ด๋ฏธ ๊ณ ์ ๋ ๋ฐ์ดํธ๋ค์ด ์ ํ ๊ฒ์ฌ ๋ ๋ ๋ฒ ๊ณ์ฐ๋์๋ค. ๊ทธ ์ด์ค ๊ณ์ฐ ๋๋ฌธ์ ํ๋ก์ธ์ค์ "๊ณ ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋" ๊ฐ์ RLIMIT_MEMLOCK
์ ํ์ ๋๋๋ก ์๋ชป ๊ณ์ฐํ์ฌ ์ฑ๊ณตํ์ด์ผ ํ mlock()
๋ฐ mlock2()
์์ฒญ์ด ์คํจํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์์๋ค. ๋ฆฌ๋
์ค 4.9์์ ๋ฒ๊ทธ๊ฐ ๊ณ ์ณ์ก๋ค.
2.4.17๊น์ง์ 2.4 ์๋ฆฌ์ฆ ๋ฆฌ๋
์ค ์ปค๋์์ ๋ฒ๊ทธ ๋๋ฌธ์ fork(2)๋ฅผ ๊ฑฐ์น ๋ mlockall()
MCL_FUTURE
ํ๋๊ทธ๋ฅผ ๋ฌผ๋ ค๋ฐ์๋ค. ์ปค๋ 2.4.18์์ ์์ ๋์๋ค.
์ปค๋ 2.6.9๋ถํฐ๋ ํน๊ถ ํ๋ก์ธ์ค๊ฐ mlockall(MCL_FUTURE)
์ ํธ์ถํ๊ณ ์ดํ ํน๊ถ์ ๋ฒ๋ฆฌ๋ (๊ฐ๋ น ์คํจ UID๋ฅผ 0 ์๋ ๊ฐ์ผ๋ก ์ค์ ํด์ CAP_IPC_LOCK
์ญ๋ฅ์ ์๋) ๊ฒฝ์ฐ์ RLIMIT_MEMLOCK
์์ ์ ํ์ ๋๋ฌํด ์์ผ๋ฉด ์ด์ด์ง๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น(๊ฐ๋ น mmap(2), brk(2))์ด ์คํจํ๊ฒ ๋๋ค.
mincore(2), mmap(2), setrlimit(2), shmctl(2), sysconf(3), proc(5), capabilities(7)
2018-02-02