컴퓨터(Computer Science)/컴퓨터구조(Computer Arichitecture)

캐시, Cache 와 메모리 종류 - 기본 개념 [컴퓨터구조]

게임이 더 좋아 2021. 6. 20. 19:35
반응형
728x170

 

메모리에서

Cache, Main memory, Secondary Memory  3가지로 나누어지는데

이 중 우리가 가장 중요하다고 생각하는 캐시에 대해서 알아보자

넥슨캐시 이런거 아니다. cash (x)

다만 발음은 똑같다.

그래서 캐시를 말할 때 L1 cache를  -> L1 $이라고도 표현한다.

 

 


 

일반적으로 메모리는 이렇게 발전했다.

 

빠를수록 용량이 작고 비싸다.

 

 

하지만 점점 발전하고 기술이 발전해서 여기까지 온거다.

메모리의 중요성도 커지고 있다.

 

현재는 DRAM을 Main Memory로 보편적으로 씀

 


 

SRAM이 뭔데?

 

 

단순한 집적회로로 읽기, 쓰기를 제공하는 접근 포트가 하나밖에 없는 메모리 배열이다.

**SRAM은 읽기 접근 시간과 쓰기 접근 시간이 다를 수는 있지만, 데이터의 접근시간은 같다.

** SRAM은 리프레시가 필요 없으므로 접근 시간은 사이클 시간과 같다.

 

SRAM은 읽을 때 정보가 바뀌지 않게 하기 위하여 비트당 6-8개의 트랜지스터를 이용한다.

SRAM은 대기 모드에서 데이터 값을 유지하기 위해 최소한의 전력만 사용한다.

과거에는 SRAM을 많이 썼지만  요즘은 안 쓰는 추세라서 사라진 기술이 되었다.

(라고 울 교수님이 말하더이다.)

 

 


 

DRAM은 뭔데??

 

 

 

커패시터에 전하를 저장함으로써 데이터가 저장되고

하나의 트랜지스터를 저장할 때 이용한다.

 

DRAM은 저장된 비트 하나 당 트랜지스터 하나만 사용하므로

SRAM에 비하여 훨씬 더 집적도가 높고 값도 싸다. 

커패시터를 사용하기 때문에 정보를 유지하려면 주기적으로 Refresh 작업이 필요하다.

 

 

DRAM의 성능은 아래와 같이 3가지정도 요소에서 발전하면 성능이 좋아진다.

 

 

DRAM은 기술력의 발전으로 싸져서 보급이 많이되고 있다.

 

셀을 리프레시하기 위해서는 단순히 저장된 값을 읽고 다시 쓰면 된다???? 맞다. 

 

전하는 ms 단위로 유지될 수 있는데 모든 비트를 하나씩 DRAM에서 읽어서 다시 쓴다면, 계속 DRAM을 리프레시해야 하므로 기억된 값에 접근할 시간이 없게 된다. 

 

그렇지만 다행히 DRAM은 2 단계 디코딩 구조를 가진다. 

구조는 읽기 사이클에서 전체 행을 한꺼번에 읽은 후 바로 쓰기를 하여 한 행을 통째로 리프레시할 수 있다.

 

리프레시에 도움이 되는 행 구조는 성능향상에 도움이 된다.

 

성능을 향상시키기 위하여 DRAM은 행을 버퍼에서 반복적으로 접근한다.

**버퍼는 SRAM과 같이 동작한다.

즉, 다음 행에 접근할 때까지는 주소 값만 바꾸면 버퍼 내의 아무 비트에나 접근 할 수 있다.

 

프로세서와 인터페이스를 더욱 향상시키기 위해 DRAM은 클럭을 추가할 수 있는데 이것을 동기화 DRAM 또는 SDRAM이라고 부른다. 

SDRAM의 장점은 클럭을 사용하므로 메모리와 프로세서를 동기화하는 시간이 필요 없다는 것이다.

 

++동기화 DRAM 속도가 빠른 이유가 추가 주소지정 대신 클럭이 연속적인 비트들을 버스트 모드로 전송할 수 있게 하기 때문이다. 

 

++가장 빠른 버전은 DDR(Double Data Rate)라고 하고 SDRAM이라고 부른다. 

// 즉, 클럭의 상승 edge, 하강 edge에서 각각 데이터가 전송된다는 것을 의미한다.

// 아마 DDR5까지 나왔지?? 대역폭도 숫자가 커질수록 2배가 된다.

 

최근에 1기가에 만원정도 하는 것 같다.

20년에 컴퓨터 맞추려고 알아봤을 때 그정도 했던 것같다.

 

 


 

 

이번엔 플래시 메모리(Flash Memory)를 보자

 

간단한게만 알아보자.

 

플래시 메모리는 전기적으로 지울 수 있고 프로그래밍이 가득한 ROM의 한 종류이다.

디스크나 DRAM과는 달리 플래시 메모리의 쓰기는 비트를 마모시킨다.

 

즉, 플래시 메모리의 수명을 늘리려면 블록의 사용빈도수를 다 비슷하게 해야한다.

Remapping, 재사상을 해서 쓰기를 분산시킨다.(제어기에 들어있다)

** wear leveling(마모 균등화)라고 한다.

 

 


 

메모리가 왜 중요하게 되었느냐?

 

 

프로세서는 엄청나게 빠른속도로 발전했지만

메모리는 그에 미치기 어려웠다.

 

그래도 발전하면 되는거아냐??

그게 아니다.

 

만약 요리사가 요리를 만드는 것이 10분에서 10초로 줄었지만

요리재료는 여전히 10분이 1인분씩만 제공한다..

결국 10분 실력 요리사가 10인분 만드는 시간이나 10초 실력 요리사가 10인분 만드는 시간이 같다는 얘기다.

근데 월급(전력)을 10초실력 요리사가 더받는다.

점장(PC 사용자)로써 화나지 않겠는가?

 


 

그것이 바로 Memory Wall이다.

 

 

CPI는 시간이 지남에 따라 감소하는 반면에

Access시간은 시간이 지남에 따라 증가한다.

결국 프로세서가 성능이 높아져도 메모리 접근에 제한을 받아서 성능 향상이 어려워진다는 말이다.

 

 


 

그래서 가져온 개념이 있다.

지역성, Locality라는 것이다.

메모리에서 가장 중요한 개념이라고 생각한다.

 

지역성의 원리란, Principle of Locality

 

프로그램은 특정한 영역을 자주 많이 사용하는 경향이 있다는 것이다.

 

2가지 종류가 있다.

시간, 공간

 

어차피 프로그램이 특정한 부분에 대해서 많이 반복하게 된다는 말이다.

-> 반복문이 많이 쓰이는 경우가 많다는 말이다.

 

시간 지역성이란 말은

최근에 접근한 값은 또 쓰일 확률이 높다는 말이다.

 

공간 지역성이란 말은

해당 접근한 값 주변에 다시 또 접근할 확률이 높다는 말이다.

(주로 연속된 구조인 Array가 대표적인 예다)

-> 단일 메모리 블럭이고 연속된 구조이다.

 

즉, 지역성을 사용하게 된다면

접근 속도가 더 빨라지겠구나 해서 나온 개념이 Memory Hierarchy이다.

 

 

Disk -> Main memory -> Cache 이런 방식으로 데이터가 이동한다.

 


 

위의 데이터 이동 과정을 도식화하면

 

 

여기서 알고 가야 할 용어들이 몇개 있다.

알고 다시 그림을 보자

 

 

Block이란 최소 단위로써 실제로 우리가 Copy를 해서 Memory level을 오가는 주체이다.

주로 Cache와 프로세서(레지스터)는 Word를 Block이라고 하고

Main Memory와 Cache 사이에서는 Multiple Word를 Block이라고 한다.

 

Hit은 요구되는 데이터가 상위 레벨에 존재할 때를 말한다. 없다면 그것을 Miss라고 한다.

 

Miss가 되면 하위 레벨로 가서 해당 데이터를 복사해서 다시 상위 레벨에 복사해서 올린다.

-> Miss가 되어 상위레벨로 필요한 데이터를 가져오는 시간을 바로 Miss Panalty라고 한다.

 

 


 

정확하게 다시 Cache에 대해서 정의해보자면

 

캐시는 CPU와 메인 메모리 사이에 있는 것들을 말한다.

지역성을 이용해서 최대한 효율적 접근을 제공하며

현 상용되고 있는 CPU는 L1, L2, L3 까지 3가지를 가지고 있다. 

(여기서 캐시는 On-chip memory를 말한다)

 

그리고 상위 레벨로 갈수록 접근 시간은 짧고 용량은 적다.

또한 각 메모리 레벨들이 하위레벨이 상위레벨을 포함하는 subset으로 구성되어 있다.

 


 

 

 


 

그렇다면 DRAM, 메인메모리가 어떻게 캐시와 같이 작동하게 되는 걸까?

 

 

 

예를 들면

DRAM이 한 번에 하나의 워드만 보낼 수 있다면..?

 

address를 보내는데 1 bus cycle

해당 address의 DRAM에 접근하는데 15 bus cycle이 걸리고

그 해당 데이터를 Cache로 다시 올리는데 1 bus cycle이 걸린다.

 

DRAM에서 캐시로 올리는 데 17 bus cycle이 필요하게 된다.

 

그렇다면 1개의 block이 4개의 word인 것을 1-word-wide DRAM에서 가져오려면..?

4개의 워드를 순차적으로 보내니까

1. address 찾고

2. 해당 DRAM에 접근하고 1개 올리고 * 4를 하면 된다.

 

즉, 1 * 1 + 4* (15 + 1) = 65 bus cycle이 필요해진다.

 

또한 16byte (4개의 word) 를 65 bus cycle만에 보냈으니 대역폭, bandwidth는 0.25B/cycle이 된다.

 


 

만약 bandwidth를 늘리고 싶다면, 즉 많이 보내고 싶다면

 

 

DRAM 메모리를 4-word wide로 바꾸거나..?

그에 따라 Bus의 폭도 커져서 Resource가 더 필요하긴 하다.

 

DRAM bank를 늘린다. Interleaved라고 한다.

bank는 독립적으로 읽기 쓰기가 가능하므로 그냥 one word짜리가 4개가 이어졌다고 보면 된다.

**Bus는 그대로지만 성능이 올라간다.

 

 

** DRAM을 연결할 때 같은 색 램 뱅크에 2개 꽂으세요!! 그래야 대역폭 늘어나요.

의 원인이 이거라고 말할 수 있다. 일단 물리적으로 그렇게 연결하는 것이다.

 

 

다음에는 캐시에 대한 원리를 배워보자

 

 

 

반응형
그리드형