본문 바로가기
CS

[OS] 메모리 관리 전략

by sangyunpark99 2025. 3. 9.
OS에서 메모리 관리는 어떻게 할까?

 

이번 글은 OS의 메모리 관리 전략에 대해 정리한 글입니다.

아래의 내용은 "기술 면접 대비 CS 전공 핵심 요약집"의 내용을 공부하고 정리한 내용입니다.

 

논리 메모리와 물리 메모리

CPU가 프로세스를 처리할 때, 프로세스가 보는 메모리 영역은 논리 메모리 영역 또는 가상 메모리 영역이라고 합니다.

실제로 사용되는 메모리 영역(RAM)은 물리 메모리 영역이라고 합니다.

CPU가 프로세스를 실행해 보는 주소 값을 논리 주소 또는 가상 주소라고 하고, 실제 메모리에서 사용되는 주소는 물리 주소라고 합니다.

 

CPU가 프로세스를 실행할 때 사용하는 주소 값과 실제 주소값이 다르기 때문에, 하드웨어 장치인 메모리 관리 장치가 논리 주소를 물리 주

소로 변환해주어야 합니다. 메모리 관리 장치는 CPU에 위치하고, CPU에서 메모리 접근 전에 메모리 관리 장치를 거쳐 논리 주소를 통해 물리 주소를 얻게 됩니다. 또한, 메모리 관리 장치를 사용해 메모리 영역에 대한 접근을 제한해 메모리를 보호할 수도 있습니다.

 

주소가 변환되는 과정을 그림으로 나타내면 다음과 같습니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

 

OS에서 각 프로세스에게 메모리를 어떻게 할당할까요?

 

연속 메모리 할당

멀티 프로세스 환경에서 여러 프로세스를 연속적으로 로드하는 방법입니다. 2가지 방식이 존재합니다.

또한, 메모리를 할당한다는 것은 프로세스가 실행될 수 있도록 필요한 메모리 공간을 확보하고 사용할 수 있게 해주는 것을 의미합니다.

 

고정 분할 방식

고정 분할 방식은 메모리를 여러 개의 고정된 크기 블록(Partition)으로 나누고, 각 프로세스를 해당 블록에 할당하는 메모리 관리 기법입니다. 운영체제가 메모리를 미리 정해진 크기의 여러 개의 분할(Partition)로 나누어 관리하는 것이 핵심입니다.

 

이 방식은 메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한된다는 단점이 존재하고, 단편화 문제가 발생할 수 있습니다.

아래 그림은 단편화 문제가 발생하는 상황입니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

8MB 메모리 공간과 2MB메모리 공간을 합치면 프로세스 7에 공간을 할당할 수 있지만, 고정 분할 방식이기 때문에 할당을 할 수 없습니다.

이러한 경우를 외부 단편화라고 합니다.

프로세스 3과 프로세스 4와 같이 분할된 크기보다 작은 프로세스가 할당되는 경우를 내부 단편화라고 합니다.

 

가변 분할 방식

가변 분할 방식은 할당할 프로세스의 크기에 따라 메모리 공간을 분할하는 방식입니다.

메모리 할당 알고리즘으로 프로세스가 로드될 수 있는 메모리 공간을 찾고, 로드합니다. 알고리즘으로는 최초 적합, 최적 적합, 최악 적합이 존재합니다.

 

최초 적합

프로세스 크기만큼 비어 있는 메모리 공간을 찾아 순차적으로 프로세스를 로드하는 방식입니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

1. 20MB 프로세스 1은 56MB 메모리 공간에 할당됩니다.

2. 18MB 프로세스 2는 36MB 메모리 공간에 할당됩니다.

3. 12MB 프로세스 3은 18MB 메모리 공간에 할당됩니다.

4. 메모리 영역에서 프로세스 2가 할당 해제됩니다.

5. 프로세스 4를 할당하기 위해 빈 메모리 공간을 찾고, 가장 먼저 18MB 메모리 공간이 탐색되고, 프로세스 4를 할당합니다.

 

5번 과정에서 6MB에 프로세스 4를 로드하는 것이 아닌, 18MB 메모리 공간에 프로세스를 로드합니다.

 

 

최적 적합

프로세스의 크기에 제일 가까운 빈 메모리 공간을 할당하는 방식입니다. 이 방식은 최적의 빈 메모리 공간을 찾기 위해서 전부 탐색해야 합니다.

 

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

4번 과정에서 프로세스 4가 할당될 수 있는 빈 메모리 공간은 18MB, 6MB가 존재합니다.

최초 적합과는 다르게 최적 적합에서는 프로세스 4의 크기와 동일한 6MB 크기의 빈 메모리 공간에 할당을 합니다.

 

최악 적합

프로세스 크기보다 큰 메모리 공간 중에 가장 큰 공간에 프로세스를 할당하는 방식입니다.

최적 적합 방식처럼 빈메모리 공간을 전부 탐색합니다.

 

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

5번 과정에서 6MB의 프로세스 4를 18MB와 6MB의 빈 메모리 공간에서 가장 큰 18MB의 메모리 공간에 프로세스 4를 할당합니다.

 

 

외부 단편화를 해결할 수 있는 방법이 있나요?

 

메모리 압축 방법을 사용하면 됩니다.

 

메모리 압축

 

프로세스가 사용 중인 메모리 공간을 재배치해서 여러군데 흩어진 빈 메모리 공간을 하나로 합쳐줍니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

그림에서 8MB, 2MB, 4MB의 빈 메모리 공간이 존재합니다.

하지만, 프로세스 7의 크기는 10MB이므로 빈 메모리 공간에 할당할 수 없는 외부 단편화 문제가 발생합니다.

 

메모리 단축 방법은 8MB와 2MB의 흩어진 빈 메모리 공간을 재배치해서 10MB로 만들어줍니다.

프로세스 7은 만들어진 10MB 빈 메모리 공간에 할당됩니다. 즉, 외부 단편화 문제가 해결됩니다.

 

비연속 메모리 할당

프로세스의 메모리 영역을 나눠서 메모리 공간에 저장하는 방법으로 페이징과 세그먼테이션이라는 2가지 방식이 존재합니다.

 

페이징

프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기페이지프레임으로 나눕니다. 페이지와 프레임의 크기는 동일합니다. 페이지와 프레임에는 번호를 할당해서 프로세스의 페이지메모리의 프레임을 매핑합니다.

 

프로세스의 페이지와 메모리의 프레임을 매핑하는 데 페이지 테이블이 사용됩니다.

페이지 테이블을 페이지 정보와 페이지에 매핑하는 프레임의 주소 값을 저장합니다. 또한, 페이지 테이블은 각 프로세스의 PCB에 저장됩니다.

 

페이징 기법은 다음과 같이 작동합니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

페이징 기법 사용시 페이지를 물리 메모리에 연속 할당하지 않기 때문에, 외부 단편화가 발생하지 않습니다.

하지만, 프로세스의 크기가 페이지 수로 딱 나눠 떨어지는지에 대해선 알 수 없습니다. 즉, 프로세스의 마지막 페이지가 페이지 크기보다 작을 수 있기 때문에 내부 단편화 문제가 발생합니다. 또한, 페이지 테이블을 저장하기 위한 메모리 공간이 필요합니다.

 

예를 들어, 프로세스의 크기가 10MB인 경우 페이지와 프레임을 4MB 크기로 나누는 경우, 필요한 페이지와 프레임 수는 2.5개입니다.

2.5페이지라는 것은 없기 때문에 결론적으로 3개의 페이지가 할당됩니다. 이는 마지막 페이지에서 2MB의 공간이 낭비되는 내부 단편화 문제가 발생하게 됩니다.

 

페이징 기법엔 3가지가 존재합니다.

계층적 페이징
페이지 테이블을 다시 페이지로 나누고, 페이지 테이블 자체를 페이징 하는 방식입니다. 이는 멀티 레벨 페이징이라고도 합니다.

해시 페이지 테이블
해시 테이블의 각 항목에 저장된 연결 리스트 페이지 번호를 해싱한 뒤 첫 번째 요소와 가상 페이지 번호를 비교하는 방식입니다.

역 페이지 테이블
프레임을 이용해 페이지를 찾는 방식입니다. 페이지로 찾는 기존 방식과 반대입니다.

 

세그먼테이션

 

프로세스의 메모리 영역을 논리적인 단위인 세그먼트로 분할해서 메모리를 할당하는 방식입니다.

논리적 단위는 파일 내 함수 단위, 프로세스의 스택, 힙과 같은 영역을 의미하기도 합니다.

 

세그먼테이션 테이블을 사용해서 세그먼트의 논리 주소를 물리 주소로 매핑합니다. 세그먼트 테이블은 세그먼트 번호를 인덱스로 사용하고,

세그면트별 시작 주소인 base와 세그먼트 길이인 limit를 저장합니다.

이미지 출처 : 기술 면접 대비 CS 전공 핵심 요약집

 

세그먼테이션 기법은 프로세스의 메모리 영역을 논리적인 단위로 나누어 저장하기 때문에 단위별 데이터 보호가 쉽다는 장점이 존재합니다.

그러나 세그먼트의 크기가 균등하지 않기 때문에, 프로세스의 할당 및 해제하는 과정에서 외부 단편화 문제가 발생할 수 있습니다.

 

추가로, 메모리에 로드된 스택 세그먼트 영역에서 오버플로 발생시 다른 프로세스와 메모리 영역이 겹칠 수 있게 됩니다. 이렇게 되는 경우 다른 프로세스의 세그먼타 스택 오버플로가 발생한 세그먼트를 디스크로 스왑 아웃해야 한다는 점이 있습니다.

 

 

정리

 

  • OS는 논리 메모리(가상 메모리)와 물리 메모리를 분리하여 관리하며, MMU를 통해 주소 변환을 수행합니다.
  • 연속 메모리 할당 방식에는 고정 분할(내부 단편화 발생)과 가변 분할(외부 단편화 발생)이 있으며, 외부 단편화는 메모리 압축으로 해결할 수 있습니다.
  • 페이징 기법은 페이지 테이블을 사용해 논리 메모리를 고정 크기 페이지로 나누어 프레임에 매핑하며, 외부 단편화는 없지만 내부 단편화가 발생할 수 있습니다.
  • 세그먼테이션 기법은 프로세스를 논리적 단위(코드, 데이터, 스택 등)로 분할하여 메모리를 할당하며, 외부 단편화가 발생할 수 있습니다.
  • 세그먼트 기반 메모리 할당 시 스택 오버플로가 발생하면 다른 프로세스와 메모리 영역이 겹칠 수 있어, 이를 해결하기 위해 일부 프로세스를 스왑 아웃할 수 있습니다.

 

'CS' 카테고리의 다른 글

[운영체제] 캐시 일관성과 MESI 프로토콜  (0) 2025.04.25
[운영체제] 락 TAS vs CAS  (0) 2025.04.25
[네트워크] TCP 제어 방법  (0) 2025.02.15
프로세스와 스레드  (2) 2025.02.12
[DB] 트랜잭션  (0) 2025.02.09