이전까지의 중연 부연 횡설 수설 하는 모습을 벗고, 비교적 간단하고 알기 쉽게 설명하겠습니다.

Concept of Locality

1. 대전제
상위 계층과 하위 계층사이에는 병목현상이 존재한다.

2. Temporal Locality
하위 계층에서 가져온 데이터는, 다음번에 다시 쓰일 수 있다. 그러므로, 다시 사용할때는 하위 계층에서 다시 가져올 필요 없이, 저번에 가져온 데이터를 사용하면 된다.
(e.g. 루프.)

3. Spartial Locality
순차적으로 구성된 데이터의 흐름이 필요한 경우가 있다. 그러므로, 한번 하위 계층에서 데이터를 가져올 때, 연속된 데이터의 unit 을 가져올 경우, 순차적인 다음번에 위치한 데이터가 요구될때 하위 계층에 다시 접근하지 않아도 된다.
(e.g. 순차적 배열의 접근)

Memory Hierarchy

효율성에 따라 메모리는 계층구조로 이루어지며, 상위계층일수록 빠른 속도를 보장하며, 하위계층일수록 저렴한 가격을 보장한다.


메모리 계층의 기본 구조.
  • 메모리 계층 구조에는 여러 다른 레벨의 메모리가 있다.
  • 최상위 레벨의 메모리 계층은 … 을(를) 가진다.
    • 가장 높은 성능
    • 가장 높은 가격
    • 가장 적은 용량
  • 계층을 내려올때마다, 각 레벨은
    • 성능이 줄어들고
    • 가격이 낮아지고
    • 용량이 늘어난다
  • 실행중에, 높은 레벨의 계층으로 옮겨지는 데이터 값들은, 빈번히 낮은 레벨의 메모리 계층으로 반영(shadow) 된다.
  • 실행중에 요구되는 모든 데이터 값들이 동시에 가장 CPU 에 근접한 계층에 존재할 수 있는 것은 아니다.

Register

레지스터는 메모리 계층구조에서 가장 상위 계층으로서, 가장 빠른 속도와, 가장 적은 capacity 를 제공한다. 보통 개개의 레지스터는 그 프로세서의 word 크기이며, 현재 주로 사용되고 있는 인텔 i386 계열 프로세서들의 범용 레지스터의 크기는 32bit 이다.

요즈음의 RISC 구조 프로세서에서는, 모든 연산의 연산자들로 레지스터만 허용하므로, 이 제한된 숫자의 레지스터들을 어떻게 관리하느냐가 성능 향상의 주안점이다. 가령, 빈번하게 요구되는 변수는 계속 가지고 있는다던지, 아니면 한동안 쓰임이 없는 변수를 레지스터에서 버린다던지 하는 일이다. 물론, 이 일(optimal register allocation)은 컴파일러에서 담당한다.

Chache

캐쉬의 목적 : 어떻게 하면 최대한 메모리 참조를 적게하고 레지스터로 옮길 수 있을까.

Main Memory (Virtual Memory System)

가상 메모리의 목적 : 그래.. 메인메모리까지는 참을 수 있어. 참을 수 있다고.. 그런데, 최대한 디스크까지 가는일만은 피해보자.

Secondary Storage

보조 저장공간의 목적 : 많이.. 무결하게.. 덤으로 빠르면 좋고..


그렇다면 토론해 봅시다.

  • 이 페이지는 여러분들의 것입니다.

Q: Spartial Locality의 의미는 하위계층에 이왕 한번 접근하는거 그때 유닛단위로 묶어서 여러개 가져와서 나중에 필요할때 쓴다는 말인가여? 그렇다면 그렇게 유닛 단위로 묶는 기준은 뭐에여? - 상협

A: 각각의 계층마다 다릅니다. 캐쉬에서 쓰이는 unit 과 가상메모리에서 쓰이는 page 의 크기 차이는 큽니다. 다만, spartial locality 를 위해서 사용된다는 점은 같겠죠.. 좀더 상세한 설명을 원하신다면.. 제게 개인적으로 물어보시거나, 아니면 공부 하시길 -zennith

Retrieved from http://wiki.zeropage.org/wiki.php/zennith/MemoryHierarchy
last modified 2021-02-07 05:31:47