본문 바로가기
프로그래밍/운영체제 (완)

8장 - 메모리 할당 기법: 연속 vs 분할 할당 (69)

by 서가_ 2025. 6. 24.
반응형

운영체제 메모리 관리 #3 - 메모리 할당 기법: 연속 vs 분할 할당

운영체제가 새로운 프로세스를 실행시키거나 실행 중인 프로세스가 추가 메모리를 요청할 때, 어떤 방식으로 물리 메모리를 할당해야 할까요? 오늘은 메모리 할당의 기본 개념과 두 가지 주요 할당 방식에 대해 알아보겠습니다.

 

메모리 할당이란?

메모리 할당의 정의

메모리 할당(Memory Allocation)은 운영체제가 프로세스에게 물리 메모리 공간을 제공하는 과정입니다.

메모리 할당이 필요한 경우

  • 새 프로세스를 실행시킬 때
  • 실행 중인 프로세스가 추가 메모리를 요청할 때
  • 프로세스의 코드(함수), 변수, 스택, 동적 할당 공간 등을 위해

할당된 메모리에서 일어나는 일들

프로세스의 실행은 모두 할당된 물리 메모리에서 이루어집니다:

  • 프로그램 코드 실행
  • 변수 저장 및 접근
  • 함수 호출을 위한 스택 사용
  • 동적 메모리 할당 및 해제

메모리 할당 기법의 분류

메모리 할당 기법은 크게 연속성크기 고정 여부에 따라 분류됩니다.

1. 연속 메모리 할당 (Contiguous Memory Allocation)

프로세스별로 연속된 한 덩어리의 메모리를 할당하는 방식입니다.

고정 크기 할당

  • 메모리를 고정 크기의 파티션으로 나누고 프로세스당 하나의 파티션 할당
  • 파티션의 크기는 모두 같거나 다를 수 있음
  • 메모리가 파티션들로 미리 나누어져 있기 때문에 '고정 크기 할당'이라고 부름

가변 크기 할당

  • 메모리를 프로그램 크기에 맞는 파티션으로 할당
  • 프로세스 크기에 딱 맞게 메모리 공간을 할당

2. 분할 메모리 할당 (Non-contiguous Memory Allocation)

프로세스에게 여러 덩어리의 메모리를 할당하는 방식입니다.

고정 크기 할당

  • 고정 크기의 덩어리 메모리를 여러 개 분산 할당
  • 대표 방법: 페이징(Paging) 기법

가변 크기 할당

  • 가변 크기의 덩어리 메모리를 여러 개 분산 할당
  • 대표 방법: 세그먼테이션(Segmentation) 기법

연속 메모리 할당의 역사

초기 운영체제에서의 사용

연속 메모리 할당은 컴퓨터 초기 시대에 주로 사용되었습니다.

MS-DOS의 예

  • 단일 사용자, 단일 프로세스 시스템
  • 한 프로세스가 전체 메모리를 독점 사용
  • 메모리 관리가 상대적으로 단순

IBM OS/360의 혁신

MFT (Multiple Programming with a Fixed Number of Tasks)

  • 고정 크기 할당의 대표 사례
  • 메모리 전체를 n개의 고정 크기로 분할
  • 프로세스마다 하나씩 할당
  • 수용 가능한 프로세스 수는 n개로 고정
  • 메모리가 부족할 때 프로세스는 큐에서 대기

MVT (Multiple Programming with a Variable Number of Tasks)

  • 가변 크기 할당의 대표 사례
  • 프로세스마다 프로세스 크기에 맞는 연속 메모리 할당
  • 수용 가능한 프로세스 수는 가변적
  • 메모리가 부족할 때 프로세스는 큐에서 대기

연속 할당의 한계

  • 가상 메모리를 지원하지 않음
  • 물리 메모리 크기에 의해 실행 가능한 프로그램 크기가 제한됨

할당 방식별 특성 비교

연속 메모리 할당

장점:

  • 구현이 상대적으로 간단
  • 주소 계산이 단순함
  • 메모리 접근 속도가 빠름

단점:

  • 메모리 단편화 문제 발생
  • 큰 프로그램 실행 시 연속 공간 확보 어려움
  • 메모리 활용률이 떨어질 수 있음

분할 메모리 할당

장점:

  • 메모리 활용률이 높음
  • 큰 프로그램도 실행 가능
  • 유연한 메모리 관리

단점:

  • 구현이 복잡함
  • 주소 변환 오버헤드 존재
  • 관리해야 할 정보량이 많음

현대 운영체제에서의 선택

왜 분할 할당이 주류가 되었나?

현대 운영체제는 대부분 분할 메모리 할당 방식을 채택하고 있습니다:

  1. 멀티태스킹 환경: 여러 프로세스가 동시에 실행
  2. 메모리 효율성: 제한된 물리 메모리의 효율적 활용 필요
  3. 프로그램 대형화: 연속 공간 확보의 어려움
  4. 가상 메모리: 물리 메모리보다 큰 프로그램 실행 지원

대표적인 현대 기법

  1. 페이징 (Paging)
    • 고정 크기 페이지 단위로 메모리 관리
    • 대부분의 현대 운영체제에서 사용
  2. 세그먼테이션 (Segmentation)
    • 논리적 단위(코드, 데이터, 스택 등)로 메모리 관리
    • 페이징과 결합하여 사용하기도 함

메모리 할당 기법 선택의 고려사항

성능 측면

  • 접근 속도: 연속 할당이 유리
  • 메모리 활용률: 분할 할당이 유리
  • 오버헤드: 연속 할당이 적음

유연성 측면

  • 프로그램 크기 제한: 분할 할당이 유연
  • 동적 메모리 관리: 분할 할당이 우수
  • 멀티프로세싱: 분할 할당이 적합

구현 복잡성

  • 하드웨어 지원: 분할 할당은 MMU 등 복잡한 하드웨어 필요
  • 운영체제 복잡성: 분할 할당이 더 복잡
  • 디버깅: 연속 할당이 상대적으로 쉬움

마무리

메모리 할당 기법의 선택은 시스템의 요구사항과 하드웨어 성능, 구현 복잡성 등을 종합적으로 고려해야 하는 문제입니다. 초기에는 단순한 연속 할당이 주를 이뤘지만, 컴퓨터 성능 향상과 멀티태스킹 환경의 발달로 인해 현재는 분할 할당 방식이 표준이 되었습니다.

다음 포스팅에서는 연속 메모리 할당에서 발생하는 가장 큰 문제인 단편화(Fragmentation)에 대해 자세히 알아보고, 이를 해결하기 위한 다양한 방법들을 살펴보겠습니다.

반응형