Main memory ↔ Disk 간의 메모리 매핑에 대해 살펴보겠습니다.
메모리 계층 구조
이번 글에서는 main memory (주 기억 장치)와 secondary memory (보조 기억 장치)간의 접근 방식에 대해 살펴보겠습니다.
Virtual memory
-
각각의 프로그램은 프로그램만의 가상 주소 공간을 가지는 것처럼 컴파일됨
→ virtual 주소를 physical 주소로 변환할 수 있어야 함
-
파란색인 물리 주소 정보와 빨간색인 캐시 정보를 동시에 확인해서, 먼저 도착하는 데이터를 CPU로 보냅니다.
A. cache hit인 경우, cache 속도가 더 빠르므로 더 먼저 도착합니다. 그리고 나중에 도착한 정보는 무시합니다.
B. cache miss인 경우, cache miss라는 정보를 먼저 수신하고, 나중에 메모리에서 도착한 정보를 사용합니다.
메모리 접근 순서도
-
프로그램 내부의 가상 주소를 변환하기 위해서 TLB에서 가상 주소에 해당하는 해당 물리 주소 값이 있는지 확인
- 없으면(miss), Page table로 이동해서 해당 페이지가 있는지 확인
- 없으면(page fault), Disk까지 접근해서 페이지 교체 후, TLB까지 변경 사항을 반영
-
물리 주소를 얻었으면, 메모리내 해당 물리 주소내 데이터가 cache에 있는지 확인
- 있으면(hit), cache에서 원하는 데이터를 빠르게 반환
- 없으면(miss), memory로 접근해 해당 데이터를 cache에 새롭게 쓰고, 데이터를 반환
TLB와 cache간의 관계
프로세스는 가상 메모리 주소를 사용해서 먼저 TLB, Page table를 거쳐 물리 주소를 구하고 이 물리 주소가 Cache에 있는지 확인합니다.
TLB → Page table → Cache
모두 hit하는 것이 가장 이상적인 경우이지만 항상 그럴 수는 없습니다.
위의 3 계층 모두 miss가 발생하는 경우, 이를 page fault라고 하며, 매우 느려지는 원인이 됩니다.
- TLB에서의 hit / miss 여부는 cache의 hit / miss 와는 관계가 없음
- TLB가 hit인데 page table이 miss인 경우와 page table에 해당 정보가 없는데 cache가 hit인 경우는 존재하지 않음
- Page table에 없는 내용은 cache에도 없음