ELF의 데이터 영역(.data/.bss) swap/reclamation 여부?
(마땅한 제목이 안떠올라서 마구 썼습니다. 죄송합니다.)
Memory management/swap을 공부하고 있는데요. ELF관련해서 질문이 있습니다.
(참고로, 커널 2.6.36입니다)
어떤 ELF가 로딩/실행될 때 그 ELF의 각 섹션이 do_mmap으로 mapping이 되는 것은
확인했습니다. (elf_map:binfmt_elf.c)
이후에 동적으로 할당되는 메모리 영역들(스택,힙)은 Demand paging이 발생할 때
메모리 영역이 커널에 의해서 할당되죠. (do_anonymous_page)
다른 표현으로 anonymous page라고 부르고,
PAGE_MAPPING_ANON definition으로 anonymous page 영역인지를 나타냅니다. (PageAnon매크로)
DRAM영역들이 부족할 것같다고 판단되면 이 anonymous page들이 swap cache를 통해서
swap out이 되는것까지는 이해했습니다.
그런데, 이런 memory reclamation(또는 swap)의 대상에 ELF상의 .data와 .bss영역도 포함이 되나요?
얼핏 봐서는 data/bss영역도 do_mmap으로 할당되서 anonymous page로 분류될것같지는 않고,
그렇다고 해서 data/bss영역이 업데이트 되었을 때 page cache를 통해서 파일 시스템에 저장되어있는
elf파일이 업데이트 되지도 않을텐데 말이죠.
그리고, 만약에 이 .data/.bss들이 do_mmap으로 메모리상에 로딩은 되지만 어떤 매커니즘으로
원본 elf파일은 업데이트가 되지 않는거죠?
미리 감사드립니다.
MAP_PRIVATE
private file mapping은 read access 시에는 page cache를 이용하지만
write 시에는 새로운 anonymous page가 할당되고(COW) 이 때부터 swap을 이용합니다.
댓글 달기