가상 메모리란 무엇일까? 

 

가상 메모리란 메모리가 실제보다 많아 보이게 하는 기술로, 각 프로그램에 실제 메모리 주소가 아닌 가상 메모리 주소를 할당한다. 이러한 방식은 멀티태스킹에서 자주 사용되며, 메인 메모리를 크게 보이게 하는 기술로 사용된다. 

 

이러한 가상 주소를 '가상 주소'(virtual address)또는 '논리 주소'(logical address)라고 부른다. 가상 주소 장치는 메모리 관리 장치에 의해 물리 주소로 변환되여 매핑된다. 

 

아래는 가상 메모리 주소가 실제 물리 메모리 주소로 어떻게 변환되고 매핑되는지 간략히 표현한 그림이다.

동작 과정을 설명하기전, 용어부터 간략히 알고 넘어가자.

 

  • 페이지 : 가상 메모리의 "페이지"는 캐시의 블럭과 같다. 위 그림에서 왼쪽 위의 테이블들을 보면, 총 12개의 인덱스가 존재하는데, 각 인덱스는 가상 메모리를 담고있는 "페이지" 라고 불린다.
  • 프로세서가 요청한 메모리가 가상주소 페이지에 존재하지 않으면, page fault라고 불리운다.
  • 물리 주소(physical address) : RAM 상에 존재하는 "실제" 데이터가 존재하는 주소이다.
  • 가상 주소 : 운영체제가 부여한 "가상"의 주소로 관리또한 OS에 의해 관리된다.

아래는 가상 메모리의 동작 과정을 간략히 표현한 그림이다.

 

가상 주소 -> 물리 주소의 변환 과정을 나타낸 그림

동작 과정은 대략 이러하다.

 

<위 그림안의 테이블에서 각 인덱스는 가상 페이지 번호를 나타낸다.>

1. 가상 메모리에서 요청한 주소를 따라 페이지 테이블로 이동한다. 페이지 테이블에서 원하는 주소가 있는 인덱스로 이동하여 valid bit을 확인한다. valid  bit는 항상 0 또는 1이다. 

 

2. Valid bit이 1이라면 물리 페이지 번호를 로드한다.

 

3. page offset(페이지 오프셋은 페이지의 시작점부터 원하는 데이터가 얼마나 먼 거리에 떨어져 있느냐를 판별할때 쓰이는데, 가상 주소와 물리 주소의 페이지 오프셋은 항상 같다. 그다음 이 오프셋과 로드된 물리 주소를 합쳐 물리 주소를 얻어낸다.

 

상당히 직관적이고 간단해 보인다.

 

위 그림에 보면 Page Table Register라는 레지스터가 보이는데,  이 레지스터는 일반적인 레지스터와의 역할이 다르다. 이 레지스터는 항상 메인 메모리 안의 페이지 테이블의 시작점을 가리킨다. 

 

메인 메모리 안의 페이지 테이블,,, 뭔가 이상한 점을 눈치 챘다면 캐시와 메인 메모리의 개념을 어느정도 이해하고 있는 것이다. 혹시나 개념을 모른다면 아래 글을 참고하면 좋을것 같다. 

 

https://jghdg1234.tistory.com/4

 

Memory Hierarchy(컴퓨터의 메모리 구조)

이번에는 컴퓨터의 메모리에 대해 조금 더 자세히 알아보자. 컴퓨터의 메모리 구조를 그림으로 간략하게 표현하면 아래와 같다.(물론 실제 메모리의 물리적인 모습은 훨씬 복잡하다.) 맨 위(레

jghdg1234.tistory.com

정말 간단히 요약하면, 캐시는 빠르고, 메인 메모리는 느리다. 그렇지만 페이지 테이블은 메인 메모리 상에 존재하므로 매번 프로세서에게 요청을 받을 때마다 메인 메모리에 접근하는것이다. 그렇다면, 메인 메모리에 접근하기 전에 더욱 빠르게 가상 주소를 물리 주소로 변환하는 방법은 없을까? 있다. 이 문제점을 해결하기 위해 나온것이 TLB(Translation Lookaside Buffer, 변환 색인 버퍼)이다. 

 

TLB는 CPU상에 존재하기 때문에 접근 속도가 메인 메모리보다 훨씬 빠르다. 또다른 fully-associative cache라고 생각하면 된다. 

 

동작 과정은 대략 이러하다.

 

1. TLB와 페이지 테이블을 동시에 확인한다.

 

2. TLB에 원하는 블럭을 찾으면(TLB hit) 물리 주소로 곧바로 매핑한다.

 

3. 찾지 못하면(TLB miss) 메인 메모리에 접근하며 페이지 테이블을 확인한 후, 물리 주소를 찾고 그 주소를 TLB의 빈 자리에 메인 메모리에서 찾은 주소를 보관해둔다. 그런데 만약 페이지 테이블에 조차 원하는 주소를 찾지 못하면 어떻게 될까?(page fault) 이 뒤로는 이제 OS의 영역이다. OS가 페이지를 어디선가 찾아오고 페이지 테이블을 업데이트 시켜 줄 것이다. 

 

아래는 TLB의 동작 과정을 간단히 나타낸 그림이다.

 

 

 

TLB를 이용한 가상주소 -> 물리 주소의 변환 과정을 나타낸 그림

맨 위부터 차례로 

 

1. 32비트 물리 주소를 두 부분으로 나눈다.(가상 페이지 번호, 가상 페이지 오프셋) - 가상 페이지 오프셋은 물리 페이지 오프셋과 항상 동일하게 매핑된다

 

2. 물리 페이지 번호를 얻기 위해서, TLB에 접근하여 모든 슬롯을 찾아본다. 원하는 태그를 찾으면, 물리 주소를 로드하여 물리 주소로 변환 시킨다. 이때, TLB miss가 발생하면 DRAM으로 내려가 page table을 확인한 후, page table에 원하는 주소가 있으면 TLB를 방금 찾은 Page table entry로 업데이트 한다.

 

3. 변환된 물리 주소를 다시 인덱스, 오프셋, 태그 비트를 추출 한 후 나머지 캐시 동작을 수행한다. 

 

캐시의 동작 과정을 잘 모르겠다면, 아래 글을 한번 읽어보면 좋을것 같다.

 

https://jghdg1234.tistory.com/5

 

컴퓨터 캐시의 동작 과정

메모리 , 캐시에 대한 기본적인 내용을 모른다면 앞의 글을 참고하면 좋을것같다. https://jghdg1234.tistory.com/4 Memory Hierarchy(컴퓨터의 메모리 구조) 이번에는 컴퓨터의 메모리에 대해 조금 더 자세히

jghdg1234.tistory.com

 

+ Recent posts