부모 프로세스가 (Linux에서) 하위 프로세스를 포크 할 때 부모 프로세스의 메모리 페이지 중 일부를 주소 공간에 복사하려고합니다 (즉, COW)을 기다릴 필요가 없습니다. 어떤 메커니즘이 이것을 지원합니까? 감사합니다 :-)fork()를 수행 할 때 일부 메모리 페이지에서 COW (copy-on-write) 사용 안 함
답변
나는이 인터페이스를 전혀 모르지만, 수동으로 수행하려면 memcpy
또는 직접 해당 페이지를 터치하십시오 (예 : 첫 번째 단어를 읽은 다음 다시 쓰십시오). 페이지를 volatile
으로 표시하십시오.
+1이지만 최적화를 해제 할 필요가 없으며 메모리를 '휘발성'으로 표시하면됩니다. – casablanca
clone
시스템 호출을 살펴보십시오. 가장 관련성이 높은 옵션은 CLONE_VM
입니다. 포크가 순전히 최적화 된 후에 페이지의 copy-on-write 동작을 실현하는 것이 중요합니다. 페이지 복제로 인해 잠재적으로 "게으른"성능 위약이 발생할 수있는 경우를 제외하고는 문제가 될 수있는 상황을 예측할 수 없습니다. 이 경우에도 원래 페이지에서 뽑은 모든 프로세스에 대한 실제 메모리 사용량이 증가하므로 모든 쓰기 가능한 페이지를 건드리지 않으려면 지나치게 열중 할 수 있습니다.
COW에서도 가상 주소 공간이 이미 사용됩니다. CLONE_VM은 모든 공유 메모리 (스레드가 사용하는 플래그 중 하나임)를 사용하여 작업을 생성합니다. – ninjalj
@ninjalj : 두 경우 모두 수정하십시오. 지난 밤에 쓴, 가상 메모리 사용에 관한 내 진술이 잘못되었습니다. –
흠, 나는 그 질문을 이해하지 못한다. 어쩌면 당신은 분명히 할 수있다. 자녀가있는 부모 사이에 공유 메모리가 있다고 기대합니까? 그렇지 않으면 부모가 포크 앞에서 메모리를 올바르게 설정 한 경우 (즉, 데이터로 채워진 영역) 포크 후에 자식이 같은 위치 (자체 주소 공간에 있음)에서 해당 데이터를 찾을 수 있습니다. – ShiDoiSi
조숙 한 최적화는 유해한 것으로 간주되며 조기 페시 모조는 더욱 심각합니다. 당신이하려는 일에 대한 이유를 제공 할 수 없다면, 나는 당신이 거대한 실수를하고 있다고 생각하며 아마 COW를 이해하지 못할 것입니다. –