때때로 한 물리적인 공간을 여러 (virtual memory address)메모리 주소가 가지고 있는 경우가 있는데, 이때 두가지로 동작이 가능하다. 하나는 share - 말그대로 공유하게 되어 한 프로세스가 write한 내용이 다른 프로세스에 의해 보이는 경우이고, 다른 경우는 그렇게 write 동작이 일어날 때 해당 프로세스에게 독자적인 영역을 할당해주는 COW(Copy-on-write) 동작을 하는 경우이다.
메모리는 여러 블럭을 묶어 memory region, segment, mapping 라고 부를 수 있는데, 각각은 아래와 같이 구분된다.
- text segment 는 프로그램 영역이고,
- stack
- data segment(heap) : 동적 메모리 영역
- bss segment : 초기화 안된 전역 변수공간 (이 변수들에 대해 object file에서 초기값이 없으므로 값을 저장하지 않는다. 그래서 바이너리 사이즈를 줄일 수 있다. 또 실행시에 메모리에 올라갈 때에도 copy-on-write로 동작하여 0으로 초기화 하는 작업을 효율적으로 진행한다)
이러한 영역들은 /proc/self/maps나 pmap을 통해 프로세스별로 어떻게 메모리가 할당되어 있는지 확인할 수 있다.
No comments:
Post a Comment