2016-12-22 1 views
1

내 메모리보다 큰 데이터 파일로 작업하려고합니다.메모리 매핑 된 파일은 메모리보다 큰 파일에 대해 어떻게 작동합니까?

필자가 지금까지 파일의 모든 바이트를 가상 메모리의 주소에 매핑한다는 것을 이해했습니다. 데이터는 실제 메모리 (예 : 특정 항목 액세스)가 필요할 때만 실제 메모리로 읽혀지고 페이지라고하는 청크로 읽혀집니다.

그러나 결국 데이터 파일에서 모든 것을 처리하려고한다면 결국 모든 것을 실제 메모리로 읽어 들일 필요가 있다는 것을 의미하지는 않습니까? OS가 여분의 데이터를 저장할 여유 공간을 확보하기 위해 이미 메모리에있는 데이터의 어느 부분을 해제할지 결정합니다.

이 프로젝트의 경우, 차이점이 있다면 Linux에서 Python을 사용하고 있습니다. numpy.memmap

+0

실제 메모리보다 크거나 사용 가능한 가상 주소 공간보다 클 수 있습니까? –

답변

1

다릅니다.

메모리 매핑 파일은 메모리와 페이지 파일간에 데이터를 이동하는 대신 메모리와 사용자가 지정한 임의의 파일간에 데이터를 이동한다는 점을 제외하면 거의 동일한 방식으로 작동합니다 (paging).

실제 메모리가 (마더 보드에있는 실제 RAM 칩)을 모두 소모하면 문제가 없습니다. 운영 체제는 사용하지 않을 것으로 생각되는 파일의 부분을 페이지 아웃합니다. 추측을 잘못하면 실적이 좋지 않더라도 충돌이나 문제가 발생하지 않습니다.

그러나 가상 메모리 또는 이 부족하거나 주소 공간이 부족한 경우에는 문제가 없습니다. 이 경우 프로그램에서 메모리 주소가 부족하여 더 이상 메모리를 할당 할 수 없습니다. 또한 파일의 메모리 매핑 영역을 확장 할 수 없습니다. 32 비트 프로그램의 경우 제한은 4GB보다 약간 작습니다 (정확한 제한은 운영 체제 및 프로그래밍 환경에 따라 다르며 해당 시스템의 오버 헤드에 따라 다릅니다). 64 비트 프로그램의 경우 제한은 일반적으로 엄청나지만 아키텍처와 운영 체제에 따라 엄청난 차이가 있습니다.

관련 문제