정확이 원문을 보여주시면 이해가 더 쉬울 것 같습니다.
제가 이해하기로는 MAP_ANONYMOUS를 사용하여 매핑하라는 의미가 아닐까 생각이 듭니다.
커널에는 zero page라는 특수한 페이지가 있습니다. 이미 0으로 초기화되어있는
페이지입니다.
man page를 참조하시면 mmap(xxxx, MAP_ANOYMOUS)를 하게 되시면,
내용이 0으로 된다고 하고 있습니다. (단 file-backed 시키지 않는한.)
이것은 man page의 표면적인 의미이고 커널 내부적으로는 다음과 같이 동작합니다.
user program이 해당영역을 읽게 되면 커널은 페이지 폴트를 발생하게 됩니다.
이때 새로운 페이지를 할당하지 않고, 커널 내부에 미리 reserve하여 놓은
zero page를 page table에 매핑하여 사용자는 0을 읽게 되는 것입니다.
그것이 주는 장점은 커널 내부에서 필요 없는 "0" 초기화를 할 필요가 없어 동작이
빨라지고, memory 사용량을 늘릴 수 있다는 장점이 있습니다.
하지만 anonymous 영역에 대한 zero page mapping은 몇몇 이유로 2.6.24에서
사라졌습니다. 하지만 이를 사용하는 application들의 regression으로 최근
2.6.32에 다시 merge되었답니다.
Zero page를 사용하여 mmap을 하라는 것 같은..
정확이 원문을 보여주시면 이해가 더 쉬울 것 같습니다.
제가 이해하기로는 MAP_ANONYMOUS를 사용하여 매핑하라는 의미가 아닐까 생각이 듭니다.
커널에는 zero page라는 특수한 페이지가 있습니다. 이미 0으로 초기화되어있는
페이지입니다.
man page를 참조하시면 mmap(xxxx, MAP_ANOYMOUS)를 하게 되시면,
내용이 0으로 된다고 하고 있습니다. (단 file-backed 시키지 않는한.)
이것은 man page의 표면적인 의미이고 커널 내부적으로는 다음과 같이 동작합니다.
user program이 해당영역을 읽게 되면 커널은 페이지 폴트를 발생하게 됩니다.
이때 새로운 페이지를 할당하지 않고, 커널 내부에 미리 reserve하여 놓은
zero page를 page table에 매핑하여 사용자는 0을 읽게 되는 것입니다.
그것이 주는 장점은 커널 내부에서 필요 없는 "0" 초기화를 할 필요가 없어 동작이
빨라지고, memory 사용량을 늘릴 수 있다는 장점이 있습니다.
하지만 anonymous 영역에 대한 zero page mapping은 몇몇 이유로 2.6.24에서
사라졌습니다. 하지만 이를 사용하는 application들의 regression으로 최근
2.6.32에 다시 merge되었답니다.
참고하세요.
감사합니다.
감사합니다.
댓글 달기