-
스레싱(thrashing)이란 무엇인가CS지식/운영체제 2021. 7. 13. 23:17
우리는 컴퓨터에서 실제 물리 메모리 이외에 프로세스만의 가상 메모리를 사용하며 주소 변환을 통해 물리 메모리에 접근한다고 배웠다.
또한, 페이징 기법이나 세그멘테이션 기법을 통해 나뉘어진 조각들은 물리 메모리에 위치할 수도 있고 스왑영역에 위치할 수도 있다는 것을 배웠다.
하나의 프로세스가 작업 중이라고 해서 프로세스의 전체 데이터가 물리 메모리의 전체 영역에 할당되는 것은 비효율적이기때문에 그때 그때 필요한 부분만 물리 메모리에 올리고 쓸 일이 없는 부분은 스왑영역에 올려 메모리 관리를 효율적으로 진행한다.
현재 CPU를 점유하고 있는 프로세스가 필요로 하는 데이터가 물리 메모리에 없다면 swap in과 swap out을 통해 필요한 데이터를 스왑영역에서 물리 메모리에 올리고 물리 메모리에 있던 어떠한 데이터는 스왑 영역으로 가게 될 것이다.
여기서, 프로세스가 필요로 하는 데이터를 요청했을 때 물리 메모리에 위치해있지 않은 경우를 페이지 부재(page fault)라고 한다.
그러면 오늘 정리한 스레싱(thrashing)이란 무엇일까?
스레싱(thrashing)은 하드디스크의 입출력이 너무 많아져서 잣은 페이지 부재로 마치 작업이 멈춘 것 같은 상태를 말한다.
즉, 한 번에 여러 개의 프로그램을 실행하게 되면 물리 메모리에서는 프로세스들이 필요로 하는 데이터를 올리기 위한 공간이 충분하지 않다면 열심히 swap in, swap out을 하게 될 것이다.
이러한 과정이 반복되면서 정상적으로 동작하지 않는 것처럼 보이게 될 수 있는데 이를 스레시이라고 하는 것이다.
스레싱(thrashing)은 메모리의 크기가 일정할 경우 멀티프로그램의 수와 밀접한 관계가 있다.
동시에 실행하는 프로그램의 수를 degree of multiprogramming라고 하는데 degree of multiprogramming가 너무 높으면 스레싱이 발생한다.
스레싱(thrashing)은 각 프로세스에 프레임을 할당하는 정도와도 연관되어 있다.
실행 중인 여러 프로세스에 프레임을 얼마나 나누어주느냐에 따라 시스템의 성능이 달라진다.
어떠한 프로세스에는 너무 적은 프레임을 할당하면 페이지 부재(page fault)가 자주 일어나게 될 것이고
그렇다고 너무 많은 프레임을 할당하면 메모리가 낭비되어 전체적인 시스템에 영향을 끼치게 될 것이다.
그래서 남아 있는 프레임을 실행 중인 프로세스에게 적절이 나누어주는 정책이 필요한데 정적 할당과 동적 할당이 존재한다.
1) 정적 할당 (static allocation)
정적할당은 프로세스 실행 초기에 프레임을 나누어준 후 그 크기를 고정하는 것으로 균등 할당 방식과 비례 할당 방식이 있다.
- 균등 할당 방식 (equal allocation)
균등 할당 방식은 프로세스의 크기에 상관없이 모든 프로세스들에게 동등하게 사용 가능한 프레임을 나누어주는 것이다.
예를 들어보자.
현재 물리 메모리에 사용 가능한 프레임이 15개있다고 해보자.
프로세스 A, B, C가 존재하고 이들은 각각 프레임 3개, 7개, 10개를 필요로 하는 크기를 가진다.
균등 할당 방식을 적용한다면 이들의 크기는 상관하지 않고 현재 사용 가능한 물리 메모리의 프레임 개수인 15개를 3분할하여 각각의 프로세스에게 5개씩 할당한다.
이러한 균등 할당 방식은 전체적으로 보면 공평하다는 느낌을 줄 수 있지만 위 예시를 보면 프로세스 A는 자신이 필요로 하는 것보다 많은 프레임을 할당받고 반면에 프로세스 B, C는 적게 할당받아 페이지 부재가 빈번하게 발생할 가능성이 커지게 되는 단점이 존재한다.
- 비례 할당 방식 (proportional allocation)
비례 할당 방식은 프로세스의 크기에 비례하여 프레임을 할당하는 방식이다.
모두에게 공평하게 나누어주는 균등 할당 방식보다는 각자의 상황을 고려하여 분배하는 비례 할당 방식이 조금 더 괜찮아 보인다.
이러한 정적 할당 방식은 문제점이 존재한다.
① 프로세스가 실행 중에 필요로 하는 프레임을 유동적으로 반영하지 못한다.
예를 들어, 동영상 플레이어같은 경우에는 프로그램 자체는 프로세스의 크기가 작아 그에 맞는 프레임을 실행 초기에 할당받을 것이다. 하지만, 동영상 재생을 위해 용량이 큰 동영상을 불러온다면 더 많은 프레임이 요구된다.
이러한 경우에 정적 할당 방식은 프로세스가 실행되면서 유동적으로 프레임을 반영하지 못한다.
② 사용하지 않은 메모리를 처음부터 미리 확보하여 공간을 낭비한다.
정적 할당 방식은 큰 프로세스를 실행하면서 당장 필요 없는 프레임을 미리 할당하기 때문에 메모리가 낭비된다.
2) 동적 할당 (dynamic allocation)
위에서 본 정적 할당에는 2가지 단점이 존재했다.
프로세스는 실행 중에 어떠한 경우에는 많은 프레임을 요구하기도 하고 어떠한 경우레는 적은 프레임을 요구하기도 한다. 이러한 상황을 고려하여 프레임을 할당하는 방식이 동적 할당 방식이다.
동적 할당 방식에는 작업집합모델을 사용하는 방식과 페이지 부재 빈도를 사용하는 방식이 있다.
- 작업집합모델을 사용하는 방식
작업집합모델을 사용하는 방식은 가장 최근에 접근한 프레임이 이후에도 또 참조될 가능성이 높다는 가정하에 시작된다.
최근 일정 시간동안 참조된 페이지들을 집합으로 만들고 이 집합에 있는 페이지들을 물리 메모리에 유지하여 프로세스의 실행을 돕는다.
작업집합모델에서 중요한 키워드는 working set size와 working set window이다.
working set size는 물리 메모리에 유지할 페이지의 크기를 의미하며 작업집합에 들어갈 최대 페이지의 수를 의미한다.
working set window는 현재 시점에 최대 어느 범위까지의 페이지를 살펴볼 것인가를 결정하는 것이다.
작업 집합 모델에서는 working set window의 크기에 따라 프로세스의 실행 성능이 달라진다.
너무 크게 설정하면 필요 없는 페이지가 메모리에 남을 수 있고 너무 작게 설정하면 필요한 페이지가 스왑영역으로 옮겨질 수 있기 때문이다.
작업지합모델을 사용하는 방식은 충분한 페이지를 할당하지 않으면 작업집합에 있는 페이지를 물리 메모리에 유지하기 힘든 단점이 있다.
또한, 어떤 프레임을 물리 메모리에 유지해야 하는지는 알 수 있지만 프로세스에게 프레임을 얼마나 할당해야하는지는 알 수가 없다. 즉, 프로세스의 성능을 높일 수는 있지만 스레싱 문제를 해결하지는 못한다.
- 페이지 부재 빈도를 사용하는 방식
페이지 부재 빈도를 사용하는 방식은 프로세스가 필요로 하는 프레임의 양을 동적으로 결정하는 방법이다.
이 방식은 페이지 부재 횟수를 기록하여 프로세스마다 페이지 부재 비율을 계산하는 것이다.
페이지 부재 빈도에서는 페이지 부재 비율의 상한선과 하한선을 설정한다.
만약, 페이지 부재 비율이 상한선을 초과하면 할당한 프레임이 적다는 것이므로 프레임 할당량을 늘려준다.
반대로 페이지 부재 비율이 하한선보다 낮다면 할당한 프레임을 어느정도 회수한다.
이러한 방식을 통해 각각의 프로세스가 실제로 실행 됐을 때 얼마만큼의 프레임을 요구하는지 예측하기 힘드므로 상황에 맞게 동적으로 할당할 수 있는 것이다.
'CS지식 > 운영체제' 카테고리의 다른 글
디렉토리(directory)란 무엇인가 (0) 2021.07.17 RAID란 무엇인가 (0) 2021.07.15 세그멘테이션 기법이란 무엇인가 (0) 2021.06.24 페이징 기법이란 무엇인가 (0) 2021.06.21 가상 메모리란 무엇인가 (0) 2021.06.18