메모리(주기억장치) 관리 (Main Memory Management)

김민우·2022년 5월 18일
1

메모리

목록 보기
2/2
post-thumbnail

📌 메모리(기억장치)의 종류

  • 메모리 구조는 I/O Bottleneck을 해소하기 위해 계층구조를 가지게 됨
  1. 레지스터
    • HW(CPU)가 관리
    • 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소
    • 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용
  1. 캐시
    • HW가 관리
    • 데이터나 값을 미리 복사해 놓는 임시 장소
    • 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용
  1. 메인 메모리
    • SW(OS)가 관리
    • 메인메모리 = 주기억장치 = RAM (Random Access Memory)
    • RAM은 DRAM과 SRAM이 있는데 주기억장치는 주로 DRAM을 의미 (SRAM은 캐시나 레지스트리)
    • 컴퓨터의 CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리
  1. 보조기억장치
    • SW가 관리
    • 사용자가 사용하고자 하는 데이터와 프로그램을 저장
    • 전원을 끄더라도 저장된 데이터나 정보가 날아가지 않는 비휘발성 메모리
    • 하드디스크, SSD 등

- 메모리(기억장치) 계층구조

  • Block
    - 보조기억장치와 주기억장치 사이의 데이터 전송 단위
    - Size: 1~4 KB

  • Word
    - 주기억장치와 레지스터 사이의 데이터 전송 단위
    - Size: 16~64 bits


📌Address Binding

  • 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑(mapping)하는 작업

  • Binding의 시점에 따른 구분
    - Compile time binding
    - Load time binding
    - Run time binding

- Compile time binding

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

- Load time binding

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

- Run time binding

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

📌 Dynamic Loading

  • 모든 루틴(Ex. Function)을 교체 가능한 형태로 디스크에 저장

  • 실제 호출 전까지는 루틴을 적재하지 않음
    - 메인 프로그램만 메모리에 적재하여 수행
    - 루틴의 호출 시점에 address binding을 수행

  • 장점:
    - 메모리 공간의 효율적 사용


📌 Swapping

  • 프로세서 할당이 끝나고 수행 완료 된 프로세스는 swap-device로 보내고 (Swap-out)
  • 새롭게 시작하는 프로세스는 메모리에 적재 (Swap-in)

✨ Fragmentation (단편화)

  • Internal Fragmentation (내부 단편화)
    - Partition의 크기가 Process의 크기보다 클 때 메모리 낭비

  • External fragmentation (외부 단편화)
    - 남은 메모리의 크기가 프로세스의 크기보다 크지만, 연속된 공간이 아니여서 메모리가 낭비

📌 Memory Allocation

- Continuous Memory Allocation (연속할당)

: 프로세스 (Context)를 하나의 연속된 메모리 공간에 할당하는 정책
ex. 프로그램, 데이터, 스택 등

  • 메모리 구성 정책에서 고려해야 할 요소
    - 메모리에 동시에 올라갈 수 있는 프로세스 수 (Multiprogramming degree)
    - 각 프로세스에게 할당되는 메모리 공간 크기
    - 메모리 분할 방법

- Uni-programming

  • 하나의 프로세스만 메모리에 존재(Multiprogramming degree = 1)
  • 가장 간단한 메모리 관리 기법
  • 문제점 1
    - 프로그램의 크기가 메모리 크기보다 클 경우에는?
  • 해결법
    - Overlay structure
    - 메모리에 현재 필요한 영역만 적재
    - 사용자가 프로그램의 흐름 및 자료구조를 모두 알고 있어야 함

  • 문제점 2
    - 커널 보호
  • 해결방법
    - 경계 레지스터 (boundary register 사용)
    • 하지만, 남은 공간이 낭비됨
  • Uni-Programming은 Low system resource utilzation과 Low system performance의 문제점을 가지게 됨.
    이를 해결하기 위해 Multi-programming이 존재

- Fixed Partition (Multi Programming)

  • 메모리 공간을 고정된 크기로 분할, 미리 분할되어 있음
    - 각 프로세스는 하나의 partition(분할)에 존재
    (Process : Partition = 1 : 1)
    - Partition의 수 = K (Multiprogramming degree = K)
    - 자료구조의 예

    - 커널 및 사용자 영역 보호
  • Summary
    - 고정된 크기로 메모리에 미리 분할
    - 메모리 관리가 간편함 (Low Overhead)
    - 시스템 자원이 낭비 될 수 있음
    - Internal/External Fragmentation

- Variable Partition (Multi Programming)

  • 초기에는 전체가 하나의 영역
  • 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할
  • 내부단편화가 발생하지 않음

- 배치 전략 (Placement strategies)

1. First-fit (최초 적합)

  • 충분한 크기를 가진 첫 번째 Partition을 선택
  • Simple and low overhead
  • 공간 활용률이 떨어질 수 있음

2. Best-fit (최적 적합)

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

3. Worst-fit (최악 적합)

  • Process가 들어갈 수 있는 Partition중 가장 큰 곳 선택
  • 탐색 시간이 오래 걸림 (모든 partition을 살펴봐야 함)
  • 작은 크기의 partition 발생을 줄일 수 있음
  • 큰 프로세스에게 필요한 큰 크기의 partition 확보가 어려움

4. Next-fit (순차 최초 적합)

  • 최초 적합 전략(First-fit)과 유사
  • State table에서 마지막으로 탐색한 위치부터 탐색
  • 메모리 영역의 사용 빈도 균등화
  • Low overhead

- 공간 통합 (Coalescing holes)

  • 외부 단편화를 해결하기 위한 방법으로, 인접한 빈 영역을 하나의 partition으로 통합
    - 프로세스가 메모리를 release하고 나가면 수행
    - Low overhead

- 메모리 압축 (Storage Compaction)

  • 외부 단편화를 해결하기 위한 방법으로, 모든 빈 공간을 하나로 통합
  • 프로세스 처리에 필요한 적재 공간 확보가 필요할 때 수행
  • High overhead를 가지게 되는데 그 요인으로는,
    1. 모든 Process를 중지하고, 재배치한다.
    2. 많은 시스템 자원을 소비한다.

- Non-Continuous Memory Allocation (비연속할당)

profile
Pay it forward.

0개의 댓글