Thrashing 과 frame 할당
Thrashing이란 프로세스의 수가 많아질수록 처리량은 올라가지만, 너무 많아지면 어느 순간 처리량이 급격하게 떨어지는 형상을 말한다. 프로세스의 수가 많아지면 각 프로세스에 할당되는 프레임 수가 줄어들어 page fault가 빈번하게 발생하게 된다. fault를 처리하느라 많은 시간이 소요되어 시스템 전체의 성능이 저하되게 되는 것이다.
Thrashing을 해결하기 위해서 적절한 수의 frame를 프로세스에 할당해주는데, 이를 위해서 locality model을 사용한다. 프로그램에서 루프를 사용하면 동일한 코드와 Table에 접근하게 되고 루프를 빠져나오면 사용하지 않는다. 프로그램이 sequential과 loop를 반복하여 진행하는 특성 때문에 발생하는 이 특징을 이용한다. frame의 갯수를 어떻게 결정하는지 여러 모델들에 대해서 알아보자.
1. Working Set Model
몇 개의 frame을 할당하는 것이 좋을 지 결정하기 위한 모델 중 하나이다. 특정 시간(∆)을 정해두고, 그 시간 이전까지 사용한 프레임만 가지고 있는 방법이다.
델타(∆)값만 잘 정해준다면 적절한 minimum을 결정해 줄 수 있다. 하지만 이 방법은 오버헤드가 크다는 단점이 있다. 좀더 실전적인 방법을 살펴보자.
2. Page Fault Frequency
Page Fault가 발생하였을 때, 한 프레임만 할당하는 것이 아니라 적절한 개수의 프레임을 한꺼번에 할당해 주는 방법이다. 그 다음부터는 루프를 돈다 하면 한동안 아무 문제없이 사용할 수 있다는 것이다. 이론적으로 working set model은 잘 작동하지만 오버헤드가 크기 때문에 보다 실전적인 방법으로 page fault frequency (PFF)를 사용한다.
세로 축이 page fault rate를 나타내고, 가로축이 프로세스에 할당된 frame의 개수를 나타낸다. page fault의 개수가 lower bound보다 작아지면 더 이상 프레임을 주지 않는다. 상한선과 하한선을 정해 둔다.
3. Memory Compression
모바일 장비에서 사용하는 기법으로, 프레임이 부족할 때 대형시스템에서는 swapping방법을 사용해 메모리의 내용을 임시로 디스크에 저장하는데, 모바일 장치에서는 디스크를 사용하지 않으므로 일시적으로 메모리를 확보하기 위해서 사용하는 방법이다. 여러 군데의 내용을 한 군데에 압축해서 저장하는 방법이다.
free frame이 6개가 있었는데, 조금 더 확보하기 위해서, 15, 3, 35를 압축해서 7에 압축하는 모습이다. 하지만 7번은compressed frame list에 들어간 것을 볼 수 있다. 안드로이드와 iOS등 모바일 장비에서 사용한다. 압축 비율이 높을수록 좋은 알고리즘이다. 오버헤드가 발생하지 않는 적절한 압축 비율은 30~50%이다. 알고리즘이 좋으면 더 많은 압축을 할 수 있지만 오버헤드가 커진다.
이미지 출처: operating system concept