운영체제는 각 프로세스가 사용할 메모리 영역을 관리하고 서로 침범하지 못하도록 보호한다.
메모리를 연속된 공간으로 나눌 수도 있다
프로세스마다 일정한 크기의 공간을 나누어 줄 수 있다.
하지만 프로세스 크기가 제각각이면 쓰지 못하고 남는 작은 공간들이 생길 수 있다.
빈 공간이 프로세스 내부에 남는지, 프로세스 사이에 흩어지는지에 따라 내부 단편화와 외부 단편화로 나눌 수 있다.
메모리를 같은 크기의 조각으로 나눈다
메모리를 일정한 크기의 프레임으로 나누고, 프로세스도 같은 크기의 페이지로 나누면 꼭 연속된 공간에 저장할 필요가 없다.
페이지가 실제 메모리의 어느 프레임에 있는지는 페이지 테이블을 통해 관리한다.
프로그램 전체가 메모리에 있을 필요는 없다
실제로 지금 사용하는 부분만 메모리에 올리고, 나머지는 저장장치에 둘 수 있다.
필요한 페이지가 메모리에 없으면 저장장치에서 불러와야 한다.
메모리가 가득 찼다면 무엇을 내보낼까
새로운 페이지를 가져와야 하는데 빈 프레임이 없다면 기존 페이지 가운데 하나를 선택해 내보내야 한다.
페이지를 너무 자주 바꾸면 오히려 느려진다
메모리가 부족해 페이지를 계속 저장장치와 교환한다면 CPU는 실제 프로그램보다 페이지 교체에 시간을 더 많이 쓸 수 있다.
스래싱이 발생하면 페이지 부재가 계속 늘고 저장장치 접근이 많아져 CPU 사용률까지 떨어질 수 있다. 단순히 메모리를 많이 쓰는 것과는 다르며, 현재 실행에 필요한 작업 집합을 메모리에 유지할 수 없는 상황이 핵심이다.
스래싱을 줄이려면 프로세스가 실제로 자주 사용하는 페이지가 메모리에 머물 수 있도록 해야 한다. 무조건 많은 프로세스를 동시에 올리는 것보다 메모리 상황에 맞춰 실행 정도를 조절하는 것이 중요하다.