2013-06-10 9 views
2

메모리 매핑 된 파일, 즉 메모리에 투명하게 매핑 된 디스크의 실제 파일을 사용할 수 있음을 알고 있습니다. 내가 이해할 수있는 한 (아직은 사용하지 않았다.) 매핑은 즉각적으로 이루어지며, OS가 백그라운드에서 전체 파일을 "캐싱"하는 동안 파일은 부분적으로 첫 번째 메모리 액세스에서 읽혀집니다.메모리 매핑 된 메모리가 가능합니까?

지금 :이 개념을 다소 남용하고 다른 메모리 블록을 메모리 맵핑 할 수 있습니까? OS가 이러한 간접 지정을 제공한다고 가정하면 메모리에서 메모리로 매핑을 반환하는 종류 인 compressed_malloc()을 만들 수 있습니다. 호출자에게 반환 된 메모리는 메모리에서 투명하게 압축되고 결국 메모리에 유지되는 메모리 매핑 된 범위가 단순합니다. 따라서 큰 버퍼의 경우 나머지 블록이 압축 된 상태에서 일부만이 온 - 더 - 플라이 (액세스시)로 압축 해제 될 수 있습니다.

그 개념은 기술적으로 현재 순간에 가능합니까 - 이미 실현 된 경우 (소프트웨어에서) - 무엇을 볼 것입니까?

업데이트 1 : 나는 OS 커널 자체를 수정하지 않고 기술적으로 달성 할 수있는 것을 찾고 있거나 가상화 플랫폼을 필요로합니다.

업데이트 2 : 내 자신의 사용자 공간 코드에서 압축 및 관련 논리를 구현할 수있는 무언가가 필요합니다. 난 단지 운영 체제의 기능을 사용하여 메모리 매핑을 만들 것입니다.

+0

많은 최신 파일 시스템은 투명 압축 (NTFS, ZFS 등)을 지원합니다. 그것이 메모리 맵핑과 어떻게 상호 작용하는지, 나는 확실하지 않지만, 그것이 당신이 찾고있는 것일 수있다. – zindorsky

+0

아니요, 파일을 만들고 싶지 않습니다. 어쨌든. 메모리 전체 메모리 매핑 된 메모리 (따라서 이름) 유지하고 사용 후 릴리스 싶습니다. – Stefan

답변

2

매우 그렇습니다. VM (가상 메모리) 시스템은 매핑 할 수있는 여러 종류의 객체를 처리하도록 설계되었습니다. 실제로 파일 시스템 호출 cramfs은 압축 된 데이터를 저장소에 보관하지만 투명하고 압축되지 않은 액세스를 가능하게한다는 의미에서 유사한 작업을 수행합니다.

커널 자체는 수정하지 않지만이 새로운 종류의 메모리 매핑 된 객체에 VM 처리기를 구현하면 커널 공간에서 작업해야합니다.

+0

고마워요, 꽤 흥미 롭습니다. 그러나 (1) 읽기 전용 인 것 같습니다 (쓰기가 가능하다는 증거는 아닙니다). (2) 다소 저급하다고 느낍니다. 내 자신의 사용자 공간 코드에서 압축 및 논리를 구현하고 운영 체제의 기능을 사용하여 메모리 매핑을 만드는 무언가를 기대하고있었습니다. – Stefan

+0

오른쪽. Cramfs는 당신이 원하는 것이 아닙니다. 방금 언급 한 내용과 비슷하게 압축 된 콘텐츠 용으로 VM 시스템을 사용하기 때문에 언급했습니다. 나는이 모든 것을 투명하게 사용자 공간에서 처리하는 방법을 생각할 수 없다. 적어도 드라이버를 작성하고이를위한 mmap 인터페이스를 구현해야합니다. 그러나 드라이버를 작성하는 것은 꽤 표준적인 작업입니다. 실제로 커널을 수정하는 것과 같지 않습니다. – Ziffusion

+0

어쩌면 나는 오해가 있었다. 나는 [boost :: iostreams] (http://www.boost.org/doc/libs/1_53_0/libs/iostreams/doc/classes/mapped_file.html)와 같은 소프트웨어가 일반적인 기능을 사용하지만 X를 메모리 범위에 맵핑한다. 아마도 _file_을 메모리 범위에 매핑하는 것은 OS의 특정 기능 일 것입니다. – Stefan

1

이것은 가능합니다. http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.resourcemanagement.doc_41/managing_memory_resources/c_memory_compression.html

Linux의 커널 공간에는 올바르게 구현되지 않았지만 이와 유사한 내용이 사용자 공간에 구현 될 수 있습니다.

+0

우프, 알았어. 미리 명확하게 알지는 못했지만, 커널 자체를 수정하는 것보다 덜 관입적 인 것으로 생각했습니다. – Stefan

관련 문제