[ Working-Set ]
프로그램들이 메모리에서 원활하게 실행이 되려면 어느 정도의 Page Frame을 갖고 있어야 한다.
또한, 프로그램은 특정 시간에는 특정 메모리 위치만 집중적으로 참조하는 특징이 있다. (Reference의 Locality)
예를 들어, for Loop가 실행이 되고 있는 동안에는 Loop를 구성하는 페이지만 집중적으로 참조가 된다.
프로그램이 실행이 되면 함수 구조로 되어있는데, 그 함수를 구성하는 페이지만 집중적으로 참조한다.
Working Set은 적어도 한꺼번에 올라와 있도록 보장해 줘야 Page Fault가 자주 발생하지 않는다.
동시에 너무 많은 프로그램들이 메모리에 올라가 있으면 Working Set을 보장할 수 없는 상태가 된다.
예를 들어, Working Set이 다섯 개의 페이지로 구성되어 있지만, 할당할 수 있는 페이지가 세 개라고 해보자.
이럴 때에는 페이지 세 개만 받는 게 아니라 다섯 개가 필요하기 때문에 모든 페이지를 반납하며 페이지 다섯 개를 줄 때까지 받지 않는다.
Working Set이 한꺼번에 메모리에 올라가는 게 보장이 되지 않는다면 메모리를 통째로 빼앗아 버리며, 이런 상태가 되면 프로그램은 Suspanded 상태가 된다.
✓ Locality of reference
- 프로세스는 특정 시간 동안 일정 장소만을 집중적으로 참조한다.
- 집중적으로 참조되는 해당 Page들의 집합을 Locality Set이라 한다.
✓ Working-set Model
- Locality에 기반하여 프로세스가 일정 시간 동안 원활히 수행되기 위해 한꺼번에 메모리에 올라와 있어야 하는 page들의 집합을 Working Set이라 한다.
- Working Set 모델에서는 Process의 Working set 전체가 메모리에 올라와 있어야 수행되고 그렇지 않을 경우 모든 Frame을 반납한 후 Swap Out (Suspend)
- Thrashing을 방지한다.
- Multiprogramming Degree를 결정한다.
● Working-Set Algorithm
프로그래머가 동시에 메모리에 올라가 있으면 좋은 페이지들을 알면 그 페이지들을 올리면 되는데 그걸 모르기 때문에 과거를 통해서 추정을 한다.
이 프로그램이 과거 델타 시간 동안 참조한 페이지들을 Working-Set으로 간주하고,
과거 델타 시간 동안 참조된 페이지들은 내쫓지 않고 메모리에 유지를 한다. 이 델타 시간을 Window라고 한다.
현재 시점 t1이라고 하면 Window 사이즈만큼 (여기서는 10) 메모리에 올려놓는다.
과거에 참조한 10개의 페이지를 확인 후, 서로 다른 페이지들을 나열한다.
t1 시점에서 페이지들을 나열해 보면 {1,2,5,6,7}이며, t1에서 이 다섯 개의 페이지가 이 프로그램의 Working-Set이다.
이 프로그램한테 다섯 개의 페이지 프레임을 줄 수 있으면 해당 페이지를 메모리에 올려놓고,
메모리 공간이 부족해서 다섯 개 페이지를 다 주지 못하면 전부 다 디스크로 Swap Out 시키고 Suspend 상태로 바뀐다.
Working-Set의 크기는 그때그때 바뀐다. t2 시점에는 두 개의 페이지만 할당시켜 주면 Working-Set을 만족한다.
참조된 페이지를 델타 시간 동안 메모리에 유지하다가 버리고,
Working Set이 보장이 되지 않을 경우에는 Swap Out 시켜서 적어도 메모리에 남아있는 프로그램만이라도 Working-Set을 보장받게 해 준다.
나중에 메모리에 여유가 생겨 Working-Set이 전부 보장될 때, 이 프로그램을 메모리에 올려놓게 된다 Working-Set 알고리즘은 멀티프로그래밍 Degree를 조절하면서 Working-Set을 메모리에 보장하게 된다.