0.🚶들어가며

이전 글에서 페이지 교체 알고리즘에 대해 알아보았습니다.

 

이번 글에서는 스레싱이 무엇인지, 프로세스에게 프레임 할당하는 방식은 어떤 것이 있는지에 대해 알아보도록 하겠습니다.


1.📖스레싱

가상 메모리 시스템에서는 프로세스들이 프레임을 할당받습니다. 만약 많은 수의 프로세스들이 실행 중이라 각각 프로세스들에게 충분한 수의 프레임을 할당하지 못한다면 어떻게 될까요? 페이지 부재가 많이 발생하여 계속해 스왑 영역을 다녀오는 상황이 생길 것입니다. 이런 상황이 벌어지면 하드디스크 입출력이 너무 잦아져 작업이 멈춘 것 같은 상태가 되어버립니다. 이를 스레싱이라고 합니다. 

 

스레싱은 메모리의 크기가 일정할 경우 멀티프로그래밍 정도에 밀접한 관계가 있습니다. 멀티 프로그래밍 정도가 너무 높으면 스레싱이 발생하는 것이죠. 

 멀티 프로그래밍 정도가 높아지면 CPU는 바쁘게 움직여야 할 것이고 "프로세서 이용률은 높아지겠다"라고 생각하는 것이 직관적입니다. 하지만 프로세스마다 적절한 수의 프레임을 할당받지 못해 페이지 부재가 계속하여 일어나고 이 때문에 디스크 입출력을 계속하게 된다면 CPU 이용률은 오히려 떨어지게 됩니다. 위 사진을 보시면 MPD가 증가할수록 CPU 이용률이 증가하다가 특정 지점부터 스레싱이 발생하여 CPU 이용률이 떨어지는 모습을 확인할 수 있습니다.

 

스레싱은 프로세스에 프레임을 할당하는 문제와 연관이 있음을 알아보았습니다. 프로세스에 프레임을 어떻게 나눠주느냐에 따라 시스템 성능이 달라집니다. 만약 한 프로세스에 너무 많은 프레임을 할당해주어 메모리를 낭비한다면 전반적인 시스템 성능이 낮아지고, 너무 적게 할당하면 페이지 부재가 빈번히 일어나게 됩니다. 따라서 프레임을 어떻게 할당할지는 시스템 성능을 좌우하는 중요한 문제입니다.


2.📚정적 할당

프레임 할당 방식은 크게 정적 할당 동적 할당 방식 두 가지로 나뉩니다. 먼저 정적 할당이 무엇이지 살펴보겠습니다.

 

정적 할당은 프로세스 실행 초기에 프레임을 나누어준 후 그 크기를 고정하는 방식입니다. 크게는 두 가지 방식이 있죠.

1) 균등 할당

균등 할당은 프로세스의 크기와 상관없이 사용 가능한 프레임을 모든 프로세스에 동일하게 할당합니다. 이 방식에서 크기가 큰 프로세스는 크기에 비례한 프레임을 할당받지 못해 상대적으로 적은 프레임을 할당받은 효과를 가집니다. 또 크기가 작은 프로세스의 경우 크기에 비해 많은 프레임을 할당받은 상황이 되는 것이죠. 간단한 방식이지만 불합리한 부분이 보입니다.

2) 비례 할당

비례 할당은 균등 할당의 문제를 해결하기 위해 프로세스 크기의 비례하여 프레임을 할당하는 방식입니다. 사용 가능한 프레임을 프로세스 크기 별 비율로 나눠 할당해주는 것이죠. 합리적으로 보입니다. 하지만 이러한 방식에도 문제가 조금 있습니다.

 

✅첫 번째 문제는 프로세스가 실행 중 필요로 하는 프레임을 유동적으로 반영하지 못한다는 점입니다. 비디오 플레이어 같은 프로그램의 경우 프로세스의 크기는 작지만 실행 중에 많은 프레임을 필요로 합니다. 이렇듯 실행 중에 메모리 요구가 많아지는 프로세스의 경우를 반영해주지 못합니다.

 

✅두 번째 문제는 사용하지 않는 메모리를 처음부터 미리 확보하여 공간을 낭비하게 된다는 점입니다. 요구 페이징 방식에서는 아무리 큰 프로세스라도 처음부터 모든 정보를 메모리에 올리지 않습니다. 굳이 당장 쓰지 않아도 되는 정보는 메모리에 둘 필요가 없기 때문이죠. 하지만 비례 할당 방식에서는 이러한 사항을 고려하지 않습니다.

 


3.📃동적 할당

위에서 살펴본 바와 같이 정적 할당 방식은 프로세스를 실행하는 초기에 프레임을 할당합니다. 따라서 프로세스가 실행되는 동안의 메모리 요구를 반영하지 못합니다.

 

이러한 요청을 수용하는 방식이 동적 할당 방식입니다. 동적 할당 방식도 크게 두 가지 방식이 있습니다.

1) 워킹셋 모델 (Working set model)

워킹셋 모델은 지역성 이론을 바탕으로 합니다. 최근에 접근한 프레임은 이후에도 또 참조될 가능성이 높다는 가정이죠. 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고 이 집합에 있는 페이지들을 메모리에 유지하여 프로세스의 실행을 돕습니다.

 

워킹셋 모델

워킹셋 모델에서 워킹셋은 메모리에 유지할 페이지들의 집합입니다. 위 사진에서는 WS로 나타납니다. 또한 워킹셋에 포함되는 페이지의 범위를 워킹셋 윈도우(Working set window)라고 합니다. 현재 시점에 최대 어느 범위까지의 페이지를 살펴볼 것인가를 결정하는 것입니다. 위 사진에서는 델타로 표현되었네요. 

 

위 사진 예시를 좀 더 자세히 살펴보죠. 예시는 워킹셋 크기를 5, 윈도우 크기를 10으로 설정한 예시입니다.

 

워킹셋의 크기는 워킹셋에 들어갈 최대 페이지 수를 말하지만 이는 곧 얼마나 자주 워킹셋을 갱신할 것인지도 의미합니다. 워킹셋 크기가 5라는 것은 페이지에 다섯 번 접근할 때마다 워킹셋을 갱신한다는 의미이기도 하기 때문입니다. 

 

t1 이후 워킹 셋 크기가 5이기 때문에 t2에 도달했을 때 워킹셋이 갱신됩니다. 페이지 5개에 접근했기 때문이죠. 이때 워킹셋 윈도우 크기는 10으로 잡아놨기 때문에 t2 시점 10개의 이전 페이지들을 살펴보고 WS(t2)를 갱신합니다. 워킹셋은 현재 시점부터 가장 최근에 접근했던 페이지 순으로 집합에 집어넣는다는 점을 유의해주세요!

 

WS(t3) 역시 같은 방법으로 갱신했으니 차근차근 살펴보시길 바랍니다.

 

 

워킹셋 모델에서는 윈도우 크기에 따라 프로세스 실행 성능이 달라집니다. 윈도우를 너무 크게 잡으면 필요 없는 페이지가 메모리에 남아 다른 프로세스에 영향을 주죠. 즉, 지역성을 무시하게 됩니다. 반대로 너무 작게 잡으면 필요한 페이지가 스왑 영역으로 옮겨져 프로세스 성능이 떨어집니다.

2) 페이지 부재 빈도 이용

워킹셋 모델에서는 어떤 페이지를 물리 메모리에 유지해야 할지는 알고 있지만 프로세스마다 얼마나 프레임을 할당해주어야 할지는 결정하지 못합니다. 프로세스 성능은 높일 수 있지만 스레싱 문제는 해결할 수 없는 것이죠.

 

프로세스에 할당해야 하는 프레임의 양을 동적으로 결정할 수 있는 방법을 제공해주는 것이 페이지 부재 빈도를 이용하는 것입니다.

페이지 부재 빈도 이용법

위 사진을 참고하면 페이지 부재 횟수를 기록하여 페이지 부재 비율을 계산해 이를 이용하는 방식임을 확인할 수 있습니다. 페이지 부재 비율을 이용하여 일정 수준 이상의 페이지 부재가 일어난다면 프로세스에게 프레임을 더 할당해주어야 한다는 의미가 되고 이에 응해줍니다. 반대로 페이지 부재가 일정 수준 이하로 일어난다면 프레임이 과할당되어 메모리 낭비가 일어나고 있다는 신호이고, 이에 맞춰 할당된 프레임을 회수하게 됩니다. 


4.💨나가며

여러 글에 나눠 가상 메모리 글을 작성했고 스레싱과 프레임 할당을 끝으로 내용을 마무리하였습니다. 쉽지 않은 내용이었는데 상세한 내용에 집착하기보단 전체적인 흐름과 개념의 탄생 이유, 특정 방법의 단점을 어떻게 보완해 나아가는가를 집중해 살펴보았습니다.

 

단점을 보완하는 과정에서도 항상 트레이드오프 하는 것을 보며 컴퓨터 공학에서는 쉽게 얻어지는 게 하나없음을 배우는 것 같습니다. 또한 모든 상황에서 정답이라고 부를 만한 방법은 존재하지 않아 항상 상황에 맞는 방법을 고려하고 찾는 것이 중요하구나를 느끼게 되는 것 같습니다.

 

반응형
복사했습니다!