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

NAME

mremap - ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์žฌ์‚ฌ์ƒํ•˜๊ธฐ

SYNOPSIS

#define _GNU_SOURCE         /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <sys/mman.h>

void *mremap(void *old_address, size_t old_size,
             size_t new_size, int flags, ... /* void *new_address */);

DESCRIPTION

mremap()์€ ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘์„ ํ™•์žฅ(๋˜๋Š” ์ถ•์†Œ)ํ•˜๋ฉฐ, ๋™์‹œ์— ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. (flags ์ธ์ž์™€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋”ฐ๋ผ ์ •ํ•ด์ง„๋‹ค.)

old_address๋Š” ํ™•์žฅ(๋˜๋Š” ์ถ•์†Œ)ํ•˜๋ ค๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ์ด์ „ ์ฃผ์†Œ์ด๋‹ค. old_address๊ฐ€ ํŽ˜์ด์ง€์— ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. old_size๋Š” ๊ทธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ์ด์ „ ํฌ๊ธฐ์ด๋‹ค. new_size๋Š” ๊ทธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ์กฐ์ • ํ›„์˜ ์š”์ฒญ ํฌ๊ธฐ์ด๋‹ค. ์„ ํƒ์ ์ธ ๋‹ค์„ฏ ๋ฒˆ์งธ ์ธ์ž new_address๋ฅผ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. ์•„๋ž˜ MREMAP_FIXED ์„ค๋ช…์„ ๋ณด๋ผ.

old_size์˜ ๊ฐ’์ด 0์ด๊ณ  old_address๊ฐ€ ๊ณต์œ  ๊ฐ€๋Šฅ ๋งคํ•‘(mmap(2) MAP_SHARED ์ฐธ๊ณ )์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” mremap()์ด ๋™์ผ ํŽ˜์ด์ง€๋“ค๋กœ ์ƒˆ ๋งคํ•‘์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. new_size๊ฐ€ ์ƒˆ ๋งคํ•‘์˜ ํฌ๊ธฐ๊ฐ€ ๋˜๋ฉฐ ์ƒˆ ๋งคํ•‘์˜ ์œ„์น˜๋ฅผ new_address๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์•„๋ž˜ MREMAP_FIXED ์„ค๋ช…์„ ๋ณด๋ผ. ์ด ๋ฐฉ์‹์œผ๋กœ ์ƒˆ ๋งคํ•‘์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” MREMAP_MAYMOVE ํ”Œ๋ž˜๊ทธ๋„ ํ•จ๊ป˜ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํŽ˜์ด์ง€๋“ค๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค์—๋Š” (ํ•œ ๊ฐœ ๋˜๋Š”) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ ํ˜• ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์žˆ๋‹ค. ๊ฐ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ํ•œ ๊ฐœ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ๋งคํ•‘์ด (ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋‚ด์—) ์žˆ๋‹ค. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ๊ฐ์ž์˜ ๋ณดํ˜ธ ๋ฐฉ์‹(์ ‘๊ทผ๊ถŒ)์ด ์žˆ์–ด์„œ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ž˜๋ชป๋œ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด (๊ฐ€๋ น ์ฝ๊ธฐ ์ „์šฉ ์„ธ๊ทธ๋จผํŠธ์— ์“ฐ๊ธฐ) ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ธ๊ทธ๋จผํŠธ ๋ฐ–์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด๋„ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

mremap()์€ ๋ฆฌ๋ˆ…์Šค์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ฒด๊ณ„๋ฅผ ์ด์šฉํ•œ๋‹ค. mremap()์€ ๊ฐ€์ƒ ์ฃผ์†Œ์™€ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€ ๊ฐ„์˜ ๋งคํ•‘์„ ๋ฐ”๊พผ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์•„์ฃผ ํšจ์œจ์ ์ธ realloc(3)์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

flags ๋น„ํŠธ ๋งˆ์Šคํฌ ์ธ์ž๋Š” 0์ด๊ฑฐ๋‚˜ ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

MREMAP_MAYMOVE
๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋งคํ•‘์„ ํ™•์žฅํ•  ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด mremap()์ด ์‹คํŒจํ•œ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ•„์š”์‹œ ์ปค๋„์—์„œ ๋งคํ•‘์„ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค. ๋งคํ•‘์ด ์žฌ๋ฐฐ์น˜๋˜๋ฉด ์ด์ „ ๋งคํ•‘ ์œ„์น˜์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ํฌ์ธํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. (๋งคํ•‘ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์˜คํ”„์…‹์„ ์“ฐ๋Š” ๊ฒŒ ์ข‹๋‹ค.)
MREMAP_FIXED (๋ฆฌ๋ˆ…์Šค 2.3.31๋ถ€ํ„ฐ)
์ด ํ”Œ๋ž˜๊ทธ๋Š” mmap(2)์˜ MAP_FIXED ํ”Œ๋ž˜๊ทธ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด mremap()์ด ๋‹ค์„ฏ ๋ฒˆ์งธ ์ธ์ž void *new_address๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ทธ ์ธ์ž๋Š” ๋งคํ•‘์„ ์ด๋™์‹œํ‚ฌ ํŽ˜์ด์ง€ ์ •๋ ฌ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. new_address์™€ new_size๋กœ ์ง€์ •ํ•œ ์ฃผ์†Œ ๋ฒ”์œ„์— ๊ธฐ์กด ๋งคํ•‘์ด ์žˆ์œผ๋ฉด ๋งต์„ ํ•ด์ œํ•œ๋‹ค. MREMAP_FIXED๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ MREMAP_MAYMOVE๋„ ํ•จ๊ป˜ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

old_address์™€ old_size๋กœ ์ง€์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ (mlock(2) ๋“ฑ์œผ๋กœ) ์ž ๊ฒจ ์žˆ์œผ๋ฉด ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ ์กฐ์ • ๋ฐ/๋˜๋Š” ์žฌ๋ฐฐ์น˜ ๊ณผ์ •์—์„œ ๊ทธ ์ž ๊น€์ด ์œ ์ง€๋œ๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ž ๊ธด ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ mremap()์€ ์ƒˆ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ MAP_FAILED(์ฆ‰ (void *) -1) ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ errno๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EAGAIN
ํ˜ธ์ถœ์ž๊ฐ€ ์ž ๊ธด ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ™•์žฅํ•˜๋ ค ํ–ˆ๋Š”๋ฐ RLIMIT_MEMLOCK ์ž์› ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๊ณ ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
EFAULT
"์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ํดํŠธ". old_address์—์„œ old_address+old_size๊นŒ์ง€ ๋ฒ”์œ„ ๋‚ด์˜ ์–ด๋–ค ์ฃผ์†Œ๊ฐ€ ์ด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ด๋‹ค. ์š”์ฒญํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„ ์ „์ฒด๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๋งคํ•‘๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ ๋งคํ•‘๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์ธ ๊ฒฝ์šฐ์—๋„ EFAULT๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
EINVAL

์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž๋ฅผ ์ฃผ์—ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • old_address๊ฐ€ ํŽ˜์ด์ง€์— ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  • flags์— MREMAP_MAYMOVE์™€ MREMAP_FIXED ์™ธ์˜ ๊ฐ’์„ ์ง€์ •ํ–ˆ๋‹ค.
  • new_size๊ฐ€ 0์ด๋‹ค.
  • new_size๋‚˜ new_address๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.
  • new_address์™€ new_size๋กœ ์ง€์ •ํ•œ ์ƒˆ ์ฃผ์†Œ ๋ฒ”์œ„๊ฐ€ old_address์™€ old_size๋กœ ์ง€์ •ํ•œ ์ด์ „ ์ฃผ์†Œ ๋ฒ”์œ„์™€ ๊ฒน์นœ๋‹ค.
  • MREMAP_FIXED๋ฅผ ์ง€์ •ํ•˜๋ฉด์„œ MREMAP_MAYMOVE๋ฅผ ํ•จ๊ป˜ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๋‹ค.
  • old_size๊ฐ€ 0์ธ๋ฐ old_address๊ฐ€ ๊ณต์œ  ๊ฐ€๋Šฅ ๋งคํ•‘์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค. (ํ•˜์ง€๋งŒ BUGS ์ฐธ๊ณ .)
  • old_size๊ฐ€ 0์ธ๋ฐ MREMAP_MAYMOVE ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๋‹ค.
ENOMEM
ํ˜„์žฌ ๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ™•์žฅํ•  ์ˆ˜ ์—†์œผ๋ฉฐ flags์— MREMAP_MAYMOVE๊ฐ€ ์„ค์ •๋ผ ์žˆ์ง€ ์•Š๋‹ค. ๋˜๋Š” ์“ธ ์ˆ˜ ์žˆ๋Š” (๊ฐ€์ƒ) ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„์น˜ ์•Š๋‹ค.

CONFORMING TO

์ด ํ˜ธ์ถœ์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋ฏ€๋กœ ์ด์‹์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

NOTES

glibc ๋ฒ„์ „ 2.4 ์ „์—์„œ๋Š” MREMAP_FIXED ์ •์˜๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ mremap() ์›ํ˜•์—์„œ new_address ์ธ์ž๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.

mlock(2) ๋“ฑ์œผ๋กœ ์ž ๊ทผ ์˜์—ญ์„ mremap()์œผ๋กœ ์ด๋™ ๋‚ด์ง€ ํ™•์žฅํ•˜๋Š” ๊ฒฝ์šฐ์— mremap() ํ˜ธ์ถœ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ ์˜์—ญ์„ ์ฑ„์šฐ๋ ค๊ณ  ์ตœ์„ ์„ ๋‹คํ•˜๋˜ ์ฑ„์šฐ๋Š” ๋ฐ ์‹คํŒจํ•œ ๊ฒฝ์šฐ์— ENOMEM์œผ๋กœ ์‹คํŒจํ•˜์ง€ ์•Š๋Š”๋‹ค.

BUGS

๋ฆฌ๋ˆ…์Šค 4.14 ์ „์—์„œ๋Š” old_size๊ฐ€ 0์ด๊ณ  old_address๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งคํ•‘์ด ๋น„๊ณต์œ  ๋งคํ•‘(mmap(2) MAP_PRIVATE)์ด๋ฉด mremap()์ด ์›๋ž˜ ๋งคํ•‘๊ณผ ๋ฌด๊ด€ํ•œ ์ƒˆ ๋น„๊ณต์œ  ๋งคํ•‘์„ ์ƒ์„ฑํ–ˆ๋‹ค. ๊ทธ ๋™์ž‘ ๋ฐฉ์‹์€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋ฉฐ ์•„๋งˆ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์‘์šฉ์—๊ฒŒ๋„ (mremap()์˜ ๋ชฉ์ ์ด ์›๋ž˜ ๋งคํ•‘์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ ๋งคํ•‘์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ) ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์ด์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค 4.14๋ถ€ํ„ฐ๋Š” ๊ทธ ๊ฒฝ์šฐ์— mremap()์ด EINVAL ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•œ๋‹ค.

SEE ALSO

brk(2), getpagesize(2), getrlimit(2), mlock(2), mmap(2), sbrk(2), malloc(3), realloc(3)

๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ข‹์•„ํ•˜๋Š” ์šด์˜ ์ฒด์ œ ๊ต๊ณผ์„œ(๊ฐ€๋ น Andrew S. Tanenbaum์˜ Modern Operating System, Randolf Bentson์˜ Inside Linux, Maurice J. Bach์˜ The Design of the UNIX Operating System)๋ฅผ ๋ณด๋ผ.


2019-03-06

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