내가 이해한 바로는 mmap()의 "MAP_SHARED" 플래그는 프로세스에 의해 메모리 맵에 적용된 모든 변경 사항을 다른 프로세스와 즉시 공유하고 결국 변경 사항을 파일에 다시 기록합니다. 메모리의 변경 사항을 다른 프로세스와 공유하지만 변경 사항을 파일에 다시 쓸 수는 없나요? 새로운 종류의 플래그가 필요합니까? 이러한 플래그(예: "MAP_SHARED_NOT_WRITE_BACK")를 구현하는 것이 얼마나 복잡합니까?
==========================================
다음에 추가:떠오르는 사용 사례: 프로세스ㅏmmap은 공유 라이브러리 foo.so의 코드 세그먼트이며 코드(예: 암호화 코드)를 변경합니다. 다른 프로세스를 원해요두번째,씨나중에 만들어서 사용하세요foo.so수정된 코드를 공유합니다. 하지만 변경사항이 다시 기록되는 것을 원하지 않습니다.foo.so문서. 저는 여러 프로세스와 많은 공유 라이브러리에서 작동하는 확장 가능한 솔루션을 선호합니다.
답변1
너무 길어요;dr;RAM에만 존재하는 파일을 사용해야 합니다
memfd_create(2)
Linux에서와 마찬가지로 파일 시스템은 파일 시스템을 통해 파일을 열어 반환되는 파일입니다 tmpfs
[1].
이 경우 메모리는교환일반 파일이나 장치 대신 - 교환이 구성된 경우. 파일이 크면 시스템에 스트레스를 주고 성능이 심각하게 저하되므로 아무런 이점도 없습니다.
참고: "비밀"이 실수로 영구 저장소에 기록되는 것이 걱정된다면 시스템에 사용할 수 있는 암호화된 저장소 솔루션이 무엇인지 더 잘 이해하십시오.
[1] shm_open(3)
간단히 /dev/shm
.