Contents

[OS] Memory Management

Memory Management에 대해 알아보자.

Background

메모리 계층구조

  • 레지스터
  • 캐시
  • 메인 메모리
  • 보조기억장치

레지스터쪽으로 갈수록 용량이 작고 비싸다. 레지스터와 캐시는 HW(CPU)가 관리하고 나머지 2개는 SW(OS)가 관리한다.

  • block
    • 보조기억장치와 주기억장치 사이의 데이터 전송 단위
    • 보조기억장치에서 메인메모리로 1bit에 해당하는 데이터만 올려도 block단위(1~4kb)로 올라간다
  • word
    • 메인메모리와 레지스터 사이의 데이터 전송 단위 (16~64bit)

Address Binding

  • 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 과정
  • binding 시점에 따라 구분
    • complie time binding
    • load time binding
    • run time binding
      • 대부분의 OS가 사용하는 방법
      • Address binding을 수행시간(running state)까지 연기
      • HW(Memory Management Unit)의 도움이 필요

Memory allocation

Continuous memory allocation

프로세스를 하나의 연속된 메모리 공간에 할당하는 정책이다. 이는 크게 두가지로 나눈다.

  • Uni-programming
    • 하나의 프로세스만 메모리 상에 존재
  • Multi-programming

Multi-programming

두 가지로 나눠서 생각할 수 있다.

Fixed(static) partition multi-programming

  • 메모리 공간을 고정된 크기로 미리 분할, 메모리 관리는 편함
  • 각 프로세스는 하나의 partition에 적재
  • start address, size를 통해서 partition 관리
  • 프로세스가 kernel이나 다른 partition을 침범하지 않도록 Boundary address를 통해 방지한다
  • 문제: Fragmentation (단편화)
    • Internal fragmentation: Partition 크기 $>$ Process 크기
    • External fragmentation: (남은 메모리 크기 $>$ Process 크기)이지만 연속된 공간이 아니라 사용불가
    • 메모리가 낭비된다

Variable(dynamic) partition multi-programming

  • 초기에는 전체가 하나의 영역인데 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할된다
  • 프로세스가 필요한 메모리 크기 만큼 할당되는 것이다
  • 그렇다면 프로세스들이 끝나고 메모리를 반납한 공간이 생기고 새로운 프로세스가 들어가야 할 때, 배치전략이 다양하다
    • First-fit
      • 첫 번째 partition을 선택
      • simple, low overhead지만 공간 활용률은 떨어질 수 있다
    • Best-fit
      • 프로세스가 들어갈 수 있는 partition 중에서 가장 작은 곳 선택
      • 탐색시간이 걸린다, 크기가 큰 partition을 낭비하지 않을 수 있다, 작은 크기의 partition이 계속 발생할 수 있다
    • Worst-fit
      • best-fit 과 반대
  • coalescing holes (공간 통합)을 통해서 인접한 빈 메모리를 하나의 patition으로 통합하는 방법도 존재한다
  • storage compaction (메모리 압축)은 모든 빈 공간을 하나로 통합하는 방법이다, 모든 process를 중지하고 재배치해야 할 수도 있어서 high overhead라는 단점도 존재

Non-continuous memory allocation

  • 이 부분은 virtual memory에서 다룬다

Reference