인프런 커뮤니티 질문&답변

11 1님의 프로필 이미지
11 1

작성한 질문수

곰책으로 쉽게 배우는 최소한의 운영체제론

페이징 기법의 구현

Page fault 메시지가 나오면 스왑 인, 스왑 아웃은 일어나지 않는 건가요?

해결된 질문

작성

·

197

0

12:40 부분에서

*pszResult = 'A';를 하고

pszResult에 저장된 주소가 51이고 페이지 5에 있다고 가정하시는 부분에서 궁금한 점이 있습니다.

 

페이지 테이블의 5번에 invalid라고 되어 있어서 Page fault 에러 메시지가 나온다고 하셨는데

이런 경우 찾는 데이터를 스왑 영역에서 물리 메모리로 가져 온 후, 잘 안 쓰는 데이터를 스왑 영역으로 보낼 줄 알았는데

 

에러 메시지가 뜬다는 것은 스왑 인, 스왑 아웃이 일어나지 않았다는 건가요?

스왑 인, 스왑 아웃이 일어나지 않고 에러 메시지가 나는 이유는 무엇인가요? 스왑 인, 스왑 아웃이 일어날 때와, 일어나지 않을 때가 따로 구분되어 있나요?

 

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

가상 메모리 상의 모든 주소에 대해 실제 메모리가 매핑되어 있지 않습니다. 변수를 선언하든 동적할당을 통해 얻든 주소와 실제 메모리가 매핑 되어야 사용할 수 있습니다. C언어의 가장 큰 문제는 그러한 사실을 무시하고 어디든 포인터로 접근이 된다는 것입니다. 자유도가 지나칠 정도로 높습니다.

메모리가 부족해 특정 영역이 보조 기억장치로 Page-out이 됐다하여 Page fault가 발생하지는 않습니다. 응용 프로그램이 접근을 시도하면 다시 Page-in 해주니까요. Page fault는 아예 매핑조차 되지 않은 영역에 접근하는 경우에 발생합니다. 참고하시기 바랍니다. :)

11 1님의 프로필 이미지
11 1
질문자

답변 감사합니다.

11 1님의 프로필 이미지
11 1

작성한 질문수

질문하기