[운영체제] 가상 메모리란?

Ko Seoyoung·2021년 5월 23일
0

가상 메모리

  • 메모리란? https://www.youtube.com/embed/dgMeWRy84l8
    (이 동영상이 제일 직관적으로 알기 쉬움)

  • 물리 메모리 크기의 한계를 극복하기 위해 나온 기술

    → 물리 메모리보다 큰 프로세스를 수행하기 위해 사용

    → ? 뭔소리야 🤔, 100MB 메모리 크기에서 200MB 크기의 프로세스를 어떻게 돌려

  • 가상 메모리의 핵심은 필요한 부분만 메모리에 적재(부분적재)하는 것!

    → 프로세스를 실행할 때, 실행에 필요한 부분만 메모리에 올린다 (적재 여부를 페이지테이블에 표시)

    실행될 가능성이 낮은 코드 (ex) 오류 처리 코드 등), 과도하게 크게 선언된 데이터 영역(ex) 행렬, 리스트 및 테이블은 실재로 필요한 크기 이상으로 프로그램에서 선언되어 할당됨), 프로그램의 옵션 부분을 처리하느 코드 등은 굳이 메모리에 적재될 필요가 없다!

    ⇒ Locality of Reference 성질: 프로그램의 어느 한 특정 작은 부분만 한동안 집중적으로 참조하는 현상 (Principle of Locality)

    ⇒ 한정된 크기의 실제 메모리를 효율적으로 사용하는 방법 필요

    → 프로세스의 일부분은 페이지 단위 또는 세그먼트 단위지만 현재는 대부분 페이지 단위 사용 (세그먼트 기법 & 페이지 기법)

  • 현재 필요한 페이지만 메모리에 올리는 것을 요구페이징이라고 한다.

⇒ 페이징과 스와핑을 합쳐놓은 형태라고 생각하면 쉽다. 메모리를 페이지 단위로 나누어 페이지 테이블을 통해 물리 메모리에 맵핑을 하는데, 필요한 페이지만을 스와핑을 통해 메모리에 올리고 나머지는 하드디스크에 두는 방식이다.

  • 🤓 page table: A는 4번에 있고, C는 6번에 있고, F는 9번에있어~

    → valid-invalid bit로 알 수 있음.

  • 유효/무효 비트(Valid-invalid bit)란? 현재 메모리에 페이지가 있는지 없는지를 나타내는 비트 (있다면 1, 없다면 0)

  • 오염비트(dirty bit, modify bit): 페이지 대치 시 디스크로 다시 출력 (write back) 필요 여부 판정 필요, 페이지 적재 후 변경 유무를 표시


요구페이징(Demand Paging)

(페이징 기법: 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억 장치(보조 기억 장치)로부터 데이터를 저장하고 검색하는 메모리 관리 기법이다)

  • CPU가 해당 페이지를 요구할 때까지 그 페이지를 메모리에 올리지 않는 방식 (즉, 한번도 접근되지 않는 페이지는 물리 메모리에 전혀 적재되지 않는다)
  • 페이지 부재(page fault)가 발생하면 그 때 트랩을 걸어 해당 페이지를 적재

[페이지 부재를 처리하는 과정]

1) 특정 페이지를 실행하기 위해 페이지 테이블을 참조하여 메모리가 올라와있는지 여부를 확인 (valid-invalid bit 확인)

2) 페이지가 메모리에 올라와 있지 않은 경우 (page fault, invalid인 경우) MMU가 인터럽트를 발생시킴 (🤔 NMU: 아 잠깐 이페이지없는데?)

  • MMU(Memory Management Unit): CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품으로 가상 메모리와 실제 메모리 사이에서 주소 변환 역할을 한다. (논리 메모리 주소 → 물리 메모리 주소로 변환)

3, 4) 운영체제는 해당 프로세스를 wait 상태로 만들고 요구된 페이지를 하드디스크에서 찾아 메모리의 자유프레임(free frame)(빈공간)에 적재

  • 프레임 vs 페이지?

5) 페이지 테이블 갱신 (i → v)

6) 트랩에 의해 중단되었던 명령을 다시 수행: wait상태인 해당 프로세스를 다시 ready → running 하여 작업 재진행

가상 메모리를 만드는 방법은 대표적으로 두 가지(요구 페이징, 요구 세그먼트)가 존재하지만, 대부분 요구 페이징을 사용하므로 가상 메모리와 요구 페이징을 같은 용어로 사용하는 경우가 많다.

프로그램 부분 적재의 이점

  • 프로그램의 크기가 물리적인 용량에 무관
  • 더 많은 프로그램이 메모리를 공유하여 CPU 사용률과 처리율(Throughput)을 향상함
  • 주소 결속을 실행 시간에 할 수 있음
  • 결국, 페이지 부재율(page-fault rate)을 낮추어 성능을 높이는 것이 문제!

그럼 물리 메모리가 다 차면 어떡하지? 🤷‍♀️

페이지 대치(교체)

  • 물리 메모리에 여유가 없을 때 희생될 페이지를 찾아 대치

  • 페이지 부재율(page fault) 최소화하기 위해서는 페이지 교체를 '잘' 해야한다!

페이지 대치 알고리즘

  1. 최적 대치 알고리즘
  2. FIFO
  3. LRU
  4. LRU 근사 알고리즘
    • Additional Reference Bit 알고리즘
    • Second Chance 알고리즘
    • LFU(Least Frequently Used)
    • MFU(Most Frequently Used)
profile
Web Frontend Developer 👩🏻‍💻 #React #Nextjs #ApolloClient

0개의 댓글