메모리 관리 전략
메모리 관리 배경
물리적으로 보았을 때, 메모리 공간이 한정적이기 때문에 관리의 필요성이 생겼고 그리고 다중 프로그래밍이 지원됨에 따라 메모리 할당이 복잡해져 효율적인 관리의 필요성이 생겼습니다.
메모리 관리 개념
Swapping
다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(e.g. 하드디스크)로 내보내고 다른 프로세스의 메모리를 불러 들이는 것을 뜻한다
주 기억장치(RAM)으로 불러오는 과정을 swap-in, 보조 기억장치로 내보내는 과정을 swap-out 이라 한다. swap 에는 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족할때 Swapping 이 시작된다.
단편화 (Fragmentation)
프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용 하지 못할 만큼의 작은 자유공간들이 늘어나게 되는데, 이것이 단편화 이다. 단편화는 2 가지 종류로 나뉜다.
Process A free Process B free Process C free Process D
- 외부 단편화: 메모리 공간 중 사용하지 못하게 되는 일부분. RAM에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을때 발생한다고 볼 수 있다.
- 내부 단편화: 내부 단편화는 할당된 메모리 공간에서 사용하지 않는 부분이 발생하는 현상입니다. 예를 들어, 2KB의 메모리를 할당받은 프로세스가 실제로 1.5KB만 사용한다면, 0.5KB의 공간이 낭비됩니다.
압축 : 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론 이지만, 작업효율이 좋지 않다. (위의 메모리 현황이 압축을 통해 아래의 그림 처럼 바뀌는 효과를 가질 수 있다)
Process A Process B Process C Process D free
Paging(페이징)
페이징(Paging)은 가상 메모리 기술 중 하나로, 프로세스가 사용하는 논리적 주소 공간을 일정한 크기의 페이지(Page)로 나누어 물리적인 메모리와 매핑시키는 방식입니다.
페이징 기법은 페이지 테이블(Page Table)을 사용하여 논리 주소를 물리적인 주소로 변환합니다. 여기서 페이지 테이블은 프로세스의 논리 주소 공간을 페이지로 나눈 각 페이지들이 물리적인 메모리 주소 공간에서 어떤 페이지 프레임(Page Frame)에 매핑되는지 정보를 담고 있는 테이블입니다.
페이징 기법은 페이지 테이블에 접근해야 하므로 오버헤드가 발생하는 단점이 있고 또한, 페이지 크기를 너무 작게 설정하면 페이지 테이블의 크기가 커지고, 크게 설정하면 내부 단편화 문제가 발생할 수 있으므로 적절한 페이지 크기를 선택해야 합니다.
Segmentation(세그멘테이션)
프로세스가 사용하는 논리적 주소 공간을 논리적인 단위인 세그먼트(Segment)로 나누어 물리적인 메모리와 매핑시키는 방식입니다.
세그먼트는 논리적인 단위이므로, 프로세스의 주소 공간을 서로 다른 크기로 나눌 수 있습니다. 예를 들어, 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트 등으로 구성될 수 있습니다. 또한, 세그먼트는 가변적이므로, 크기가 동적으로 변할 수 있습니다.
세그먼트의 단점으로는 세그먼트는 다른 세그먼트와의 연속성을 보장하지 않기 때문에 외부 단편화 문제가 발생할 수 있습니다. 또한, 세그먼트 테이블에 접근해야 하므로 오버헤드가 발생할 수 있습니다.