Thrashing
스레싱(thrashing)은 동시에 일정 수 이상의 프로그램을 실행했을 때, 오히려 CPU 이용률이 떨어지는 현상을 말한다.
가상 메모리 구현 및 다중 프로그래밍 적용 시
가상 메모리를 구현해 다중 프로그래밍(multi programming)을 하면 기본적으로 CPU 이용률이 높아진다. 하지만, 일정 수 이상으로 다중 프로그래밍을 하면 동시에 실행되는 프로세스가 많아지면서 각 프로세스가 사용할 수 있는 물리 메모리 공간이 줄어들게 되면서 페이지 폴트가 자주 일어난다.

페이지 폴트(page fault): 프로세스가 현재 물리 메모리에 없는 가상 메모리 페이지에 접근하려고 할 때 발생하는 인터럽트(긴급 작업 처리 신호)이며, 운영체제가 가상 메모리 시스템을 통해 메모리를 관리할 때 자연스럽게 일어나는 현상이다.
인터럽트(interrupt): 컴퓨터 시스템에서 CPU가 현재 실행 중인 작업을 일시 중단하고 다른 긴급한 작업을 처리하도록 하는 신호이다.
따라서 다중 프로그래밍을 하면, 디스크 영역에서 필요한 페이지를 스왑 인하고 불필요한 페이지를 스왑 아웃하는 작업도 자주 하게 된다.
스왑 인(swap in): 디스크의 스왑 영역에 있는 페이지를 다시 물리 메모리로 가져오는 과정이다.
스왑 아웃(swap out): 물리 메모리에 있는 페이지를 디스크의 스왑 영역으로 내보내는 과정이다.
페이지(page): 가상 메모리 공간을 일정한 크기로 나눈 블록으로, 가상 메모리 시스템에서 메모리를 관리하는 고정 크기의 기본 단위이다.
이처럼 다중 프로그래밍 정도가 일정 수준 이상 높아지면 -> 페이징이 빈번히 일어나게 되고 -> 실질적으로 CPU 이용률이 떨어지는 스레싱이 발생한다.
페이징(paging): 가상 메모리 시스템에서 페이지 단위로 메모리와 디스크 간에 데이터를 교환하는 전체적인 메커니즘을 말한다.
다중 프로그래밍 정도에 따른 스레싱 발생 시점
위 설명과 같이, 다중 프로그래밍 정도에 따른 스레싱 발생 시점을 그래프로 나타내면 아래와 같다.

스레싱 예방 방법
스레싱을 예방하려면, 워킹 세트(working set)를 설정하는 방법이 있다. 워킹 세트는 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것을 의미한다.
워킹 세트를 바탕으로, 자주 사용하는 페이지를 물리 메모리의 프레임에 고정하면, 페이지 폴트가 빈번하게 발생하는 현상을 방지할 수 있다.