메모리와 캐시 메모리

임정빈·2024년 5월 21일

지금까지 메모리라고 지칭한 하드웨어는 RAM이다.
이번 포스팅에서는 RAM의 특성과 종류, 논리 주소와 물리주소, 캐시 메모리와 저장 장치 계층 구조에 대해 알아보겠다.




1. RAM의 특징과 종류

1.1 RAM의 특징

RAM에는 실행할 프로그램의 명령어와 데이터가 저장된다.
중요한 점은 전원을 끄면 RAM에 저장된 명령어와 데이터가 모두 날아간다는 것이다.

휘발성 저장 장치(volatile memory): 전원을 끄면 저장된 내용이 사라지는 저장 장치

비휘발성 저장 장치(non-volatile memory): 전원이 꺼져도 저장된 내용이 유지되는 저장 장치

  • 하드 디스크, SSD, CD-ROM, USB 메모리와 같은 보조기억장치
  • 보조기억장치는 전원을 꺼도 내용을 유지하지만, CPU는 보조기억장치에 직접 접근하지 못한다.

일반적으로 보조기억장치인 비휘발성 저장 장치에는 '보관할 대상'을 저장하고, 휘발성 저장 장치인 RAM에는 '실행할 대상'을 저장한다.

CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행한다.



1.2 RAM의 용량과 성능

RAM 용량이 적다면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어진다.

  • RAM 용량이 프로그램 A, B, C 중 하나만 저장할 수 있을 만큼 작으면 보조기억장치에서 가지고 와야 한다.

  • RAM 용량이 충분히 크면 보조기억장치에서 많은 데이터를 가져와 미리 RAM에 저장할 수 있다.

RAM 용량이 커지면 프로그램 실행 속도가 어느 정도 증가하는 것은 맞지만, 용량이 필요 이상을 커졌을 때 속도가 그에 비례하여 증가하지는 않는다.



1.3 RAM의 종류

DRAM

DRAM(Dynamic RAM): 저장된 데이터가 동적으로 변하는(사라지는 RAM)

  • 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다.
  • DRAM은 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장)해야 한다.
  • 우리가 일반적으로 메모리로써 사용하는 RAM이다.
  • 소비 전력이 비교적 낮고, 저렴하고 집적도가 높기 때문에 대용량으로 설계하기가 용이하다.

SRAM

SRAM(Static RAM): 저장된 데이터가 변하지 않는 RAM

  • DRAM과 달리 시간이 지나도 저장된 데이터가 사라지지 않는다.
  • 주기적으로 데이터를 재활성화할 필요가 없다.
  • SRAM은 DRAM보다 일반적으로 속도도 빠르다.
  • 시간이 지나도 저장된 데이터가 사라지지 않는다고 해서 비휘발설 메모리인 것은 아니다.
    • 전원이 공급되지 않으면 저장된 내용이 날아간다.
  • 하지만 DRAM보다 집적도가 낮고, 소비 전력도 크며, 가격도 더 비싸기 때문에 일반적으로 DRAM을 쓴다.
    • SRAM은 메모리가 아닌 캐시메모리 같이 대용량으로 만들어질 필요는 없지만 솓고가 빨라야 하는 저장장치에서 사용된다.


SDRAM

SDRAM(Synchronous Dynamic RAM): 클럭 신호와 동기화된, 발전된 형태의 DRAM

  • 클럭에 맞춰 동작하며 클럭마다 CPU와 정보를 주고받을 수 있는 DRAM
  • SRAM과 상관없다.

DDR SDRAM

DDR SDRAM(Double Data Rate SDRAM): 대역폭을 넓혀 속도를 빠르게 만든 SDRAM

  • 대역폭(data rate): 데이터를 주고받는 길의 너비
  • SDR SDRAM(Single Data Rate SDRAM)이라 부르기도 한다.




2. 메모리의 주소 공간

CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까?
→ 당연히 그럴 것 같지만 실제로는 그렇지 않다.

예를 들어 현재 메모리에 메모장, 게임, 인터넷 브라우저 프로그램이 적재되어 있다고 가정한다.

메모장, 게임, 인터넷 브라우저 프로그램은 현재 다른 프로그램들이 몇 번지에 저장되어 있는지 굳이 알 필요가 없다.

메모리에 저장된 정보는 시시각각 변하기 때문에 메모리에는 새롭게 실행되는 프로그램이 적재되고, 실행이 끝난 프로그램은 삭제된다.

심지어 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라질 수 있다.

2.1 물리 주소와 논리 주소

물리 주소(physical addresss): 정보가 실제로 저장된 하드웨어상의 주소. 메모리가 사용.
논리 주소(logical address): 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소. CPU와 실행 중인 프로그램이 사용.

프로그램은 모두 자신만을 위한 주소인 논리 주소를 갖고 있다.
프로그램마다 같은 논리 주소가 얼마든지 있을 수 있다.
CPU는 이 논리 주소를 받아들이고, 해석하고, 연산한다.

하지만 CPU가 이해하는 주소가 논리 주소라고는 해도 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소간의 변환이 필요하다.

논리 주소와 물리 주소간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU: Memory Management Unit)라는 하드웨어에 의해 수행된다.

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

베이스 레지스터는 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장하는 셈이고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리다.



2.2 메모리 보호 기법

'인터넷 브라우저 프로그램 명령어 중 (논리 주소) 1100번지의 데이터를 삭제하라'는 실행되어도 안전할까?

→ 실행되어서는 안된다. 프로그램의 논리 주소 영역을 벗어났다.

한계 레지스터(limit register)는 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 해준다.

베이스 레지스터는 프로그램의 첫 물리 주소, 물리 주소 시작점 저장

한계 레지스터는 논리 주소의 최대 크기(프로그램 크기)를 저장

CPU가 접근하려는 논리 주소는 한계 레지스터가 저장한 값보다 커서는 안 된다.
(= 프로그램의 범위에 벗어난 메모리 공간)

만약 CPU가 한계 레지스터보다 높은 주소에 접근하려고 하면 인터럽트(트랩)을 발생시켜 실행을 중단한다.




3. 캐시 메모리

3.1 저장 장치 계층 구조

저장 장치 계층 구조(memory hierarchy): 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조

메모리 계층 구조라고 한다.



3.2 캐시 메모리

캐시 메모리(cache memory): CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치

캐시 메모리는 CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생했다.

CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 온다.

컴퓨터 내부에는 여러 개의 캐시 메모리가 있다.
코어와 가장 가까운 캐시 메모리 순서대로 L1level 1 캐시, L2level 2 캐시, L3level 3 캐시가 있다.

일반적으로 L1 캐시와 L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있다.

캐시 메모리의 용량: L1 < L2 < L3
속도: L1 > L2 > L3
가격: L1 > L2 > L3

CPU가 메모리 내에 데이터가 필요하다고 판단하면 우선 L1 캐시에 해당 데이터가 있는지를 알아보고, 없다면 L2, L3 캐시 순으로 데이터를 검색한다.

멀티코어 프로세서에서 일반적으로 L1 캐시와 L2 캐시는 코어마다 고유한 캐시 메모리에 할당되고, L3 캐시는 여러 코어가 공유하는 형태로 사용된다.

코어와 가장 가까운 L1 캐시는 조금이라도 접근 속도를 빠르게 만들기 위해 명령어만을 저장하는 L1 캐시인 L1l 캐시와 데이터만을 저장하는 L1 캐시인 L1D캐시로 분리하는 경우가 있다.
이를 분리형 캐시(split cache)라고 한다.



3.3 참조 지역성 원리

보조기억장치는 전원이 꺼져도 기억할 대상을 저장하고, 메모리는 실행 중인 대상을 저장한다면 캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다.

이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에 활용될 경우를 캐시 히트(cache hit)라고 한다.

반대로 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다.

캐시 적중률(cache hit ratio)

캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

CPU가 사용할 법한 데이터를 제대로 예측해서 캐시 적중률을 높여야 하는데, 여기서 참조 지역성의 원리에 따라 가져올 데이터를 결정한다.

참조 지역성의 원리(locality of reference, principle of locality):
CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리

시간 지역성

시간 지역성(temporal locality): 지역성최근에 접근했던 메모리 공간에 다시 접근하려는 경향

변수에 값을 저장하고 나면 CPU는 변수가 저장된 메모리 공간을 언제든 다시 참조할 수 있다.

즉, CPU는 최근에 접근했던 (변수가 저장된) 메모리 공간을 여러 번 다시 접근할 수 있다.


공간 지역성

공간 지역성(spatial locality): 접근한 메모리 공간 근처에 접근하려는 경향

하나의 프로그램 내에서 관련 있는 데이터들은 모여서 저장된다.

사용자가 입력을 하면 입력 기능이 모여 있는 공간 근처를 집중적으로 접근한다.




마치며

RAM, 캐시 메모리, 메모리의 주소 등등 공부를 하며 들어봤지만 정확히 어떤 역할인지 몰랐었는데 세부적으로 알되었다.

RAM: 휘발성 저장 장치
보조기억장치: 비휘발성 저장 장치

물리주소: 메모리 하드웨어상의 주소
논리주소: CPU와 실행 중인 프로그램이 사용하는 주소

캐시 메모리: CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치

출처
혼자 공부하는 컴퓨터 구조+운영체제

profile
신입개발자

0개의 댓글