가상 메모리 (Virtual Memory)


공부한 내용을 복기하기 위해 짧게 정리해둔 요약본입니다 :)



가상메모리란

프로세스 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법

프로세스는 가상주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 / 쓸대만 물리주소로 바꾸어 주면 된다

  • virtual address (가상주소): 프로세스가 참조하는 주소
  • physical address (물리주소): 실제 메모리 주소


가상메모리 사용 이유

실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기에 한계가 있다.

  • 실제 메모리 크기보다 큰 프로그램(프로세스)를 실행하기 위해 사용
  • 실행되는 프로그램의 일부만 실제 메모리를 할당하여 실행하여 물리적 메모리의 제약을 최소화 하기 위해 사용


MMU(Memory Management Unit)

CPU에 코드 실행시, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치


가상메모리와 MMU

CPU는 가상 메모리를 다루고, 실제 해당 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리에 접근한다 스크린샷 2024-05-08 오후 3 48 55

  • 프로세스 생성시, 페이지 테이블 정보가 생성
    • PCB등에서 해당 페이지 테이블 접근이 가능하고, 관련 정보는 물리 메모리에 적재
    • 프로세스 구동시, 해당 페이지 테이블 base주소가 별도 레지스터에 저장 (CR3)
    • CPU가 가상 주소 접근시, MMU가 페이지 테이블 base 주소를 접근해서 물리 주소를 가져옴


페이징과 세그멘테이션

메모리 관리자는 프로세스를 어떻게 나누어서 물리 메모리에 올릴지 결정한다. 이때 사용되는 방식이 페이징(고정 분할 방식)과 세그멘테이션(가변 분할 방식)이 있다

  • 페이징 (고정 분할 방식)
    • 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리한다
    • 페이지 번호를 기반으로 가상 주소 <-> 물리 주소 매칭 정보를 기록하여 사용한다

    • 페이징 시스템
      • 프로세스의 PCB에는 Page Table 구조체를 가리키는 주소가 들어있다.
      • Page Table에는 가상 주소와 물리 주소간 매핑 정보가 들어있다. 스크린샷 2024-05-08 오후 3 57 47
    • 페이징 시스템 구조
      • page 또는 page frame: 고정된 크기의 block (4KB == 32bit)
      • 가상 주소 v = (p, d)
        • p: 가상 메모리 페이지
        • d: p안에서 참조하는 위치 (페이지 처음부터 얼마 떨어진 위치인지) 스크린샷 2024-05-08 오후 4 00 42
        • ex) 페이지 크기 4KB
          • 가상 주소의 0~11 비트가 변위 (d)를 나타내고, 12비트 이상이 페이지 번호가 될 수 있다
    • 페이지 테이블
      • 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
      • PCB 페이지 테이블의 base 주소 + 페이지 번호 -> 해당 페이지에 매칭되는 물리주소 + 변위 (d)
    • 요구 페이징 (Demand Paging)
      • 프로세스 모든 데이터를 메모리로 적재하지 않고 실행 중에 필요한 시점에서만 메모리로 적재
    • 페이지 폴트 (page fault)
      • 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
      • OS가 page fault가 일어나면, 해당 페이지를 물리 메모리에 올린다
    • MMU와 TLB
      • MMU가 물리 주소를 확인하기 위해 메모리를 갔다와야 한다 스크린샷 2024-05-08 오후 4 11 07
    • 페이지 폴트와 인터럽트 스크린샷 2024-05-08 오후 4 14 05

    • 페이지 교체 정책 (page replacement policy)
      • OS가 특정 페이지를 물리 메모리에 올리려는데 물리 메모리가 다 차있는 경우, 특정 교체 정책을 통해 기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고 새로운 페이지를 해당 물리 메모리 공간에 올린다

        • FIFO
          • 가장 먼저 들어온 페이지 내리는 알고리즘
        • OPT
          • 앞으로 가장 오랫동안 사용하지 않을 페이지를 내리는 알고리즘
        • LRU
          • 가장 오래전에 사용된 페이지를 교체하는 알고리즘
        • LFU
          • 가장 적게 사용된 페이지를 내리는 알고리즘
        • NUR(페이지 스왑 알고리즘)
          • LRU와 마찬가지로 최근에 사용하지 않은 페이지부터 교체하는 알고리즘
    • 단점: 내부 단편화 발생 (페이지 블록만큼 데이터가 딱 맞게 채워져 있지 않을때 공간 낭비됨)
  • 세그멘테이션(segmentation)
    • 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하여 관리한다
    • 세그먼트 가상주소
      • v = (s, d): s는 세그먼트 번호, d는 블록 내 세그먼트 변위 스크린샷 2024-05-08 오후 4 23 00
    • 단점: 외부 단편화 발생 (물리 메모리가 원하는 연속된 크기의 메모리를 제공해주지 못하는 경우)


  • paging과 segmentation 기번

스크린샷 2024-05-08 오후 4 24 05