리눅스에서는
익명 메모리 매핑을 위해 mmap()을 사용하거나 malloc()을 사용할 때 물리적 메모리에서만 "공간"을 할당합니까, 아니면 물리적 메모리나 스왑 또는 이들의 조합에서 "공간"을 할당합니까? (후자가 아닐까 싶습니다)
System V 공유 메모리를 사용할 때(예: shmget()) 물리적 메모리, 물리적 메모리, 스왑 또는 이들의 조합에서만 공유 메모리 세그먼트를 생성합니까? (공유 메모리는 빠른 IPC 메커니즘이라고 알려져 있기 때문에 전자라고 생각합니다)
POSIX 공유 메모리를 사용할 때 shm_open() 등은 물리적 메모리에서만 공유 메모리 객체를 생성합니까, 아니면 물리적 메모리, 스왑 또는 이들의 조합으로부터만 생성합니까? (공유 메모리는 빠른 IPC 메커니즘이라고 알려져 있기 때문에 전자라고 생각합니다)
감사해요.
답변1
그들이 할당한다면메모리어쨌든 그들은 그것을 스왑 공간으로 유지합니다.
mmap
, malloc
및 shmget
Linux에서 호출 프로세스의 주소 공간에 공간을 할당합니다. 공간은 스왑 공간 mmap
에도 shmget
예약될 수 있습니다( MAP_NORESERVE
또는 지정되지 않은 경우). SHM_NORESERVE
그들은 지원을 할당하지 않습니다물리적메모리. shm_open
또한 메모리를 할당하지도 않습니다. 기존 개체를 열거나 길이가 0인 새 개체를 만드는 데 사용됩니다.
주소 공간의 주소가 역참조되면 실제 메모리 페이지가 할당됩니다. 가능하다면 이 할당은 항상 물리적 메모리에서 발생합니다. 그렇지 않으면 프로세스가 거기에서 읽거나 쓸 수 없습니다. 잠기지 않은 메모리에 할당하고 쓴 후할 수 있는교체되지만 나중에 그런 일이 발생합니다.
("예약"은 프로세스를 위해 해당 저장 공간을 예약하는 것을 의미하고, "할당"은 특정 리소스를 프로세스에 할당하는 것을 의미합니다.예를 들어가상 주소 공간의 주소 또는 메모리의 페이지입니다. )