remap_file_pages(2) - wariua/manpages-ko GitHub Wiki
remap_file_pages - ๋น์ ํ ํ์ผ ๋งคํ ๋ง๋ค๊ธฐ
#define _GNU_SOURCE /* feature_test_macros(7) ์ฐธ๊ณ */
#include <sys/mman.h>
int remap_file_pages(void *addr, size_t size, int prot,
size_t pgoff, int flags);
์ฃผ์: ์ด ์์คํ ํธ์ถ์ ๋ฆฌ๋ ์ค 3.16๋ถํฐ ์ ๊ฑฐ ์์ ์ผ๋ก ํ์๋์๋ค. ๋ฆฌ๋ ์ค 4.0์์๋ ๊ทธ ๊ตฌํ์ด ๋๋ฆฐ ์ปค๋ ๋ด ์๋ฎฌ๋ ์ด์ ์ผ๋ก ๋์ฒด๋์๋ค. ์ด ์์คํ ํธ์ถ์ ์ฐ๋ ์ผ๋ง ์๋๋ ์์ฉ๋ค์ ๋ค๋ฅธ ๋์์ผ๋ก ์ด์ ํ๋ ๊ฑธ ๊ฒํ ํ๋ ๊ฒ ์ข๋ค. ๋ณ๊ฒฝ ์ด์ ๋ ์ด ์์คํ ํธ์ถ์ ์ํ ์ปค๋ ์ฝ๋๊ฐ ๋ณต์กํ์ผ๋ฉฐ ์ด ์์คํ ํธ์ถ์ด ์์ ํ๋ ์๋๋๋ผ๋ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค๊ณ ๋ณด์๊ธฐ ๋๋ฌธ์ด๋ค. 32๋นํธ ์์คํ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฉ์ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์์ง๋ง 64๋นํธ ์์คํ ์๋ ๊ทธ๋ฐ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์กด์ฌํ์ง ์๋๋ค.
remap_file_pages()
์์คํ
ํธ์ถ์ ์ฌ์ฉํด ๋น์ ํ ๋งคํ, ์ฆ ํ์ผ์ ํ์ด์ง๋ค์ด ์์ฐจ์ ์ด์ง ์์ ์์๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋งต ๋๋ ๋งคํ์ ๋ง๋ ๋ค. mmap(2)์ ๋ฐ๋ณต ํธ์ถํ๋ ๋์ remap_file_pages()
๋ฅผ ์ฐ๋ ๊ฒ์ ์ฅ์ ์ ์ปค๋์์ VMA(Virtual Memory Area) ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ค ํ์๊ฐ ์๋ค๋ ์ ์ด๋ค.
๋น์ ํ ๋งคํ์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ๋ค.
-
mmap(2)์ ์จ์ (์ฒ์์๋ ์ ํ์ธ) ๋งคํ์ ๋ง๋ ๋ค.
MAP_SHARED
ํ๋๊ทธ๋ฅผ ์ค์ ๋งคํ์ ๋ง๋ค์ด์ผ ํ๋ค. -
remap_file_pages()
ํธ์ถ์ ํ ๋ฒ ๋๋ ๊ทธ ์ด์ ์ฌ์ฉํด์ ๋งคํ ํ์ด์ง์ ํ์ผ ํ์ด์ง ๊ฐ์ ๋์ ๊ด๊ณ๋ฅผ ์ฌ์กฐ์ ํ๋ค. ํ์ผ์ ๋์ผ ํ์ด์ง๋ฅผ ๋งต ์์ญ ๋ด์ ์ฌ๋ฌ ์์น๋ก ๋งต ํ๋ ๊ฒ ๊ฐ๋ฅํ๋ค.
pgoff
๋ฐ size
์ธ์๋ ๋งคํ ๋ด์์ ์ฌ๋ฐฐ์นํ๋ ค๋ ํ์ผ ์์ญ์ ์ง์ ํ๋ค. pgoff
๋ ์์คํ
ํ์ด์ง ํฌ๊ธฐ ๋จ์์ ํ์ผ ์คํ์
์ด๊ณ size
๋ ๋ฐ์ดํธ ๋จ์์ ์์ญ ๊ธธ์ด์ด๋ค.
addr
์ธ์๋ ๋ ๊ฐ์ง ์ญํ ์ ํ๋ค. ์ฒซ์งธ๋ก, ํ์ด์ง๋ฅผ ์ฌ์กฐ์ ํ๋ ค๋ ๋งคํ์ ์๋ณํ๋ค. ๋ฐ๋ผ์ addr
์ ์์ mmap(2) ํธ์ถ๋ก ๋งต ํ ์์ญ ๋ด์ ํฌํจ๋๋ ์ฃผ์์ฌ์ผ ํ๋ค. ๋์งธ๋ก, addr
์ pgoff
๋ฐ size
๋ก ์ง์ ํ ํ์ผ ํ์ด์ง๋ค์ด ์์นํ๊ฒ ๋ ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค.
addr
๊ณผ size
์ ์ง์ ํ๋ ๊ฐ์ ์์คํ
ํ์ด์ง ํฌ๊ธฐ์ ๋ฐฐ์๋ก ํ๋ ๊ฒ ์ข๋ค. ๋ฐฐ์๊ฐ ์๋๋ฉด ์ปค๋์์ ๋ ๊ฐ ๋ชจ๋๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ด์ง ํฌ๊ธฐ ๋ฐฐ์๋ก ๋ด๋ฆผ ํ๋ค.
prot
์ธ์๋ 0์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
flags
์ธ์์ ์๋ฏธ๋ mmap(2)๊ณผ ๊ฐ๋, MAP_NONBLOCK
์ธ์ ํ๋๊ทธ๋ ๋ชจ๋ ๋ฌด์ํ๋ค.
์ฑ๊ณต ์ remap_file_pages()
๋ 0์ ๋ฐํํ๋ค. ์ค๋ฅ์ -1์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ์ ์ ํ ์ค์ ํ๋ค.
EINVAL
-
addr
์ดMAP_SHARED
ํ๋๊ทธ๋ก ์์ฑํ ์ ํจํ ๋งคํ์ ๊ฐ๋ฆฌํค๊ณ ์์ง ์๋ค. EINVAL
-
addr
,size
,prot
,pgoff
๊ฐ ์ ํจํ์ง ์๋ค.
๋ฆฌ๋
์ค 2.5.46์์ remap_file_pages()
์์คํ
ํธ์ถ์ด ๋ฑ์ฅํ๋ค. glibc ๋ฒ์ 2.3.3์์ ์ง์์ด ์ถ๊ฐ๋์๋ค.
remap_file_pages()
์์คํ
ํธ์ถ์ ๋ฆฌ๋
์ค ์ ์ฉ์ด๋ค.
๋ฆฌ๋
์ค 2.6.23๋ถํฐ๋ tmpfs(5), hugetlbfs, ramfs ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ด ํ์ผ ์์คํ
์์๋ง remap_file_pages()
๊ฐ ๋น์ ํ ๋งคํ์ ๋ง๋ ๋ค. ๊ธฐ๋ฐ ์ ์ฅ์๊ฐ ์๋ ํ์ผ ์์คํ
์์๋ ํ์ผ์ ์ด๋ ๋ถ๋ถ์ ์ด๋ ์ฃผ์๋ก ๋งต ํ ์ง ์กฐ์ ํ๋ ๋ฐ ์์ด์ remap_file_pages()
๊ฐ mmap(2)๋ณด๋ค ํฌ๊ฒ ํจ์จ์ ์ด์ง ์๋ค.
getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)
2017-09-15