더북(TheBook)


6.7페이지 폴트


페이지 폴트(page fault)는 CPU가 요청한 페이지가 메인 메모리에 없을 때 발생합니다. 이는 유효 비트를 확인하면 알 수 있는데, 유효 비트가 0이면 메인 메모리에 존재하지 않는 것입니다. 페이지 폴트가 발생하면 해당 페이지를 하드디스크에서 가져와 빈 프레임에 할당하면 됩니다.

이때 메인 메모리에 빈 프레임이 없다면 어떻게 할까요? 페이지 교체 알고리즘에 의해 메인 메모리에 있는 페이지를 하드디스크로 내리고 요청된 페이지를 메인 메모리로 올립니다. 이때 페이지 교체 알고리즘에 의해 메인 메모리에서 하드디스크로 내려지는 페이지를 희생 페이지(victim page), 페이지를 메인 메모리에서 하드디스크로 내리는 것을 페이지-아웃(page-out), 하드디스크에서 메인 메모리로 올리는 것을 페이지-인(page-in)이라고 합니다.

중요한 점은 페이지 폴트가 자주 일어나면 프로그램 성능이 상당히 떨어진다는 점입니다. 데이터를 읽어오는 속도 때문입니다. 앞서 말한 것처럼 메모리에서 데이터를 읽어올 때는 20~100사이클이 걸리지만 하드디스크에서 읽어올 때는 500,000~5,000,000사이클이 걸립니다.

페이지 폴트가 일어날 확률을 줄이려면 지역성을 고려하면서 프로그래밍해야 합니다. 예를 들어 프로그램에서 데이터를 저장할 때 연결 리스트 자료 구조를 사용했더니 메모리 단편화가 심하게 발생해 관련 데이터가 멀리 흩어지면서 페이지 폴트가 빈번하게 발생해 성능이 떨어질 수 있습니다. 이럴 때는 자료 구조를 배열로 변경하면 문제를 어느 정도 해결할 수 있습니다. 하지만 데이터의 특성이 배열을 사용하기 어렵다면 다이내믹 힙(dynamic heap)을 이용해 메모리 단편화를 없애고 지역성을 좋게 만들어 페이지 폴트를 줄일 수 있습니다.


TIP 다이내믹 힙은 프로세스에 기본적으로 할당되는 디폴트 힙 외에 프로그래머가 따로 할당해 만든 힙을 말합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.