해결된 질문
작성
·
197
0
12:40 부분에서
*pszResult = 'A';를 하고
pszResult에 저장된 주소가 51이고 페이지 5에 있다고 가정하시는 부분에서 궁금한 점이 있습니다.
페이지 테이블의 5번에 invalid라고 되어 있어서 Page fault 에러 메시지가 나온다고 하셨는데
이런 경우 찾는 데이터를 스왑 영역에서 물리 메모리로 가져 온 후, 잘 안 쓰는 데이터를 스왑 영역으로 보낼 줄 알았는데
에러 메시지가 뜬다는 것은 스왑 인, 스왑 아웃이 일어나지 않았다는 건가요?
스왑 인, 스왑 아웃이 일어나지 않고 에러 메시지가 나는 이유는 무엇인가요? 스왑 인, 스왑 아웃이 일어날 때와, 일어나지 않을 때가 따로 구분되어 있나요?
답변 1
1
가상 메모리 상의 모든 주소에 대해 실제 메모리가 매핑되어 있지 않습니다. 변수를 선언하든 동적할당을 통해 얻든 주소와 실제 메모리가 매핑 되어야 사용할 수 있습니다. C언어의 가장 큰 문제는 그러한 사실을 무시하고 어디든 포인터로 접근이 된다는 것입니다. 자유도가 지나칠 정도로 높습니다.
메모리가 부족해 특정 영역이 보조 기억장치로 Page-out이 됐다하여 Page fault가 발생하지는 않습니다. 응용 프로그램이 접근을 시도하면 다시 Page-in 해주니까요. Page fault는 아예 매핑조차 되지 않은 영역에 접근하는 경우에 발생합니다. 참고하시기 바랍니다. :)
답변 감사합니다.