가상 메모리 쓰레싱(Thrashing)

By 01/11/2018OS Concept

가상 메모리 쓰레싱(Thrashing)

 

어떤 프로세스에게 할당된 프레임 수가 명령어 집합 아키텍처(instruction set architecture)가 요구하는 최소한의 수보다 적게 되면 그 프로세스는 실행을 한 동안 일시 중단(suspend)하여야 한다. 프로세스의 모든 페이지를 포기하고 다른 프로세스들에게 넘겨 주는 스왑인(swap in), 스왑아웃(swap out) 단위의 CPU 스케줄링이 필요하다.

 

프레임을 충분히 할당 받지 못한 프로세스는 페이지 부재가 발생한다. 이때 페이지 교체가 발생하지만 이미 활발하게 사용되는 페이지들만으로 이루어져 있으면 어떤 페이지가 교체되든 바로 다시 필요해질 것이다. 이런 상황이 반복해서 페이지 부재가 과도하게 발생하는 것을 쓰레싱(thrashing)이라 한다. 즉 어떤 프로세스가 실제 실행 시간보다 더 많은 시간을 페이징에 사용하고 있을 경우 쓰레싱이 발생했다고 한다.

 

[쓰레싱 원인]

쓰레싱이 일어나는 이유는 CPU 스케줄러와 관련 된다. CPU 스케줄러는 이용률이 떨어지는 것을 보고 이용률을 높이기 위해 새로운 프로세스를 추가하여 다중 프로그래밍의 정도를 높인다. 새로 시작하는 프로세스는 실행중인 프로세스들로부터 프레임을 가져오고자 하며 더 많은 페이지 부재와 더 긴 페이징 장치 대기 시간을 발생시킨다.

결과적으로 CPU 이용률은 더 떨어지고 CPU 스케줄러는 다중 프로그램밍 정도를 더욱 높이려 한다. 결국 쓰레싱이 일어나게 되어 시스템 처리율은 낮아지고 페이지 부재는 늘어난다. 실질 메모리 접근 시간은 늘어나고 페이징을 하는데 시간을 다 소비하게 되어 결국엔 아무런 일도 할 수 없게 된다.

 

쓰레싱은 지역 교환 알고리즘(local)이나 우선순위 교환 알고리즘을 사용하여 제한 할 수 있다. 지역성 모델이란 프로세스가 실행될 때에는 항상 어떤 특정한 지역에서만 메모리를 집중적으로 참조함을 말한다.

지역 교환 알고리즘은 한 프로세스가 쓰레싱을 유발하더라도 다른 프로세스로부터 프레임을 뺏어 올 수 없으므로 다른 프로세스는 쓰레싱으로부터 자유로울 수 있다. 그러나 쓰레싱이 일단 시작되면 여러 프로세스가 대부분의 시간을 디스크 큐에서 보내게 되므로 쓰레싱과 관련이 없었던 프로세스도 디스크 입/출력 시간이 오래 걸린다.

 

이러한 문제를 방지 하기 위하여 모델을 이용한다. 작업 집합 모델은 지역성을 토대로 하고 있으며 개념적으로 작업 집합 창(working set window)을 가지고 있는 것과 같다.

 

 

[작업 집합 모델(working set model)]

작업 집합 모델은 최근 참조한 페이지를 관찰하고 한 프로세스가 그 페이지를 참조했다면 그 안에 들어있는 서로 다른 페이지들의 집합을 작업 집합으로 하여 더 이상 페이지가 사용되지 않는다면 작업 집합 에서 제외되며 프로그램 지역성의 근사값이 된다.

 

운영체제는 각 프로세스의 작업 집합을 감시하면서 각 프로세스에게 작업 집합 크기에 맞는 충분한 프레임을 할당한다. 이렇게 할당하고도 여분의 놀고 있는 프레임이 있다면 또 새로운 프로세스를 시작시킬 수 있다. 그러나 실행중인 프로세스의 수가 너무 많아지면 운영체제는 프로세스들 중 하나를 선택하여 그 프로세스의 페이지를 빼앗거나 연기시켜 그 프레임을 다른 프로세스에게 할당 한다. 중단된 프로세스는 후에 다시 실행이 재개 된다. 이 방법은 쓰레싱을 방지하고 CPU의 이용률을 최적화 한다.

 

작업 집합 모델의 어려운 점은 작업 집합을 추적하는 일이다. 작업 집합은 메모리 참조마다 한쪽에서 새로운 페이지들이 추가 되고 다른 한쪽에서는 오래된 참조 페이지부터 제외 된다. 이를 효율적으로 관리하기 위해 일정 간격 타이머 인터럽트(fixed interval timer interrupt)와 참조 비트(reference bit)를 쓰면 어느 정도 유사한 모델을 근사할 수 있다.

하지만 이 방법 또한 어느 페이지가 사용되었는지 근사치를 알 뿐 정확하지는 않다. 그래서 과거 기억 비트 수를 늘리고 타이머 인터럽트 빈도를 높이면 불확실성을 줄일 수 있지만 자주 발생 하는 인터럽트 처리의 오버헤드는 증가한다.

 

 

[페이지 부재 빈도(PFF, Page Fault Frequency)]

작업 집합 모델은 프리페이징(prepaging)시에도 유용하지만 쓰레싱을 조절하는 방법에는 페이지 부재 빈도 방식이 더 직접적으로 쓰레싱을 조절 한다.

 

쓰레싱은 페이지 부재율을 높다는 것을 의미하는데 우리가 원하는 것은 부재율을 조절하는 것이다. 부재율이 더 높으면 더 많은 프로세스가 더 많은 프레임을 필요로 한다는 의미이고 페이지 부재율이 너무 낮으면 프로세스가 너무 많은 프레임을 갖고 있다는 것을 의미한다. 따라서 페이지 부재율의 상한과 하한을 정해 놓고 만약 페이지 부재율이 상한을 넘으면 그 프로세스에게 프레임을 더 할당해 주고 하한보다 낮으면 그 프로세스의 프레임 수를 줄인다. 이렇게 직접적으로 부재율을 관찰하고 관리함으로써 쓰레싱을 방지 할 수 있다.

 

일부 프로세스들은 잠시 중단되어야 하는 상황일 수 있다. 만약 페이지 부재율이 높아졌는데 그 프로세스에게 할당 할 수 있는 프레임이 없으면 한 프로세스를 선택하여 그 프로세스를 연기 시켜야 한다. 이렇게 되면 그 프로세스에게 할당되었던 프레임은 높은 부재율을 가지고 있는 다른 프로세스에게 분배 된다.

 

 

[참고자료]

Operating System Concepts

 

operationsystem, 운영체제, 운영체제구조, 컴퓨터구조, OSConcept, 가상메모리, 페이지교체, 프레임할당, 쓰레싱, pagefault, sqlmvp, SQL Angeles