두 프로세스가 동일한 주소 공간에 매핑되어 있습니다.

두 프로세스가 동일한 주소 공간에 매핑되어 있습니다.

GDB를 사용하여 디버깅하기 위해 두 프로세스를 모두 열었을 때 /proc/PID/maps가 두 프로세스 모두 동일한 주소 영역을 가지고 있음을 나타냈습니다.

cat /proc/4170/maps
555555554000-555555555000 r--p 00000000 08:01 655807                     /home/user/1
555555555000-555555556000 r-xp 00001000 08:01 655807                     /home/user/1
555555556000-555555557000 r--p 00002000 08:01 655807                     /home/user/1
555555557000-555555558000 r--p 00002000 08:01 655807                     /home/user/1
555555558000-555555559000 rw-p 00003000 08:01 655807                     /home/user/1

cat /proc/4177/maps
555555554000-555555555000 r--p 00000000 08:01 664427                     /home/user/2
555555555000-555555556000 r-xp 00001000 08:01 664427                     /home/user/2
555555556000-555555557000 r--p 00002000 08:01 664427                     /home/user/2
555555557000-555555558000 r--p 00002000 08:01 664427                     /home/user/2
555555558000-555555559000 rw-p 00003000 08:01 664427                     /home/user/2

이것이 어떻게 처리되는지 이해가 되지 않습니다. 각 프로세스에는 자체 페이지 테이블이 있어야 한다고 생각했습니다.

답변1

이것이 어떻게 처리되는지 이해가 되지 않습니다. 각 프로세스에는 자체 페이지 테이블이 있어야 한다고 생각했습니다.

이것이 바로 여기서 일어나고 있는 일입니다. 의 주소는 /proc/.../maps물리적 주소가 아닌 가상 주소입니다. 각 프로세스의 페이지 테이블을 통해 해석되므로 프로세스는 물리적 메모리에서 개별 페이지를 가져옵니다(공유 페이지 제외).

따라서 두 프로세스 모두 가상 주소 555555558000-555555559000에서 사용할 수 있는 쓰기 가능한 메모리를 가지고 있지만 각 프로세스는 해당 메모리에 대해 서로 다른 페이지 테이블을 가지며 궁극적으로 서로 다른 물리적 주소를 가리킵니다.

(몇 가지 추가 세부 사항을 포함하여 조금 단순화했습니다.예를 들어쓰기 시 복사 등이 있지만 여기서는 이를 무시할 수 있습니다. )

관련 정보