메모리 계층 구조

메모리 계층 구조()란 메모리를 필요에 따라 여러 가지 종류로 나누어 둠을 의미한다. 이때 필요한 대부분의 경우 CPU가 메모리에 더 빨리 접근하기 위함이다.  일반적으로 오른쪽 그림1과 같이 나타낸다. 레지스터와 캐시는 CPU 내부에 존재한다. 당연히 CPU는 아주 빠르게 접근할 수 있다. 메모리는 CPU 외부에 존재한다. 레지스터와 캐시보다 더 느리게 접근 할 수 밖에 없다. 하드 디스크는 CPU가 직접 접근할 방법조차 없다. CPU가 하드 디스크에 접근하기 위해서는 하드 디스크의 데이터를 메모리로 이동시키고, 메모리에서 접근해야 한다. 아주 느린 접근 밖에 불가능하다.

메모리 계층 구조의 필요성
CPU는 작은 메모리에 더 빨리 접근할 수 있다. 다음과 같은 관점들로 CPU가 작은 메모리에 더 빨리 접근할 수 있는 이유를 설명하고자 한다.

디코딩 속도
크기가 1k인 메모리와 크기가 2k인 메모리가 각각 다른 CPU에 연결되어 존재하다고 하자. 2k인 메모리는 1k인 메모리 2개로 이루어져 있다. 1k인 메모리는 CPU와 DATA bus로 직접 연결되면 된다. 반면 2k인 메모리는 디코더를 통해 CPU가 두 1k인 메모리중 어느 쪽에 접근하기 원하는지 알아야 한다. 다음 그림 2를 살펴보자.

CPU는 3개의 버스를 통해 메모리에 접근한다. 주소전달 버스는 CPU가 메모리의 어느 부분의 데이터를 접근할지 나타낸다. 데이터 전달버스는 CPU가 접근한 메모리 부분에서 CPU로 데이터를 보내거나, CPU에서 메모리로 데이터를 보내는데 사용된다. 컨트롤 신호버스는 CPU가 메모리에 접근할지 안할지를 나타낸다. 주소전달, 데이터 전달 버스에 어떤 값이 있다 하더라도 컨트롤 신호를 보내주지 않으면 CPU와 메모리는 아무런 일도 할 수 없다. 그림2와 같은 경우엔 컨트롤 신호를 보내는 즉시 CPU가 메모리에 접근할 수 있을 것이다. 반면 그림3을 보자.

1k 메모리 2개를 사용해 2k 메모리로 사용하고 있다. CPU는 두 메모리중 자신이 원하는 메모리에 접근해야 한다. 이 경우 한 메모리에는 컨트롤 신호를 전송하지 않고, 다른 한 메모리에 컨트롤 신호를 전송함으로써 둘 중 한 메모리에만 접근할 수 있다. 문제는 디코딩에도 시간이 든다는 점이다.

만약 2k가 아니라 4k의 메모리를 사용한다면, 디코딩하는데에는 더 많은 시간이 소요된다. 최근에 사용하는 메모리가 기가바이트 단위임을 감안하면, CPU가 어떤 메모리에 접근하려면 아주 많은 디코딩 시간이 들 것을 예상할 수 있다.

이러한 관점에서 CPU가 빠르게 데이터에 접근하기 위해서는 데이터를 저장하는 메모리가 작아야 한다. 실제로 레지스터는 캐시보다 더 작은 용량을, 캐시는 메모리보다, 메모리는 하드 디스크보다 더 작은 용량을 가진다. 메모리 구조 그림1에서는 위 즉 높은 속도에 있는 장치가 더 작은 크기를 차지하는 방식으로 이를 표현했다.

자주 쓰는 데이터는 계속 자주 쓰인다
이는 컴퓨터 과학에서 증명된 법칙인데, 큰 메모리를 사용한다고 해도 그 안의 모든 데이터를 고르게 접근하지 않는다. 자주 쓰이는 데이터는 계속 자주 쓰이고, 자주 쓰이지 않는 데이터는 계속 자주 쓰이지 않는다. 이를 이용해서 운영체제나 CPU는 자동으로 자주 쓰이는 데이터, 또는 자주 쓰일 것 같은 데이터를 메모리에서 캐시로 읽어온다. 자주 쓰이는 데이터는 전체 데이터 양에 비해 작은 양이기 때문에, 캐시는 메모리보다 더 작아도 된다. 메모리와 하드 디스크의 관계도 마찬가지이다.

경제성
레지스터, 캐시, 메모리, 하드 디스크는 하드웨어적으로 만들어지는 방법이 다를 때가 많다. 그리고 메모리 구조에서 상층에 속할수록 더 비싸다. 비싼 하드웨어는 꼭 필요한 만큼의 크기만 사용하고, 싼 하드웨어를 넉넉한 크기만큼 사용하기 때문에 메모리 계층 구조가 피라미드 모양으로 나타나는 것이다.

각주 

컴퓨터 메모리
계층