메모리 시스템은 여러 가지 용량, 비용, 접근시간을 갖는 저장장치들의 계층구조다.
CPU 레지스터들은 가장 자주 이용하는 데이터를 보관한다.
작고 빠른 캐시 메모리는 CPU 부근에서 비교적 느린 메인 메모리에 저장된 데이터와 인스트럭션들의 부분집합에 대한 준비장소로 사용된다.
메인 메모리는 크고 느린 디스크들에 저장된 데이터를 준비하는 데 사용되고, 다시 이 디스크들은 네트워크로 연결된 다른 머신들의 디스크나 테이프에 저장된 데이터를 위한 준비장소로 사용된다.
랜덤-접근 메모리(RAM)은 정적 램과 동적 램으로 분류된다.
정적 램(SRAM)은 캐시 메모리로 사용되고, CPU칩 내부 또는 외부에 장착되며 동적 램보다 더 빠르다.
동적 램(DRAM)은 메인 메모리와 그래픽 시스템의 프레임 버퍼로도 사용된다.
DRAM과 SRAM은 휘발성 메모리이다.
일부의 비휘발성 메모리는 읽기 작업 뿐만 아니라 쓰기 작업도 가능하지만, 이들은 모두 Read-only Memory(ROM)라고 부른다.
ROM은 재기록 될 수 있는 횟수와 이들을 재기록하는 방법으로 구별된다.
'버스'라고 하는 공유된 전기회로를 통해서 데이터를 프로세서와 DRAM 메인 메모리 간에 앞뒤로 교환된다.
CPU와 메모리 간의 매 전송은 버스 트랜잭션(bus transaction)이라고 부르는 단계들을 통해서 이뤄진다.
읽기 트랜잭션은 데이터를 메인 메모리에서 CPU로 이동시키고, 쓰기 트랜잭션은 CPU에서 메인 메모리로 이동시킨다.
디스크는 RAM 메모리의 수천 메가바이트 단위에 비해 수백에서 수천 기가바이트 단위의 엄청난 양의 데이터를 저장하는 저장장치다.
SSD(Solid State Disks) 패키지는 I/O 버스의 표준 디스크 슬롯에 삽입되고, 논리 디스크 블록을 읽고 쓰기 위해 CPU로부터 요청을 처리한다.
캐시(cache)는 보다 크고 느린 디바이스에 저장된 데이터 객체를 위한 준비 영역으로 사용하는 작고 빠른 저장장치다.
메모리 계층구조에서 저장장치는 블록이라고 하는 연속된 데이터 객체 블록으로 나뉜다.
각 블록은 유일한 주소 또는 이름을 가지며, 이들은 자신을 다른 블록과 구분해준다.
어떤 프로그램이 레벨 K+1로부터 특정 데이터 객체 d를 필요로 할 때, 먼저 현재 레벨 k에 저장된 블록들 중의 하나에서 d를 찾는다.
만일 d가 레벨 k에서 우연히 캐시되어 있다면, 이 경우를 캐시 적중이라고 부른다.
반면, 만일 데이터 객체 d가 레벨 k에서 캐시되지 않는다면 캐시 미스가 발생한 것이다.
미스가 존재할 때, 레벨 k에서의 캐시는 레벨 k+1에 있는 캐시로부터 d를 포함하는 블록을 가져오며, 만일 레벨 k 캐시가 이미 꽉 찬 상태라면 기존 블록에 덮어쓰기도 한다.
기존 블록을 덮어쓰는 과정은 블록을 교체하거나 축출하는 방식에 의해 이뤄진다.
축출되는 블록은 희생블록이라고 부른다.
어떤 블록을 교체할지에 관한 결정은 캐시의 교체 정책에 의해 정해진다.
최근에 가장 덜 사용한(LRU: Least Recently Used) 교체 정책을 갖는 캐시는 가장 과거에 접근한 블록을 선택한다.
초기 컴퓨터 시스템의 메모리 계층구조는 세 단계로 구성되었다: CPU 레지스터, 메인 메모리, 디스크 저장장치
그러나 CPU와 메인 메모리 간의 커져가는 차이로 인해 시스템 설계자들은 L1 캐시라고 부르는 작은 SRAM 캐시 메모리를 CPU 레지스터와 메인 메모리 사이에 끼워 넣게 되었다.
CPU와 메인 메모리 사이의 성능 격차가 지속적으로 커짐에 따라 시스템 설계자들은 추가적으로 좀 더 큰 캐시인 L2 캐시를 L1 캐시와 메인 메모리 사이에 삽입하는 것으로 대응하였다.