mmap - horoyoiiv/linux GitHub Wiki

mmap

  • memory mapped io

1. Read File From DISK using "read()"

#define BUF_SIZE 1024
 
int main(){
        char buf[BUF_SIZE];
        int fd=open("file.txt",O_CREAT|O_RDWR|O_TRUNC);

        int n=read(fd, buf, BUF_SIZE); // fd์—์„œ BUF_SIZE ์ดํ•˜๋กœ ์ฝ์–ด์„œ, buf์— ์ €์žฅํ•œ๋‹ค.
        // ํ•ด๋‹น read๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์‹œ์ ์€ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ page cache์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์‚ฌ๋˜์–ด, ์œ ์ € ๋ฉ”๋ชจ๋ฆฌ์˜ buf์— ์ €์žฅ๋œ ํ›„์ด๋‹ค. 
        ...
}

image

2. Read File From DISK using "mmap()"

  • Disk์—์„œ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋„์˜ page cache์— ์ €์žฅํ•œ ํ›„ AP์˜ Page Table Entry๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๊ทธ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ์œผ๋กœ์จ,
    "user buffer์— ๋Œ€ํ•œ ๋ณต์‚ฌ ๊ณผ์ • ์—†์ด", memory๋ฅผ ์ฝ๊ณ  ์“ฐ๋“ฏ ํŒŒ์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•.

image