Skip to Content
독학사독학사 4단계통합컴퓨터시스템08. 메모리 계층 구조와 캐시 기본

이번 문서의 목표: 이 파일을 다 읽으면 레지스터·캐시·주기억장치·보조기억장치의 접근 시간 차이를 자릿수 단위로 설명하고, L1·L2 두 단계 캐시가 있을 때 전역 미스율과 지역 미스율을 구분해 평균 접근시간(AMAT)을 계산하며, 그 결과가 CPU의 실제 실행 시간에 어떻게 반영되는지 파이프라인 성능식과 연결해 설명할 수 있다.

이 편의 위치 — 이미 아는 내용, 다르게 쓰는 내용

기억장치 계층(memory hierarchy)과 캐시(cache memory)의 기본 개념(적중·실패, 블록, 지역성)은 이미 독학사 2단계 컴퓨터구조 15편16편에서 직접사상·연관사상·세트연관사상의 비트 계산까지 자세히 다뤘다. 이 편은 그 내용을 처음부터 다시 설명하지 않는다. 대신 4단계 통합컴퓨터시스템이 요구하는 두 가지를 새로 더한다.

  1. 레지스터부터 보조기억장치까지 전체 계층을 한 표에 놓고 자릿수(order of magnitude) 차이를 체감하게 만드는 것
  2. 캐시가 한 단계가 아니라 L1·L2 두 단계로 겹쳐 있을 때의 평균 접근시간 계산, 그리고 그 계산이 06편·07편에서 다룬 CPU 성능식(CPI, 클록 사이클)과 어떻게 하나로 합쳐지는가

쉽게 말하면: 2단계에서 “캐시 하나가 어떻게 동작하는가”를 배웠다면, 이 편은 “그 캐시가 실제 CPU 안에서 여러 겹으로 쌓였을 때, 최종적으로 프로그램이 얼마나 빨리 도는가”를 계산한다.

1. 계층을 한 눈에 — 접근 시간의 자릿수 차이

메모리 계층은 흔히 “위로 갈수록 빠르고 작다”고 설명하지만, 그 차이가 몇 배인지 실감하는 것이 4단계 통합형 문항의 핵심이다. 다음은 전형적인 값이다(실제 하드웨어마다 다르지만 시험에서 요구하는 자릿수 감각은 이 표로 충분하다).

계층전형적 접근 시간전형적 용량앞 단계 대비 배율
레지스터(register)약 0.3나노초(CPU 클록 1사이클)수백 바이트기준
L1 캐시약 1나노초수십 KB약 3배 느림
L2 캐시약 5–10나노초수백 KB–수 MBL1보다 약 10배 느림
L3 캐시약 20–40나노초수 MB–수십 MBL2보다 약 3–4배 느림
주기억장치(DRAM)약 80–120나노초수 GB–수십 GBL3보다 약 3배 느림
보조기억장치(SSD)약 50–150마이크로초수백 GB–수 TB주기억장치보다 약 1,000배 느림
보조기억장치(HDD)약 5–10밀리초수 TBSSD보다 다시 약 100배 느림

자주 틀리는 점: 표의 숫자를 그대로 외우려 하지 말 것. 시험이 확인하는 것은 절대값이 아니라 “레지스터→캐시는 몇 배 차이, 캐시→주기억장치는 몇 배 차이, 주기억장치→보조기억장치는 또 몇 자릿수 차이인가”라는 상대적 감각이다. 특히 주기억장치와 보조기억장치 사이의 차이(약 1,000배 이상)가 레지스터와 캐시 사이의 차이(약 3배)보다 압도적으로 크다는 점을 통합형 문항은 자주 묻는다 — 이 격차가 바로 17편에서 다룰 가상메모리의 페이지 부재가 캐시 미스보다 훨씬 치명적인 이유다.

2. 다단계 캐시: L1과 L2를 함께 놓고 계산하기

쉽게 말하면: L1에서 못 찾으면 L2를 보고, L2에서도 못 찾으면 그제서야 주기억장치까지 간다. 세 번의 시도 중 몇 번째에서 걸리느냐에 따라 평균적으로 걸리는 시간이 달라진다.

2단계에서 배운 평균 접근시간(AMAT, Average Memory Access Time) 공식은 캐시가 한 단계일 때 기준이었다.

AMAT단일=Tcache+Miss Rate×Tpenalty\text{AMAT}_{\text{단일}} = T_{\text{cache}} + \text{Miss Rate} \times T_{\text{penalty}}

여기서 TpenaltyT_{\text{penalty}}는 캐시에서 실패했을 때 주기억장치까지 가서 데이터를 가져오는 데 걸리는 추가 시간이다. 그런데 캐시가 L1·L2 두 단계면, L1이 실패했을 때 곧바로 주기억장치로 가는 것이 아니라 L2부터 확인한다. 이때 미스율을 두 가지로 구분해야 한다.

  • 지역 미스율(local miss rate): 그 캐시 단계 자체에 요청이 들어왔을 때 실패하는 비율. 예를 들어 지역 미스율 MissL2\text{Miss}_{L2}는 “L1에서 실패해서 L2까지 온 요청 중, L2에서도 실패하는 비율”이다.
  • 전역 미스율(global miss rate): 전체 CPU 요청 대비 그 단계에서 최종적으로 실패하는 비율. MissL2,전역=MissL1×MissL2,지역\text{Miss}_{L2,\text{전역}} = \text{Miss}_{L1} \times \text{Miss}_{L2,\text{지역}}이다.

2단계 캐시의 AMAT는 다음과 같이 “L1은 항상 확인하고, L1이 실패한 경우에만 L2 비용이 추가되고, L2도 실패한 경우에만 주기억장치 비용이 추가된다”는 구조로 쌓는다.

AMAT=TL1+MissL1×(TL2+MissL2,지역×Tmem)\text{AMAT} = T_{L1} + \text{Miss}_{L1} \times \big(T_{L2} + \text{Miss}_{L2,\text{지역}} \times T_{\text{mem}}\big)
  • TL1T_{L1}: L1 캐시 자체의 접근 시간
  • MissL1\text{Miss}_{L1}: L1의 지역 미스율(=전역 미스율. L1은 항상 첫 번째로 확인하므로 지역과 전역이 같다)
  • TL2T_{L2}: L2 캐시 자체의 접근 시간(L1이 실패했을 때만 발생)
  • MissL2,지역\text{Miss}_{L2,\text{지역}}: L2의 지역 미스율
  • TmemT_{\text{mem}}: 주기억장치 접근 시간(L1·L2 모두 실패했을 때만 발생)

예제: TL1=1nsT_{L1}=1\text{ns}, TL2=8nsT_{L2}=8\text{ns}, Tmem=100nsT_{\text{mem}}=100\text{ns}, MissL1=0.08\text{Miss}_{L1}=0.08, MissL2,지역=0.25\text{Miss}_{L2,\text{지역}}=0.25

먼저 L2 실패까지 갔을 때 추가되는 비용을 계산한다.

TL2+MissL2,지역×Tmem=8+0.25×100=33nsT_{L2} + \text{Miss}_{L2,\text{지역}} \times T_{\text{mem}} = 8 + 0.25 \times 100 = 33\text{ns}

이제 이 값에 L1 미스율을 곱해 L1 자체 접근 시간에 더한다.

AMAT=1+0.08×33=1+2.64=3.64ns\text{AMAT} = 1 + 0.08 \times 33 = 1 + 2.64 = 3.64\text{ns}

결과 해석: L1 캐시 하나만 있고 실패 시 바로 주기억장치로 갔다면(즉 Tpenalty=Tmem=100nsT_{\text{penalty}} = T_{\text{mem}} = 100\text{ns}) AMAT=1+0.08×100=9ns\text{AMAT} = 1 + 0.08 \times 100 = 9\text{ns}였을 것이다. L2를 하나 더 끼워 넣어 3.64나노초로 줄었다 — L2는 L1의 실패를 100나노초짜리 사고에서 8나노초짜리 작은 지연으로 대부분 흡수하는 완충 장치 역할을 한다는 뜻이다. 전역 미스율로 보면 주기억장치까지 가는 요청은 0.08×0.25=0.020.08 \times 0.25 = 0.02, 즉 전체 요청의 2퍼센트뿐이다.

자주 틀리는 점: MissL2\text{Miss}_{L2}에 전역 미스율을 넣고 다시 MissL1\text{Miss}_{L1}을 곱하는 이중 계산 실수가 잦다. 공식의 괄호 구조를 보면 MissL1\text{Miss}_{L1}이미 한 번만 곱해지도록 되어 있으므로, 괄호 안의 MissL2\text{Miss}_{L2}는 반드시 지역 미스율이어야 한다. 전역 미스율을 그대로 대입하면 MissL1\text{Miss}_{L1}이 두 번 곱해지는 셈이 되어 답이 실제보다 훨씬 작게 나온다.

3. 캐시 미스가 CPU 성능식에 어떻게 들어가는가

07편에서 CPU 실행 시간을 다음과 같이 정리했다.

CPU 실행 시간=명령어 수×CPI×클록 주기\text{CPU 실행 시간} = \text{명령어 수} \times \text{CPI} \times \text{클록 주기}

여기서 CPI(Cycles Per Instruction, 명령어당 평균 사이클 수)는 파이프라인이 이상적으로 돌아갈 때의 값(이상적 CPI)에 메모리 정체로 인한 추가 사이클을 더해야 실제 값이 된다. 이것이 하드웨어(캐시)와 성능 지표(CPI)를 하나로 잇는 통합형 계산이다.

CPI실제=CPI이상적+명령어당 메모리 접근 횟수×Miss Rate×Miss Penalty(사이클 수)\text{CPI}_{\text{실제}} = \text{CPI}_{\text{이상적}} + \text{명령어당 메모리 접근 횟수} \times \text{Miss Rate} \times \text{Miss Penalty(사이클 수)}
  • CPI이상적\text{CPI}_{\text{이상적}}: 캐시 미스가 전혀 없다고 가정했을 때의 CPI(파이프라인 해저드로 인한 스톨은 이미 반영된 값)
  • 명령어당 메모리 접근 횟수: 데이터 참조(load/store)가 명령어 하나당 몇 번 일어나는지
  • Miss Penalty(사이클 수): 캐시 미스 한 번이 CPU 클록 사이클 몇 개를 낭비시키는지

예제: CPI이상적=1.5\text{CPI}_{\text{이상적}} = 1.5, 명령어당 메모리 접근 1.2회, 미스율 4퍼센트, 미스 페널티 100사이클

CPI실제=1.5+1.2×0.04×100=1.5+4.8=6.3\text{CPI}_{\text{실제}} = 1.5 + 1.2 \times 0.04 \times 100 = 1.5 + 4.8 = 6.3

결과 해석: 파이프라인 자체는 1.5 CPI로 설계됐지만, 캐시 미스 때문에 실제로는 6.3 CPI — 이상적인 경우보다 4배 이상 느려진 셈이다. 이 숫자가 바로 “왜 캐시 설계가 파이프라인 설계만큼, 어쩌면 그보다 더 중요한가”에 대한 정량적 근거다. 아무리 파이프라인을 잘 설계해도 캐시 미스율이 높으면 그 이득이 전부 상쇄된다.

핵심 정리

  • 메모리 계층은 레지스터→L1→L2→L3→주기억장치→보조기억장치 순으로 느려지며, 특히 주기억장치와 보조기억장치 사이의 격차(약 1,000배 이상)가 캐시 단계 간 격차보다 훨씬 크다.
  • 다단계 캐시의 AMAT는 “L1은 항상 확인, L1 실패 시에만 L2 비용 추가, L2도 실패 시에만 주기억장치 비용 추가”라는 중첩 구조로 계산하며, 괄호 안에는 반드시 지역 미스율을 넣는다.
  • 캐시 미스는 CPI실제=CPI이상적+(메모리 접근 횟수×Miss Rate×Miss Penalty)\text{CPI}_{\text{실제}} = \text{CPI}_{\text{이상적}} + (\text{메모리 접근 횟수} \times \text{Miss Rate} \times \text{Miss Penalty})로 CPU 성능식에 직접 더해진다 — 하드웨어 세부 설계(캐시)가 최종 실행 시간에 정량적으로 연결되는 대표적 통합 계산이다.
  • 세트연관사상·교체 정책(LRU/FIFO)의 비트 계산 자체는 2단계 15·16편에서 이미 다뤘으므로 반복하지 않는다.

마무리 복습

문제 14지선다
메모리 계층에서 접근 시간의 자릿수 차이가 가장 크게 벌어지는 두 단계는?
문제 24지선다
2단계 캐시(L1, L2)의 평균 접근시간(AMAT) 공식에서 L2의 미스율 자리에 들어가야 하는 값은?
문제 34지선다
T(L1)=1ns, T(L2)=8ns, T(mem)=100ns, L1 미스율 0.08, L2 지역 미스율 0.25일 때 AMAT는?
문제 44지선다
위 3번 문제와 같은 조건에서, 주기억장치까지 실제로 도달하는 요청의 비율(전역 미스율)은?
문제 54지선다
CPI(이상적)=1.5, 명령어당 메모리 접근 1.2회, 미스율 4퍼센트, 미스 페널티 100사이클일 때 실제 CPI는?
문제 64지선다
캐시 미스가 CPU 성능식에 미치는 영향에 대한 설명으로 옳지 않은 것은?

참고 자료

Last updated on