메모리 관리 전략(Memory Managing Strategy) 및 가상 메모리 (Virtual Memory)

Posted by Jungwoon Blog on July 31, 2019

메모리 관리 전략(Memory Managing Strategy) 및 가상 메모리 (Virtual Memory)

이번 포스팅에는 메모리 관리 전략과 가상 메모리에 대해서 다뤄보도록 하겠습니다.

가상 메모리는 한정된 크기의 메모리내에서 최대한 많은 프로세스를 할당하여 효율적으로 사용하기 위해 만든 기술로, 간단히 말하면 보조 기억장치를 주기억장치 처럼 사용할 수 있게 하는 기술입니다. 이를 통해 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있습니다. 용량보다 큰 프로그램은 실행을 할 수가 없었습니다. 또 여러 프로그램을 메모리에 동시에 올리기에는 용량의 한계와 페이지 교체등의 이슈가 발생하였습니다. 하지만 가상 메모리가 개발 되면서 물리 메모리 크기에 제약을 받지 않게되었고 더 많은 프로그램을 동시에 실행할 수 있게 되었고, swap에 필요한 I/O가 줄어들기 때문에 프로그램들이 빠르게 실행 할 수 있습니다.

가상 메모리의 장점

  • 더 많은 프로그램을 실행할 수 있다.
  • 실제 물리 메모리의 크기에 제한을 받지 않는다.
  • 프로그램의 swap에 필요한 입출력 감소 (=프로세스의 일부분만 swap하도록 처리)

메모리 관리 전략

메모리는 CPU가 직접 접근하는 유일한 저장장치로 메모리 시스템(하드웨어)은 주소(메모리 위치)를 관리하며 할당과 접근을 제어합니다.

목적

  • 제한된 물리 메모리의 효율적인 사용 (할당)
  • 효율적인 메모리 참조 (논리-물리 주소 할당)

이를 위한 메모리 전략은 크게 3가지가 있습니다.

스와핑 (Swapping)

CPU에서 실행 중이지 않은 프로세스의 메모리 이미지를 저장장치에 이동 (메모리 사용의 효율성 증가)

  • Swap in : Ready Queue의 다음 프로세스가 메모리에 없다면
  • Swap out : 메모리 공간이 부족하면 다른 프로세스를 Swap out 후 Swap in
  • 단점 : Context Switching Overhead

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

  • 각 프로세스가 필요로 하는 메모리 요구량을 분석해서 필요한 메모리를 연속으로 메모리에 할당하는 방식 (연속된 물리 메모리이기 때문에 시작 주소만 알면 됨)
  • 동적 메모리 할당 : 어떤 프로세스가 실행했을때 이 프로세스가 들어갈 적당한 곳을 찾아 할당하는 것
    • 최초 적합 (First-fit) : 요청한 크기를 만족하는 첫 번재 가용 공간을 할당, 속도가 빠름
    • 최적 적합 (Best-fit) : 요청한 크기를 만족하는 가장 작은 공간을 할당, 남는 가용 공간을 최소화함
    • 최악 적합 (Worst-fit) : 가장 큰 가용 공간을 할당, 가용 공간이 커서 활용 가능성이 높음, 검색속도가 느리고, 메모리 이용 효율이 좋지 않음

페이징 (Paging)

  • 프로세스가 사용하는 주소 공간을 여러 개로 분할하여 비연속적인 물리 메모리 공간에 할당, 가상 메모리를 모두 같은 크기의 블록으로 편
  • 단위
    • 프레임 : 실제 메모리 공간 (4KB)
    • 페이지 : 프로세스의 메모리 공간 (4KB)
    • 프레임 사이즈 = 페이지 사이즈
    • 논리적 의미와 관계없이 크기가 모두 동일함
  • 페이지 테이블
    • 페이지 테이블 내에 프레임과 페이지가 서로 매핑이 되어 있어서 페이지 테이블을 참조하여 실제 메모리에 접근하게 됩니다.
    • 문제 : 매번 메모리의 페이지 테이블을 먼저 읽어야 하므로 메모리 접근 시간이 두 배가 된다 -> 페이지 테이블의 캐싱을 사용
  • 페이징과 Context Switching : 페이지 테이블을 재설정하기 위한 Context Switching이 발생
  • 공유 페이지 : 비교적 간단하게 메모리 공유

세그멘테이션 (Segmentation)

  • 프로세스가 필요로 하는 메모리 공간을 분할하여 비연속적인 물리 메모리 공간에 할당
  • 단위 : 세그먼트 (서로 다른 크기를 가짐)
  • 페이징과의 차이
    • 논리적 의미에 부합하도록 세그먼트들의 크기가 서로 다름
    • 크기가 다 다르기 때문에 메모리를 페이징 기법에서처럼 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당
  • 논리 주소 공간을 세그먼트 집합으로 정의 (세그먼트마다 별도의 독립된 주소 공간 제공)
  • 세그먼트 테이블
    • 사용자가 정의한 주소를 실제 주소로 맵핑하는 정보를 저장하고 있음
    • 개별 세그먼트는 항목별로 Base(세그먼트 시작 주소) + Limit(세그먼트 길이)의 정보를 같습니다.

페이징 (Paging) vs 세그멘테이션 (Segmentation)

  페이징 세그멘테이션
단위 페이지(가상 공간) / 프레임(물리 공간) 세그먼트
차이점 페이지와 프레임이 모두 같은 크기 논리적 의미에 따라 서로 다른 크기의 세그먼트를 가

요구 페이징 (Demand Paging)

  • 스왑된 페이지를 필요할 때 메모리에 적재
  • 기본적인 페이징 기법에 따라 주소 변환
  • 논리 주소 공간의 각 페이지가 실제로 필요해질 때 적재
    • 사용되지 않는 페이지는 메모리에 적재하지 않음
    • 물리 메모리의 필요 용량을 감소
    • 스왑에 필요한 시간 감소
  • 가상 메모리를 구현하는 중요한 기반 기술
    • 세그먼테이션 시스템에서도 페이징과 결합하여 구현
  • 스와핑 기법과 유사
    • 프로세스 전체를 저장/복구 vs 필요한 페이지만 저장/복구
    • 가상메모리에서는 swapper보다는 pager란 용어가 더 적합

페이지 교체 (Page Replacement)

메모리 공간이 부족하면 특정 페이지를 스왑하여 교체

  • 페이지 교체 알고리즘 (page replacement)
    • FIFO (First-In-First-Out)
      • 메모리에 적재된 시간이 가장 오래된 페이지를 교체 (프레임 개수가 많아지면 페이지 부재율이 높아지는 현상, Belady의 모순)
    • Optimal Page Replace
      • 앞으로 가장 오래 사용되지 않을 페이지를 교체, 들어온 데이터를 쭉 읽어서 앞으로 사용하지 않을걸 교체
      • 다른 모든 알고리즘보다 페이지 부재율이 낮으면서 Belady의 모순이 발생하지 않는 페이지 교체 알고리즘
      • 실제 구현이 불가능하다 : 미래의 페이지 참조를 미리 알아야 함
      • 제안된 알고리즘의 성능을 비교하기 위한 목적으로 사용
    • LRU (Least-Recent-Used)
      • 가장 오랫동안 사용되지 않은 페이지를 교체
      • 최적 페이지 교체 알고리즘에 근사하는 방법, 과거 참조를 기반으로 미래 참조 형태의 근사치를 결정
      • 거의 최적 알고리즘에 가까움
      • 링크드 리스트로 관리 (스택으로 유지)
      • 고려사항
        • 페이지들을 최근에 사용한 시간 순서대로 나열할 수 있어야 함
        • 하드웨어의 지원이 필요 : 모든 메모리 참조에 대해 참조 시간 정보를 갱신
    • LFU (Least-Frequently-Used)
      • 참조 횟수가 가장 적은 페이지를 교체
      • 참조 횟수가 적은건 앞으로도 안쓸것이다.
      • 참조 빈도와 참조 시간은 정확히 일치하지 않습니다.
    • MFU (Most-Frequently-Used)
      • 참조 횟수가 가장 많은 페이지를 교체
      • 최근에 참조가 된 페이지는 앞으로 덜 쓸것이다.
      • 참조 횟수가 적은 페이지는 최근에 적재되었고 앞으로 참조될 가능성이 높을 것이라는 직관에 의존
  • 프레임 할당 알고리즘 (frame allocation)
  • 요구 페이징은 시스템 성능에 많은 영향을 준다.
  • 페이지 교체 알고리즘의 목표 : Page Fault Rate의 최소화
  • Page Fault : 접근하려는 페이지가 메모리에 없는 상태
  • 페이지 버퍼링
    • Demand Paging의 디스크 I/O를 개선하는 방법
      • 가용 프레임 집합 유지
      • 변경된 페이지 목록 유지
      • 가용 프레임의 이전 페이지 번호 저장