[ PFF (Page-Fault Frequency) ]
멀티프로그래밍 Degree를 조절하면서 Thrashing을 방지하는 알고리즘이다.
이 방식은 Working-Set 알고리즘처럼 Working-Set을 추정하는 방식이 아니라 직접 Page Fault Rate을 본다.
현재 시점에 이 시스템에서 Page Fault가 얼마나 일어나는지를 보고, 특정 프로그램이 Page Fault를 얼마나 내는지 본다.
프로그램이 Page Fault를 많이 내고 있으면, 이 프로그램의 Working-Set은 메모리에 보장이 안 되어 있는 상태라고 판단하여 페이지를 더 내어준다.
보통 일반적으로 프로그램에 할당되어 있는 메모리의 크기가 커지면 Page Fault 발생 비율이 줄어든다.
프로그램의 상황에 따라 곡선의 기울기는 다 다르겠지만,
어떤 프로그램의 Page Fault Rate이 일정 수준 이상으로 발생한다고 하면 Working-Set 보장이 안된다고 판단해 Page 수를 더 늘려준다.
그러면 Page Fault Rate이 줄어들어서 어느 정도 이내로 들어올 것이다.
Page 수를 더 늘려줬는데도 Page Fault가 많이 발생하여 메모리를 더 줘야 하는데 더 이상 할당할 메모리가 없으면 그 프로그램은 통째로 Swap Out 시킨다.
메모리에 남아있는 프로그램만이라도 Page Fault Rate이 일정 수준 이하로 떨어지도록 유지시킴으로써 Thrashing을 방지한다.
반대로 어떤 프로그램은 Page Fault가 발생하지 않으면 이 프로그램은 쓸데없이 메모리를 너무 많이 갖고 있는 것이라고 판단해 페이지를 빼앗아서 일정 수준의 Page Fault를 유지하게 한다.
✓ Page size를 감소시키면
- 페이지 수 증가
- 페이지 테이블 크기 증가
- Internal Fragmentation 감소
- Disk Transfer의 효율성 감소 (Seek/Rotation vs Transfer)
- 필요한 정보만 메모리에 올라와 메모리 이용이 효율적 (Locality의 활용 측면에서는 좋지 않음)