[Computer Architecture/CS/Memory] 메모리 계층구조와 캐시

SHark·2023년 12월 30일
0
post-thumbnail

디테일한 내용까지하면 2주정도는 파이프라이닝에만 시간을 쓸 거 같아서, 외전격으로 체크해놓고 잠깐 메모리 이야기로 넘어가려고 합니다. 저는 이 짤만큼 메모리를 잘 설명한것을 본적이 없습니다.. 존경스럽습니다.

저장할 수 있다면 다 메모리다.

현대 PC는 CPU와 RAM , GPU 등으로 이루어져 있습니다. 이런 구조를 폰 노이만 구조라고 합니다. 처리하는 장치(CPU)가 따로 있고, 데이터를 가져오거나 저장하는 장치가 따로 떨어져있는 구조라고 생각하면 됩니다.

메모리는 데이터를 저장하거나, CPU가 데이터를 가져오는 곳입니다.

  • 메인보드 내부에서 CPU가 직접적으로 BUS를 갖고있는 걸 RAM
  • 데이터가 좀 커서 메인보드 외부에 있는 저장을 위한 장치를 SSD , Disk

메인보드를 직접 보면, CPU와 RAM은 가깝고 , 실제로 MMU와 같은 전용처리 장치가 CPU 내부에 있고, 메인보드에서도 전용버스로 연결되어 있습니다. SSD는 키보드나 마우스같이 I/O Bus같은 걸로 외부장치로 처리됩니다. (ASUS TUF Gaming 모델은 제가 사용하고 있어서 가져와봤습니다)

여기서 제가 하고싶은 말은 메모리 라고하면, 보통 RAM 입니다. 하지만, 컴퓨터에는 그 외에도 SSD와 같은 저장장치도 있고 그걸 메모리로써 사용이 가능하다는 이야기입니다. 그리고, CPU 내부에서 1word를 저장하는 Register라는 작은 저장장치도 메모리입니다.

갑자기 Register?SSD? 어지러워요..

네, 저도 처음 컴공에서 많이 헷갈렸습니다.

컴퓨터 구조를 배울 때, 메모리를 보통 RAM 이라고 해놓고 나중에 보면 SSD를 무슨 메모리 취급해서 쓰고, 사실상 처리는 대부분 i-cache나 d-cache 같은 L1캐시 혹은 L2캐시 같은곳에서 다 처리된다고 배웁니다. 이러는게 헷갈린 경험이 많아서 기본적으로 위와 같은 하드웨어 장치와 밑에 소개드릴 메모리 계층구조 그림을 딱 머릿속에 갖고있으면 헷갈리시지 않을 겁니다.

한줄요약
저장할 수 있으면 CPU 입장에서는 다 메모리이다.

Caches와 Register

Cache와 Register는 CPU 안에 있는 저장장치입니다. 6개의 코어를 가진 커피 레이크 CPU 내부 사진입니다.(7 Die Map of a Hexa-Core Coffee Lake Processor)

7 Die Map of a Hexa-Core Coffee Lake Processor

아까 말씀드렸던 L3 cache도 보이고, Core도 무려 6개나 보이고 왼쪽에보면 I/O 와 Memory Controller는 따로있는게 실제로 보입니다. 글을 읽으시면서, 와닿지 않았던 부분들이 풀리셨으면 좋겠습니다.

Register는 Core안에 있고, cache는 코어들끼리 공유하는 L3 Cache와 코어 내부에서 각자 가지고 있는 L1,L2 cache가 있습니다.

Main Memory (RAM)

렘을 메인 메모리라고 부르는 것은 폰 노이만 구조에서 최초로 메모리- 프로세스가 나뉘어 졌고, 현대에는 메모리 중에서 CPU와 가까이 있고, 용량이 충분하기 때문에 메인 메모리라고 합니다. 우리나라가 만드는 반도체가 바로 이 메인메모리 DRAM 입니다.

이상적인 메모리는 없다.

현대에는 다양한 메모리들이 있지만, 과거에는 RAM 밖에 없었고 RAM의 크기 또한 굉장히 작았다고 합니다. 그래서, 아주 크면서 빠른 메모리를 개발하는게 목표였는데 그 당시의 기술로는 용량을 늘리려면 속도적인 측면에서 타협하고, 속도를 늘리려면 용량적인 부분에서 타협을 해야한다고 합니다.

그리고, 이상적인 메모리 하나를 만드는 것보다, 특화된 각각의 메모리를 적재적소에 배치하는게 훨씬 싸고 경제적이라는 이유가 가장크다고 생각합니다.

  • 용량을 늘리면, 디코더도 늘어나게 됩니다-> 느려지는 측면이 있고, 간단한 구조를 가져가야 하는데, 이렇게 되면 속도가 느려집니다.
  • 속도가 빨라질려면 SRAM을 써야하는데, 1개의 비트를 저장하기 위해서는 여러개의 레지스터를 소모하게 됩니다. (Latch구조)

전자공학이 아닌 컴공의 짧은 지식으로 적는거라, 현대의 기술에는 맞지 않는 말일 수 도 있습니다. 틀린부분이 있다면, 정정부탁드립니당!

복잡하다. 복잡해. 결론은 내 입장에서는 다 메모리잖아!

프로그래밍을 할 때, 메모리에 대한 것 까지 신경을 쓴다면 프로그래머는 정말정말 고오오옹오오급 인력일 것이다. 하지만, 그만큼 발전도 못했을 것이고 속도도 느렸을 것이다. 하지만, 프로그래머 입장에서는 RAM이든,cache든,Register든 심지어 Disk든 Network IO든 다 그냥 메모리라고 생각한다. 이걸 고급지게 말하면, Virtual Memory이다.

하지만, 각 메모리에 대한 지식이 있어야 최적화된 프로그램을 만들 수 있고 , 컴퓨터 구조 또한 컴퓨터의 동작을 이해해서 좋은 프로그램을 만들라고 배우는 것이기 때문에, 낭만있는 프로그래머가 되기위해서는 메모리에 대한 지식은 필수이다.

결론
캐시 메모리, 메모리 관리하는법을 배워야한다.

Cache

캐시는 미리 저장을 하고 있는 저장소입니다. 즉, 메모리(RAM)에서 자주 쓸 것 같은것들을 CPU내에 적재시켜놓고, 빠르게 가져다 쓰자는 이야기입니다. 자주 쓰는 물건을 최대한 가까이 두면 효율적이니까요.

caching이 가능한 이유?

언뜻보면, 프로그램은 다양한 명령어로 이루어져있다고 느껴질 수 있습니다. 하지만, 프로그램은 반복문 , 배열과 같은 연속적인 메모리공간 ,변수의 재사용 등으로 인해서 대부분의 프로그램은 쓰는것만 쓰는 고급지게 말하면 Locality(지역성)을 띄게 됩니다.

caching이 항상 효율적일까?

아니요!

대부분의 프로그램에 대해서 cache는 매우 효율적입니다. 하지만, 캐시가 유리하지 않은 것이 있습니다.재사용을 하지 않는 데이터들은 캐시를 쓴다고하면, 오히려 더 비효율적일겁니다. 대표적으로 동영상, 실시간 스트리밍은 캐시구조가 적절하지 않습니다. 그래서 cache구조를 배우면 알겠지만, cache disable하는 필드가 따로 있습니다.

0개의 댓글