remap_file_pages(2) - wariua/manpages-ko GitHub Wiki

NAME

remap_file_pages - ๋น„์„ ํ˜• ํŒŒ์ผ ๋งคํ•‘ ๋งŒ๋“ค๊ธฐ

SYNOPSIS

#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);

DESCRIPTION

์ฃผ์˜: ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋ฆฌ๋ˆ…์Šค 3.16๋ถ€ํ„ฐ ์ œ๊ฑฐ ์˜ˆ์ •์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค 4.0์—์„œ๋Š” ๊ทธ ๊ตฌํ˜„์ด ๋А๋ฆฐ ์ปค๋„ ๋‚ด ์—๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์“ฐ๋Š” ์–ผ๋งˆ ์•ˆ๋˜๋Š” ์‘์šฉ๋“ค์€ ๋‹ค๋ฅธ ๋Œ€์•ˆ์œผ๋กœ ์ด์ „ํ•˜๋Š” ๊ฑธ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ๋ณ€๊ฒฝ ์ด์œ ๋Š” ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ–ˆ์œผ๋ฉฐ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์™„์ „ํžˆ๋Š” ์•„๋‹ˆ๋”๋ผ๋„ ๊ฑฐ์˜ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ณด์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 32๋น„ํŠธ ์‹œ์Šคํ…œ ์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‘์šฉ์— ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ 64๋น„ํŠธ ์‹œ์Šคํ…œ์—๋Š” ๊ทธ๋Ÿฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

remap_file_pages() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ด ๋น„์„ ํ˜• ๋งคํ•‘, ์ฆ‰ ํŒŒ์ผ์˜ ํŽ˜์ด์ง€๋“ค์ด ์ˆœ์ฐจ์ ์ด์ง€ ์•Š์€ ์ˆœ์„œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋งต ๋˜๋Š” ๋งคํ•‘์„ ๋งŒ๋“ ๋‹ค. mmap(2)์„ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  remap_file_pages()๋ฅผ ์“ฐ๋Š” ๊ฒƒ์˜ ์žฅ์ ์€ ์ปค๋„์—์„œ VMA(Virtual Memory Area) ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด๋‹ค.

๋น„์„ ํ˜• ๋งคํ•‘์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. mmap(2)์„ ์จ์„œ (์ฒ˜์Œ์—๋Š” ์„ ํ˜•์ธ) ๋งคํ•‘์„ ๋งŒ๋“ ๋‹ค. MAP_SHARED ํ”Œ๋ž˜๊ทธ๋ฅผ ์ค˜์„œ ๋งคํ•‘์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

  2. remap_file_pages() ํ˜ธ์ถœ์„ ํ•œ ๋ฒˆ ๋˜๋Š” ๊ทธ ์ด์ƒ ์‚ฌ์šฉํ•ด์„œ ๋งคํ•‘ ํŽ˜์ด์ง€์™€ ํŒŒ์ผ ํŽ˜์ด์ง€ ๊ฐ„์˜ ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ์žฌ์กฐ์ •ํ•œ๋‹ค. ํŒŒ์ผ์˜ ๋™์ผ ํŽ˜์ด์ง€๋ฅผ ๋งต ์˜์—ญ ๋‚ด์˜ ์—ฌ๋Ÿฌ ์œ„์น˜๋กœ ๋งต ํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

pgoff ๋ฐ size ์ธ์ž๋Š” ๋งคํ•‘ ๋‚ด์—์„œ ์žฌ๋ฐฐ์น˜ํ•˜๋ ค๋Š” ํŒŒ์ผ ์˜์—ญ์„ ์ง€์ •ํ•œ๋‹ค. pgoff๋Š” ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ํฌ๊ธฐ ๋‹จ์œ„์˜ ํŒŒ์ผ ์˜คํ”„์…‹์ด๊ณ  size๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์˜์—ญ ๊ธธ์ด์ด๋‹ค.

addr ์ธ์ž๋Š” ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ํ•œ๋‹ค. ์ฒซ์งธ๋กœ, ํŽ˜์ด์ง€๋ฅผ ์žฌ์กฐ์ •ํ•˜๋ ค๋Š” ๋งคํ•‘์„ ์‹๋ณ„ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ addr์€ ์•ž์„œ mmap(2) ํ˜ธ์ถœ๋กœ ๋งต ํ•œ ์˜์—ญ ๋‚ด์— ํฌํ•จ๋˜๋Š” ์ฃผ์†Œ์—ฌ์•ผ ํ•œ๋‹ค. ๋‘˜์งธ๋กœ, addr์€ pgoff ๋ฐ size๋กœ ์ง€์ •ํ•œ ํŒŒ์ผ ํŽ˜์ด์ง€๋“ค์ด ์œ„์น˜ํ•˜๊ฒŒ ๋  ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

addr๊ณผ size์— ์ง€์ •ํ•˜๋Š” ๊ฐ’์„ ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ํฌ๊ธฐ์˜ ๋ฐฐ์ˆ˜๋กœ ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด ์ปค๋„์—์„œ ๋‘ ๊ฐ’ ๋ชจ๋‘๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํŽ˜์ด์ง€ ํฌ๊ธฐ ๋ฐฐ์ˆ˜๋กœ ๋‚ด๋ฆผ ํ•œ๋‹ค.

prot ์ธ์ž๋Š” 0์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

flags ์ธ์ž์˜ ์˜๋ฏธ๋Š” mmap(2)๊ณผ ๊ฐ™๋˜, MAP_NONBLOCK ์™ธ์˜ ํ”Œ๋ž˜๊ทธ๋Š” ๋ชจ๋‘ ๋ฌด์‹œํ•œ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ remap_file_pages()๋Š” 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜์‹œ -1์„ ๋ฐ˜ํ™˜ํ•œ๋ฉฐ errno๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EINVAL
addr์ด MAP_SHARED ํ”Œ๋ž˜๊ทธ๋กœ ์ƒ์„ฑํ•œ ์œ ํšจํ•œ ๋งคํ•‘์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
EINVAL
addr, size, prot, pgoff๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.

VERSIONS

๋ฆฌ๋ˆ…์Šค 2.5.46์—์„œ remap_file_pages() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๋“ฑ์žฅํ–ˆ๋‹ค. glibc ๋ฒ„์ „ 2.3.3์—์„œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

CONFORMING TO

remap_file_pages() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋‹ค.

NOTES

๋ฆฌ๋ˆ…์Šค 2.6.23๋ถ€ํ„ฐ๋Š” tmpfs(5), hugetlbfs, ramfs ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ๋งŒ remap_file_pages()๊ฐ€ ๋น„์„ ํ˜• ๋งคํ•‘์„ ๋งŒ๋“ ๋‹ค. ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ๋Š” ํŒŒ์ผ์˜ ์–ด๋А ๋ถ€๋ถ„์„ ์–ด๋А ์ฃผ์†Œ๋กœ ๋งต ํ• ์ง€ ์กฐ์ •ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ remap_file_pages()๊ฐ€ mmap(2)๋ณด๋‹ค ํฌ๊ฒŒ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

SEE ALSO

getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)


2017-09-15

โš ๏ธ **GitHub.com Fallback** โš ๏ธ