를 사용하여 shmget()
특정 크기(바이트)의 공유 메모리 블록을 할당하고 를 사용하여 shmat()
이 공유 메모리 블록을 호출 프로세스의 주소 공간에 연결합니다.
내 이해를 확인해야 합니다.
공유 메모리를 사용하고 생성하고 연결하는 프로세스 하나 shmget()
와 shmat()
해당 공유 메모리를 사용하여 주소 공간에 연결하는 다른 프로세스가 있습니다 shmat()
.
이제 이 공유 메모리의 (사용된) 반환 주소는 shmat()
가상 주소이기 때문에 두 프로세스에서 다릅니다.
그러나 공유 메모리 블록 자체에는 단일 기본 물리적 주소가 있으며, 이는 해당 메모리를 공유하는 프로세스에 대한 다른 가상 주소에 매핑됩니다. 맞습니까?
답변1
네, 맞습니다. 이건 아이디어야공유 메모리가상 주소 지정으로 인해 서로 다른 프로세스가 동일한 실제 메모리를 매핑할 수 있으며 이러한 주소는 동일할 필요가 없습니다.
동일한 공유 메모리 페이지를 동일한 프로세스의 다른 주소에 두 번 매핑할 수도 있습니다. 예를 들어 GNU Radio(클래식)는 이를 수행합니다.버퍼를 이중 매핑하여 끝에 쓰기가 처음에 쓰기를 의미하는 링 버퍼를 시뮬레이션합니다..