Thrashing
- 메모리 영역에 접근할 때 페이지 폴트가 지나치게 많이 일어나는 현상
- 이는 프로세스가 실제 작업보다 페이지 교체 작업에 더 많은 시간을 소비하게 되어 CPU 이용률이 급감하고 성능이 저하되는 결과를 가져온다.
Thrashing 발생 이유
- 다중 프로그래밍 정도가 높아짐에 따라 CPU 이용률이 높아지게 된다.
- CPU 이용률이 최대값에 도달했을 때, 다중 프로그래밍 정도가 그 이상으로 커지면 쓰레싱이 발생하고, CPU 이용률이 급격히 떨어진다.
- 운영체제는 CPU 이용률을 감시하며, CPU 이용률이 너무 낮아지면 새로운 프로세스를 추가하여 다중 프로그래밍 정도를 높이게 된다. 이때 전역 페이지 교체 알고리즘을 사용하여 어떤 프로세스의 페이지인지에 대한 고려없이 교체를 수행한다.
- 그러나, 만약 교체된 페이지들이 해당 프로세스에서 필요한 페이지들이었다면 또 다시 페이지 폴트가 발생한다.
- 즉, 추가된 새로운 프로세스가 실행 중인 프로세스로 부터 프레임을 가져오려고 하면서 페이지 폴트와 페이징 대기 시간이 증가하게 된다. 이로 인해 CPU 이용률은 더욱 떨어지고, CPU 스케줄러는 다시 새로운 프로세스를 추가하여 더 많은 페이지 폴트와 대기 시간을 유발하게 된다.
Thrashing 방지하는 방법
쓰레싱을 방지하기 위해서는 각 프로세스가 필요로 하는 최소한의 프레임 갯수를 보장해주어야 한다.
정적 할당 (Static Allocation)
프레임 할당을 프로그램 실행 전에 사전에 정해진 규칙에 따라 고정적으로 수행하는 방법으로 실행 중인 프로세스의 상태나 메모리 요구량을 고려하지 않고, 초기에 결정된 프레임 할당 계획을 유지한다.
- 균등 할당 (Equal Allocation)
- 메모리 시스템에 사용 가능한 총 프레임 수를 프로세스의 수로 나누어 각 프로세스에게 동일한 수의 프레임을 할당하는 방식
- ex) 100개의 프레임과 4개의 프로세스가 있다면, 각 프로세스에게 25개의 프레임이 할당된다.
- 크기가 큰 프로세스의 경우에는 프레임 부족으로 페이지 폴트가 발생할 수 있고, 크기가 작은 프로세스의 경우 메모리 낭비가 발생한다.
- 비례 할당 (Proportional Allocation)
- 프로세스의 상대적인 크기나 작업량을 고려하여 프레임을 할당하는 방식
- 작업 집중도가 높은 프로세스에게 더 많은 프레임을 할당하여 그 성능을 향상시킬 수 있다.
- 프로세스의 동적인 특성을 예측하여 메모리를 할당해야 한다. 그러나 예측이 잘못되거나 프로세스의 동작이 예상과 다를 경우 메모리 할당이 부적절하게 이루어질 수 있다.
정적 할당 방식의 문제점
- 프로세스가 실행중에 필요로 하는 프레임을 유동적으로 반영하지 못한다.
- 사용하지 않은 메모리를 처음부터 미리 확보하여 공간을 낭비한다.
동적 할당 (Dynamic Allocation)
실행 중인 프로세스의 상태나 메모리 요구량에 따라 프레임 할당을 동적으로 조정하는 방법으로 실행 중인 프로세스의 메모리 요구량을 모니터링하고, 필요에 따라 프레임을 재할당하여 최적의 메모리 사용을 유지한다.
- 작업 집합 모델 (Working Set Model)
- 프로세스가 현재 실행하는 동안 필요로 하는 페이지들의 집합인 워킹 셋을 기반으로 페이지 할당을 수행
- 워킹 셋은 주로 프로세스가 최근에 참조한 페이지들의 집합으로 정의된다. (지역성)
- 워킹 셋을 물리 메모리에 유지하여 페이지 폴트 및 페이지 교체 현상을 줄인다.
- working set size : 물리 메모리에 유지할 페이지의 크기 (= 작업 집합에 들어갈 최대 페이지의 수)
- working set window : 현재 시점에 최대 어느 범위까지의 페이지를 살펴볼 것인지 결정
- working set size와 window를 너무 크게 설정하면 필요 없는 페이지가 메모리에 남을 수 있고, 너무 작게 설정하면 필요한 페이지가 스왑될 수 있다.
- 충분한 페이지를 할당하지 않으면 워킹 셋을 물리 메모리에 유지하기 힘든 단점이 있다. 또한, 어떤 프레임을 유지해야 하는지는 알 수 있지만 프레임을 얼마나 할당해야 하는지는 알 수 없다. 따라서, 프로세스의 성능을 높일 수는 있지만 스레싱 문제를 해결하지는 못한다.
- 페이지 폴트 빈도 기반 방식 (Page Fault Frequency)
- 각 프로세스의 페이지 부재 빈도를 기록하고 이를 기반으로 페이지 할당을 조절한다.
- 페이지 부재 빈도가 높을수롣 더 많은 페이지를 할당받을 수 있다.
- 페이지 부재 비율의 상한선과 하한선을 설정하여 페이지 부재 비율이 상한선을 초과하면 프레임 할당량을 늘리고, 하한선보다 낮다면 할당한 프레임을 어느정도 회수한다.
참고
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 파일 시스템 (File System) (0) | 2023.06.17 |
---|---|
[OS] 메모리 (Memory) (0) | 2023.06.17 |
[OS] 페이지 교체 알고리즘 (0) | 2023.06.10 |
[OS] 페이징 (Paging) & 세그멘테이션 (Segmentation) (0) | 2023.06.10 |
[OS] 세마포어 (Semaphore) & 뮤텍스 (Mutex) (0) | 2023.06.10 |