스래싱(Thrashing)

Minkyung Park ·2022년 3월 29일
0

[링크텍스트]( 출처: https://zangzangs.tistory.com/144 [장장스])

프로세스가 원활하게 수행되기 위해서는 일정 수준 이상의 페이지 프레임을 물리적 메모리에 할당 받아야 합니다. 프로세스가 동작하는데 필요한 최소한의 페이지 프레임을 받지 못한다면 성능에 문제가 발생할 수 있습니다.

스레싱(thrashing)

프로세스가 집중적으로 사용하는 페이지들의 집합이 메모리에 한꺼번에 적재되지 못하여 페이지 부재율(page fault)가 많이 발생하게 되고 CPU 이용율이 급격히 떨어지는 현상을 스레싱이라고 합니다.

CPU 이용율이 낮다는 것은 메모리에 올라와 있는 프로세스의 수가 너무 적어 프로세스가 모두 I/O작업을 함으로써 준비 큐가 비는 경우가 발생했다는 것입니다. 따라서 CPU 이용율이 낮으면 운영체제는 메모리에 올라가는 프로세스의 수를 늘리게 됩니다. 우리는 메모리에 동시에 올라가 있는 프로세스의 수를 다중 프로그래밍의 정도(MPD: Multi-Programming Degree) 라고 부릅니다.

운영체제는 CPU 이용률이 낮으면 MPD를 높입니다. 그러나 과도하게 MPD가 높아지면 프로세스에게 할당되는 메모리의 양이 감소하게 될 것입니다. 프로세스가 원활하게 수행하려면 필요한 최소한의 페이지 프레임들이 있습니다. 그러면 각 프로세스는 수행에 필요한 최소한의 페이지 프레임도 할당 받지 못하게 되어 페이지 부재가 빈번히 발생하게 될 것입니다. 페이지 부재가 발생하면 스왑 영역에서 해당 페이지를 메모리로 가져오기 위해 디스크 I/O 작업이 발생하고 문맥 교환을 통해 다른 프로세스에게 CPU가 이양 됩니다.

이 때 다른 프로세스 역시 할당 받은 메모리 양이 지나치게 적으면 페이지 부재가 발생할 수밖에 없게 됩니다. 그러면 또 다른 프로세스에게 CPU가 할당된다. 결국에는 준비 큐에 있는 모든 프로세스에게 CPU가 한 차례씩 할당되었는데도 모든 프로세스가 다 페이지 부재를 발생시켜 시스템은 페이지 부재를 처리하느라 매우 분주해지고 CPU 이용률은 급격히 떨어지게 된다. 이 상황에서 운영체제는 메모리에 올라와 있는 프로세스의 수가 적어 이러한 현상이 발생했다고 판단하고, MPD를 높이기 위해 또 다른 프로세스를 메모리에 추가하게 된다. 이로 인해 프로세스당 할당된 프레임의 수가 더욱 감소하고 페이지 부재는 더욱 빈번히 발생하게 된다. 이 경우 프로세스들은 서로의 페이지를 교체하며 스왑 인(swap in)과 스왑 아웃(swap out)을 지속적으로 발생시키고, CPU는 대부분의 시간에 일을 하지 않게 됩니다.

스레싱 발생 방지 알고리즘

MPD를 적절히 조절하여 CPU 이용률을 높이면서 스레싱이 발생하는 것을 막는 방법으로 워킹셋 알고리즘과 페이지 부재 빈도 알고리즘이 있습니다.

워킹셋 알고리즘

프로세스가 일정 시간 동안 집중적으로 특정 주소 영역을 참조하는 경향이 있는데 이를 지역성 집합이라고 합니. 워킹셋 알고리즘은 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 알고리즘입니다.

워킹셋은 한꺼번에 메모리에 올라가야 하는 페이지들의 집합입니다. 워킹셋 알고리즘은 프로세스의 워킹셋을 구성하는 페이지들이 한꺼번에 올라갈 수 있을 메모리 공간이 있을 때만 동작합니다. 그렇지 않으면 기존 메모리에 존재하는 페이지를 디스크로 스왑 아웃 시켜 공간을 확보합니다. 이러한 방법으로 MPD를 조절하고 스레싱을 방지하게 됩니다.

워킹셋 알고리즘에서 한꺼번에 메모리에 올라가야 할 페이지들의 집합을 결정하기 위해 워킹셋 윈도우를 사용합니다. 윈도우의 크기를 Δ라고 합니다, 워킹셋 알고리즘은 시각 t에서 Δ이전에 참조된 [Δ-t, t] 사이에 참조된 페이지들의 집합으로 결정한다.

워킹셋 윈도우의 크기를 조절하여 워킹셋의 크기를 조절하는 방법으로 프로세스가 메모리를 필요로 할때는 많이 할당하고 적게 필요로 할 때에는 적게 할당하는 동적인 프레임 할당 기능을 수행하게 됩니다.

페이지 부재 빈도 알고리즘

프로세스의 페이지 부재율을 주기적으로 조사하고 이 값에 근거해서 각 프로세스에 할당할 메모리 양을 동적으로 조절하는 알고리즘입니다. 시스템이 미리 정해 놓은 상한값(upper bound)을 넘어가거나 하한값(lower bound)이하로 떨어지게 되면 운영체제가 메모리에 올라가 있는 프로세스의 수를 조절하게 됩니다.

0개의 댓글