2014-07-25 4 views
2

4GB 램이 장착 된 시스템에서 작업하고 있습니다. 나는 4GB의 대용량 파일을 생성하고 그것을 0으로 초기화했다.대용량 파일을 읽는 중 페이지 오류가 발생했습니다.

정수로 큰 파일 정수를 읽기 시작했습니다.

페이지 폴트 (메이저)의 수는 파일의 크기와 상관없이 0입니다.

파일 설명자와 FILE 포인터를 모두 사용하여 파일을 읽었습니다. 두 경우 모두 페이지 폴트 (major)를 찾지 못했습니다.

왜 그렇습니까? 내부 스와핑이 발생하는 경우에만 프로그램의 페이지 오류가 발생합니까?

그렇다면 페이지 오류가 발생할 C 프로그램을 제안 할 수 있습니다.

나는 우분투 12.04에 내 컴퓨터의 사양을하고 있어요 : 4 기가 바이트 램, 500기가바이트 Hardisk

감사합니다 사전에 가상 메모리 데이터를 에 액세스하려고 할 때

+0

mmap을 사용하여 파일 읽기 – DoxyLover

+0

여기에는 파일이 관련이 없습니다. 페이지 폴트를 보려면 많은 양의 가상 메모리에 액세스해야합니다. 이 기억이 어디서 오는지는 중요하지 않습니다. mmap을 사용하여 매핑하거나 malloc을 사용하여 할당 할 수 있습니다. –

답변

2

페이지 오류가 발생하고 외설 ' RAM에서 사용할 수 없습니다. read() 또는 fscanf()과 같은 입출력 기능을 사용하여 파일을 읽는 것은 그렇게하지 않습니다. 가상 메모리 액세스가 아닌 디스크의 파일 내용을 직접 요청하고 있습니다.

mmap()을 사용하여 가상 메모리에 파일을 매핑 한 다음 해당 메모리에 액세스하려고하면 파일 내용이 다음과 같이 표시됩니다 자동으로로드됩니다.