메모리 관리 전략, 단편화와 페이징, 세그멘테이션

메모리 관리 배경

각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다. 여기서 할당한 메모리가 가득 찼을때 새로운 프로세스를 적재하려면 다른 프로세스가 적재된 메모리를 반납해야하는데 이 과정을 Swapping이라고 한다.

단편화

프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못 할 만큼의 작은 빈 메모리 공간들이 생기게 되는게 이러한 현상을 단편화라고 한다. 단편화에는 2가지 종류가 있다.

  • 내부 단편화 : 프로세스가 할당받은 메모리 공간중 남는 부분. (ex : 100MB를 할당받은 프로세스가 98MB만 사용할것이라면 2MB의 빈 공간이 생기게 된다)

  • 외부 단편화 : 프로세스한테 할당하기에는 너무 적은 공간이라 할당하지 못하고 분산되어 남는 부분. 프로세스에게 연속적으로 메모리를 할당해야 한다는 조건이 있으면 이러한 문제가 생긴다.(ex : 100MB크기의 메인메모리에서 할당한 공간 사이마다 1MB의 빈공간이 생겼다)

페이징

하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다. 외부 단편화와 압축 작업을 해소하기 위해 물리 메모리를 프레임이라는 정해진 고정 크기로 분할하고, 프로세스내의 가상 메모리는 페이지라는 고정크기로 분할된다. 페이지가 매칭된 프레임 위치에 적절히 적재됨으로써 외부 단편화를 해결할 수 있다.

하지만 프레임의 단위가 커질수록 페이지를 할당할 때 딱 맞지 않으면 내부 단편화가 크게 생기게 된다.

세그멘테이션

페이징에서처럼 가상 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트로 분할한다. 세그먼트 테이블에는 각 세그먼트의 기준과 한계를 저장하여 각각에 맞는 크기의 블록에 할당하여 내부 단편화를 해결하는 기법이다.

서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 남는 공간들이 다시 작게 분산되어서 외부 단편화가 생기게 된다.