4-1. Memory hireachy

메모리 시스템은 저장 장치의 계층구조이다. 아래 그림에서 위로 갈 수록 용량이 적고 비싸지만 빠르게 접근 할 수 있다.

여기서 좋은 Locality를 갖는 프로그램들은 좀 더 상위 메모리 계층의 데이터에 접근하려는 경향이 있으며 더 빨리 돌게 된다.

마21.png

4.2 CPU가 메인메모리의 데이터를 읽는 방법

먼저 SRAM과 DRAM에 대해 알아보자. SRAM은 캐시 메모리로 사용되며 비싸고 더 빠르고 전력 소비도 크며 1 bit 저장하는데 트랜지스터가 6개 필요하다. DRAM은 메인 메모리와 그래픽 시스템의 프레임 버퍼로 사용되며 DRAM 칩 내 셀들은 d 슈퍼셀들로 나누어지고 각각 w DRAM 셀로 이루어진다. 16 * 16 DRAM은 16 슈퍼셀에 슈퍼셀당 16비트를 가지므로 256 비트를 저장하는 것이다.

마22.png

CPU의 경우 주소 A를 system 버스에 보내고 I/O bridge는 이 신호를 메모리 버스로 보내게 된다.

메인 메모리는 메모리 버스로부터 주소 신호를 받고 DRAM에서 데이터를 가져온다.

마23.png

DRAM은 위에서 말했듯이 슈퍼셀들이 n개의 비트를 가지는 형태이다. 슈퍼셀은 2차원 배열로 이루어져 있다. 예로 A가 있는 슈퍼셀의 주소를 (2,1) 처럼 2차원 배열로 주소를 지정할 수 있는 것이다. 만약 (2,1)의 정보를 원한다고 하면 CPU는 메모리 컨트롤러를 통해 DRAM에게 행 정보를 보낸다. (이 과정을 RAS)라고 한다. DRAM은 행 2의 전체 내용을 Internal row buffer에 저장한다. 메모리 컨트롤러가 다시 열 주소 1을 보내면 (이 과정은 CAS) DRAM은 internal row buffer에서 해당 column을 찾아 8비트 데이터를 복사해서 메모리 컨트롤러로 보낸다.

쨋거나 (2,1)에 해당하는 데이터 x 값을 읽어온 후 다시 버스를 통해 레지스터 %rax에 이 값을 복사할 수 있다. (movq %rax, A)