๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/CS

mmap()

by syLim___ 2023. 5. 8.
728x90

โœ… mmap()?

 - POSIX ํ‘œ์ค€์—์„œ ์ •์˜๋œ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 - ์‹œ์Šคํ…œ์ฝœ์„ ํ†ตํ•ด ํŒŒ์ผ์ด๋‚˜ ๋””๋ฐ”์ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 - ํ”„๋กœ๊ทธ๋žจ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ, ๋””์Šคํฌ์˜ ํŒŒ์ผ ์˜์—ญ์„ ๋งคํ•‘ํ•œ๋‹ค.

 

โœ… ์žฅ์ 

 - ํ”„๋กœ๊ทธ๋žจ์€ ํŒŒ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ์— load๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ memory access ์ž‘์—…์„ ํ†ตํ•ด ํŒŒ์ผ ์•ก์„ธ์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.

 - os์—์„œ ํŒŒ์ผ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

 - ์œ ์—ฐํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ… mmap() ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž…

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

 - addr: ๋งคํ•‘ํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ์ง€์ •. null์ผ ๊ฒฝ์šฐ ์ปค๋„์ด ์•Œ์•„์„œ ์ง€์ •ํ•ด์ค€๋‹ค.

 - length: ๋งคํ•‘ํ•  ๋ฉ”๋ชจ๋ฆฌ ๊ธธ์ด(๋ฐ”์ดํŠธ)

 - prot: ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 - flags: ๋งคํ•‘ ์˜ต์…˜์„ ์ง€์ •ํ•œ๋‹ค.

                `MAP_SHARED` : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ๋งคํ•‘์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

                `MAP_PRIVATE` : ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋…๋ฆฝ์ ์ธ ๋งคํ•‘์„ ๊ฐ€์ง€๋„๋ก ํ•œ๋‹ค.

                `MAP_ANNONYMOUS` : ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด mmap์„ ํ†ตํ•ด ์„ค์ •๋˜๋Š” ๊ฒฝ์šฐ. ๋””์Šคํฌ์— ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค.

 - fd : ๋งคํ•‘ํ•  ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 - offset : ํŒŒ์ผ ๋‚ด์—์„œ ๋งคํ•‘์„ ์‹œ์ž‘ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

 - ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ๋งคํ•‘๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ์‹คํŒจํ•  ๊ฒฝ์šฐ `MAP_FAILED`๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

โœ… munmap()

int munmap(void *addr, size_t length);

 - mmap()์œผ๋กœ ๋งคํ•‘๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

728x90

'๊ฐœ์ธ ๊ณต๋ถ€ > CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Process์™€ Thread  (2) 2024.10.15
gdb ๋ช…๋ น์–ด  (0) 2023.06.12
2์ง„๋ฒ•, 8์ง„๋ฒ•, 10์ง„๋ฒ•, 16์ง„๋ฒ•  (1) 2023.01.15