논리 주소와 물리 주소
- 논리 주소: 프로세스 입장에서 바라본 시작점을 0으로 놓았을 때 주소
- 물리 주소: 메모리의 입장에서 바라본 실제 저장되는 주소 논리 주소와 물리 주소의 변환은 메모리 관리 유닛(MMU)이 담당한다.
- CPU가 논리 주소를 생성
-
MMU가 논리 주소를 변환하여 물리 주소를 생성
- 논리 주소에 베이스 레지스터(Base Register) 값을 더함
- 변환된 물리 주소를 통해 메모리에 접근
메모리 오버레이
과거엔 메모리가 값비싼 저장장치였기 때문에 개인용 컴퓨터에 큰 메모리를 사용할 수 없었다. 그렇다면 물리 메모리보다 큰 프로그램이 어떻게 작동했을까?
프로그램의 크기가 물리 메모리보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라 가져오는 기법을 메모리 오버레이라고 한다.
메모리 오버레이는 프로그램을 몇 개의 모듈로 나눠 필요할 때마다 모듈을 가져와 사용한다. 메모리 오버레이에서 다음과 같은 중요한 의미를 찾을 수 있다.
- 한정된 메모리에서 메모리보다 큰 프로그램을 실행할 수 있다.
- 프로그램 전체가 아닌 일부만 메모리에 올라와도 실행할 수 있다. -> 메모리를 여러 조각으로 나눠 여러 프로세스에 할당할 수 있음
하지만 프로그래머가 직접 프로세스를 작은 모듈로 나누고, 메모리 적재 및 교체 작업을 관리해야 했기 때문에 작업 부담이 크다.
현대의 가상 메모리 시스템이 등장하면서, 메모리 오버레이 방식은 더 이상 사용되지 않게 되었고, 운영체제가 자동으로 메모리와 스왑을 관리하는 방식이 자리 잡게 되었다.
스왑
메모리가 모자라 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는데 이러한 영역을 스왑 영역이라고 한다.
동작 원리:
- 운영체제가 메모리 관리의 주체가 되어, 메모리에 공간이 부족한 경우 사용하지 않는 프로세스의 데이터를 디스크의 스왑 영역으로 이동(스왑 아웃)시킨다
- 필요할 때 스왑 영역에 있는 데이터를 다시 메모리로 가져온다(스왑 인)
스왑 영역은 메모리에 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리한다.
스왑을 이용하면 운영체제는 물리 메모리의 확장으로 간주한다. 예를 들어, 8GB의 RAM과 4GB의 스왑 영역이 있으면, 운영체제는 12GB의 메모리를 사용할 수 있는 것처럼 인식한다. 하지만 디스크는 RAM보다 속도가 훨씬 느리기 때문에 성능 저하가 발생한다. 따라서 스왑은 메모리 부족 상황을 보조하기 위한 용도로만 사용되며, 물리 메모리를 대체할 수는 없다.
메모리 오버레이와 관계
스왑은 프로그램의 전체 구조를 관리하지 않고, 운영체제의 메모리 관리 방식으로 동작한다. 따라서, 메모리 오버레이 방식과 무관하게 작동할 수 있다.
메모리 가변 분할 방식
프로세스의 크기에 맞게 메모리를 분할하는 연속 메모리 할당 방식이며 세그멘테이션 메모리 관리 기법이라고 부른다.
장점
- 프로세스를 하나의 연속된 주소로 다룬다
단점
- 작은 빈 공간이 생기는 외부 단편화가 발생 외부 단편화 문제를 해결하기 위한 메모리 배치 방식은 다음과 같이 크게 세 가지로 나뉜다.
최초 배치
단편화를 고려하지 않는 방식으로 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치한다.
특징
- 구현이 간단하고 속도가 빠르지만, 외부 단편화가 증가할 수 있음.
최적 배치
메모리의 빈 공간을 모두 확인한 후 크기가 가장 비슷한 곳에 프로세스를 배치한다.
특징
- 외부 단편화를 줄이지만, 빈 공간을 모두 확인해야 하므로 속도가 느림.
최악 배치
빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 것으로 최적 배치와 정반대되는 방법이다.
특징
- 가장 큰 빈 공간을 선택하여 자원을 낭비할 가능성이 있음.
메모리 고정 분할 방식
프로세스의 크기에 상관 없이 메모리를 같은 크기로 나눠 관리한다. 고정 분할 방식을 사용하여 물리 메모리를 나누는 방식을 페이징 메모리 관리 기법이라고 한다.
장점
-
메모리 관리가 편하다.
-> 현대 메모리 관리는 페이징을 기본으로 한다.
단점
-
프로세스를 배치하고 공간이 남는 내부 단편화가 발생한다.
ex) 20KB로 메모리를 나눴을 때, 18KB 프로세스를 실행하면, 2KB의 단편화 발생 내부 단편화를 줄이기 위해선 메모리를 어떤 크기로 나눌지 신중하게 결정해야 한다.
외부 단편화와 내부 단편화 비교
- 외부 단편화: 가변 분할 방식에서 발생하며, 메모리의 빈 공간이 작아서 새로운 프로세스를 배치할 수 없는 경우.
- 내부 단편화: 고정 분할 방식에서 발생하며, 프로세스가 메모리에 배치되었지만, 할당된 공간보다 작은 크기를 사용할 때 남는 공간.