โ 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()์ผ๋ก ๋งคํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ค.
'๊ฐ์ธ ๊ณต๋ถ > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Process์ Thread (2) | 2024.10.15 |
---|---|
gdb ๋ช ๋ น์ด (0) | 2023.06.12 |
2์ง๋ฒ, 8์ง๋ฒ, 10์ง๋ฒ, 16์ง๋ฒ (1) | 2023.01.15 |