본문 바로가기

운영체제

가상 메모리(virtual memory)

728x90
반응형

Goal

  • 가상 메모리가 무엇인지 설명할 수 있다.
  • 페이징(paging), 세그멘테이션(segmentation)에 대해 설명할 수 있다.

관련 포스팅

주소 바인딩


가상 메모리(Virtual Memory)란?

실제 메모리 크기와 상관 없이 메모리를 이용할 수 있도록 가상의 메모리 주소를 사용하는 방법이다.

 

가상 메모리를 사용하면 다음과 같은 이점이 있다.

  • 실제 메모리(RAM) 크기 보다 더 큰 공간을 사용할 수 있다. (보조 기억장치 공간 사용)
  • 가상의 주소 공간을 사용하여 논리적인 연속성을 제공해준다.
  • 물리 메모리 주소 공간을 알 필요가 없어진다.

 

대표적인 가상 메모리 기법으로 페이징(paging), 세그멘테이션(segmentation)이 있다.

현대 운영체제에서는 두 가지 방식이 혼용되어 사용된다.

 

두 방식 모두 매핑 테이블 형태로 관리 된다.

  • 페이징 - 고정 분할 - 페이지 테이블
  • 세그멘테이션 - 가변 분할 - 세그멘테이션 테이블

virtual memory


페이징(Paging)

페이징이란 고정 크기로 분할된 페이지(page)를 통해 가상 메모리를 관리하는 기법이다.

 

  • 페이지(page) : 가상 메모리를 고정 크기로 나눈 블록
  • 프레임(frame) : 실제 메모리를 페이지와 같은 크기로 나눈 블록 (= 페이지 프레임)

프레임과 페이지는 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이며, 프레임과 페이지의 크기는 같다.

 

페이지와 프레임간의 관계

  • Vitual Memory의 page가 하나의 frame을 할당 받으면, 물리 메모리에 위치하게 된다.
  • 프레임을 할당 받지 못한 페이지들은 외부 저장장치에 저장되며, 이때도 프레임과 같은 크기 단위로 관리된다.

 

페이지 테이블(Page Table)

프로세스의 페이지 정보를 저장하고 있는 테이블

=> page에 매핑되는 frame을 찾을 때 참조한다.

 

페이지 테이블 정보

  • key(or index) : 페이지 번호
  • value
    • page와 매핑된 frame번호
    • 기타 플래그 정보(페이지 존재 여부, 읽기/쓰기 권한, 접근 권한 등)

 

페이징 기법에서의 주소 바인딩 과정

<P, d> -> <f, d>

 

P : 페이지 번호

d : 변위

f : 프레임 번호(또는 프레임 시작 주소)

 

  1. CPU에서 사용하는 logical address는 페이지 번호(P)와 변위(d)로 구성
  2. Page Table에서 페이지 번호에 해당하는 프레임 시작 주소를 찾는다.
  3. 프레임 시작 주소(f) + 변위(d)를 통해 물리 주소를 계산하여 실제 물리 주소에 접근

 

이러한 변환 과정은 MMU에서 이루어 지며, 페이지 정보가 캐싱 되어 있을 경우 TLB를 통해 빠르게 접근하도록 한다.

 

그렇다면 어떻게 캐싱 되어 있는지 알 수 있을까?

페이지 테이블은 PTE라고 하는 레코드를 갖는데, 이 PTE를 통해 캐싱 되어 있는지 알 수 있다.

 

페이지 테이블 엔트리(PTE, Page Table Entry)

PTE

페이지 테이블의 레코드로 프레임 번호와 여러 플레그로 이루어져 구성되어 있다.

 

포함 정보

  • Frame Number : 프레임 번호
  • Present/Absent : 메인 메모리에 페이지가 존재하는지 확인하는 비트 필드 => 이를 통해 page fault 판별이 가능
  • Protection : 읽기만 가능한 경우 0, 읽기 쓰기 모두 가능한 경우 1
  • Reference : 참조 비트 (최근 참조 됐는지 판단하여 페이지 교체 알고리즘을 적용 시킬 수 있음)
  • Caching : 해당 페이지를 캐싱할지 선택
  • Dirty (or modified bit) : 오염 또는 수정 여부를 판단하는 비트로, 페이지 내용이 변경됐음을 알려 페이지 교체시 하드 디스크에 다시 기록하게 한다.

 

요구 페이징(Demand Paging)과 페이지 부재(Page Fault)

  • 요구 페이징(Demand Pagin) : 요청할 때 해당 페이지를 메모리로 가져오는 것
  • 페이지 부재(Page Fault) : 요청한 페이지가 메모리에 존재하지 않는 경우를 말한다.

 

설명

요구 페이징(Demand Paging)은 가져 오기 정책(fetch policy)중 요구 적재(demand fetch)에 해당하는 방법으로, 한정된 메모리 공간을 효율적으로 관리하기 위해 사용되는 방법이다. ( <-> Anticipatory Paging : pre-fetch 방식 )

 

페이지 부재(Page Fault)는 요구 페이징을 사용할 때 발생할 수 있는 상황으로, 페이지 부재가 발생하면 필요로하는 페이지를 스왑 영역에서 메모리로 옮겨야 한다.

 

페이지 교체(Page replacement)

페이지가 메모리에서 올라오고 쫒겨나고를 반복하기 때문에, 어떤 페이지가 쫒겨나야 하는지 결정 해줘야 한다.

이를 결정해주는 알고리즘을 페이지 교체 알고리즘이라고 한다.

 

ex) FIFO, LRU, LFU, NUR 등...

 

페이지 교체시 오버헤드가 발생하기 때문에 최대한 페이지 부재가 일어나지 않도록 적절한 알고리즘을 적용해줘야 한다.

 

스레싱(Thrasing)

잦은 페이지 부재로 인해 페이지를 교체 하는 시간이 많아져 CPU처리율이 저하되는 현상

 

메모리 부족, 부적절한 페이지 교체 등이 원인이 될 수 있다.

cach hit rate와 관련 있음

 

<참고> 스레싱 - 도리의 디지털 라이프

 

세그멘테이션, 페이징 혼용

*STBR(segmentation table base register)

*PTBR(page table base register)

 

ex)

  • segment table을 통해 code, data, stack, heap과 같은 세그먼트를 구분하여 page table을 찾음
  • page table을 통해 해당 page에 해당하는 frame을 찾는다.
  • frame 번호와 변위(offset)을 통해 실제 메모리 주소를 찾는다.

 

 

 

<참고>

x86에서 가상메모리 동작 예시

x86 paging 위키백과

 

References

www.gatevidyalay.com/paging-memory-management-operating-system/

728x90
반응형