Chapter8. 메모리 관리

Date:     Updated:

카테고리:

태그:

유튜브에 있는 김덕수 교수님의 Operating System 강의를 듣고 정리한 내용입니다.
중간에 등장하는 ppt 내용들은 모두 강의자료를 캡처한 것입니다.


🔧 Memory - backgrounds

메모리 종류

8-1


메모리 계층구조

8-2

  • Block: 보조기억장치와 주기억장치 사이의 데이터 전송 단위 (1KB~4KB)
  • Word: 주기억장치와 레지스터 사이의 데이터 전송 단위 (16bits~64bits)
    • windows 32bits/64bits


Address binding

8-4

  • 프로그램의 논리 주소를 실제 메모리의 물리 주소로 mapping 하는 작업
  • Binding 시점에 따라 구분
    • Compile time binding
    • Load time binding
    • Run time binding


Compile time binding

  • 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우
    • 위치가 변하지 않음
  • 프로그램 전체가 메모리에 올라가야 함


Load time binding

8-5

  • 메모리 적재 위치를 컴파일 시점에서 모를 때 대체 가능한 상대 주소 를 생성
  • 적재 시점(load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정
  • 프로그램 전체가 메모리에 올라가야 함


Run time binding (Execution time binding)

Binding 프로세스 상태
8-6 8-8
  • 프로세스 수행 도중 다른 메모리 위치로 이동할 수 있음
    • Address binding을 수행시간까지 연기
  • HW의 도움이 필요
    • Memory Management Unit (MMU)
  • 대부분의 OS가 사용


Dynamic loading

  • 모든 루틴(함수)을 교체 가능한 형태로 디스크에 저장
  • 실제 호출 전까지는 루틴을 적재하지 않음
    • 메인 프로그램만 메모리에 적재하여 수행
    • 루틴의 호출 시점에 address binding 수행
    • 메모리 공간의 효율적 사용


Swapping

8-7

  • 프로세서 할당이 끝난 프로세스는 swap-device로 보냄 (swap-out)
  • 프로세서를 할당받는 프로세스는 메모리에 적재 (swap-in)


🔧 Continuous memory allocation

  • 프로세스(context)를 하나의 연속된 메모리 공간에 할당하는 정책
  • 메모리 구성 정책
    • 메모리에 동시에 올라갈 수 있는 프로세스 수
      • Multiprogramming degree
    • 각 프로세스에게 할당되는 메모리 공간 크기
    • 메모리 분할 방법


  • Uni-programming (degree=1)
  • Multi-programming
    • Fixed partition multi-programming (FPM)
    • Variable partition multi-programming (VPM)


🔧 Uni-Programming

Memory structure Overlay structure
8-10 8-9
  • 하나의 프로세스만 메모리 상에 존재
  • 문제1) 커널의 메모리를 침범할 수 있음
    • 경계 레지스터 (boundary register) 사용
    • 여기 넘어오지 마
  • 문제2) 프로그램 크기 > 메모리 크기
    • Overlay structure 사용
    • 공통 루틴 + 현재 필요한 루틴만 돌아가면서 메모리에 적재
    • 사용자가 프로그램의 흐름 및 자료구조를 알고 있어야 함
  • 비효율적 → Multi-programming


🔧 Fixed partition multi-programming (FPM)

8-11

  • 메모리 공간을 미리 고정된 크기로 분할
  • 각 프로세스는 하나의 partition에 적재
  • 각 partition마다 boundary register 사용
  • 빠르고 구현이 쉬움
  • 단점: 메모리 낭비 (Fragmentation)


Fragmentation

8-12

  • Internal fragmentation
    • partition 크기 > process 크기
    • ex) 30MB 파티션을 5MB 프로세스에 할당
  • External fragmentation
    • 남은 메모리의 총 합 > 프로세스 크기
    • But, 연속된 공간이 아니라 할당 불가
    • 메모리 낭비


🔧 Variable partition multi-programming (VPM)

8-13

  • 프로세스를 처리하는 과정에서 그때그때 메모리 공간이 동적으로 분할
  • No internal fragmentation


Placement strategies (배치 전략)

8-14

  • 처음 메모리를 분할할 때는 이상적이지만, 중간중간에 메모리가 반납되면 문제가 발생
  • 배치할 수 있는 공간이 여러군데라면 어디에 배치?


First-fit (최초 적합)

  • 프로세스가 들어갈 수 있는 첫 번째 파티션 선택
  • Simple & low-overhead


Best-fit (최적 적합)

  • 프로세스가 들어갈 수 있는 파티션 중 가장 작은 파티션 선택
  • 탐색 시간이 오래걸림 (모든 파티션을 살펴봐야 함)
  • 크기가 큰 파티션을 유지할 수 있음
  • 활용하기에 너무 작은 크기의 파티션이 많이 발생


Worst-fit (최악 적합)

  • 프로세스가 들어갈 수 있는 파티션 중 가장 큰 파티션 선택
  • 탐색시간이 오래걸림
  • 작은 크기의 파티션 발생을 줄일 수 있음
  • 큰 크기의 파티션 확보가 어려움


Next-fit (순차 최초 적합)

  • State table에서 마지막으로 탐색한 위치부터 탐색
  • 이후 들어갈 수 있는 첫 번째 파티션 선택
  • 메모리 영역의 사용 빈도 균등화 (너무 앞 부분만 사용하더라)
  • low-overhead


External fragmentation issue

Coalescing holes (공간 통합)

8-15

  • 인접한 빈 영역을 하나의 partition으로 통합
  • low-overhead


Storage compaction (공간 압축)

8-16

  • 모든 빈 공간을 하나로 통합
  • High-overhead
    • 모든 프로세스들 종료 후 재배치
  • 프로세스 처리에 필요한 적재 공간이 없어, 공간 확보가 필요할 때 수행
    • 오래걸리기 때문에 자주 쓰지는 못함


🔧 Memory pool

동적 메모리 할당(new, malloc)은 굉장히 자주 쓰이는 명령이다. 하지만 OS의 도움을 받아야 하기 때문에 속도가 느릴 수 밖에 없다. 이를 해결하기 위해 메모리 풀이라는 트릭을 사용한다. 예를 들어 OS로 부터 1GB를 통째로 가져오고 여기서 메모리를 할당하는 것이다. 그러면 매번 OS를 거칠 필요가 없기 때문에 속도가 빨라진다.


맨 위로 이동하기

OS 카테고리 내 다른 글 보러가기

댓글 남기기