[컴퓨터 시스템] 14. 메모리 계층은 왜 프로그램 속도를 바꿀까
13편까지가 값과 명령이 어떻게 표현되고 실행되는지에 가까웠다면, 이제는 같은 코드라도 왜 어떤 경우는 빠르고 어떤 경우는 느린지로 시선을 옮겨야 합니다. 그 중심에는 메모리 계층과 cache가 있습니다.
이번 글은 저장장치, RAM, cache, register를 속도 계층으로 보고, locality와 cache line이 왜 성능 이야기의 핵심 단어인지 정리합니다.
- 왜 메모리 계층이 여러 층으로 나뉘는지
- cache line이 값 하나보다 데이터 묶음으로 이해돼야 하는 이유
- 시간적/공간적 locality가 왜 중요한지
- 접근 패턴이 성능을 어떻게 바꾸는지
- 실제 적용 문제로 locality를 판단하는 연습
1. 메모리 계층은 속도와 용량의 타협 구조다
모든 데이터를 가장 빠른 저장장치에 둘 수 있다면 좋겠지만, 현실에서는 속도, 용량, 비용이 충돌합니다. 그래서 아주 빠르지만 작은 계층과, 느리지만 큰 계층이 층을 이루게 됩니다.
시스템 관점에서는 이 계층을 부품 이름보다 CPU가 데이터를 얼마나 빨리 받을 수 있는지 결정하는 구조로 보는 편이 중요합니다.
| 계층 | 속도 감각 | 용량 감각 |
|---|---|---|
| register | 가장 빠름 | 매우 작음 |
| cache | 매우 빠름 | 작음 |
| RAM | 중간 | 상대적으로 큼 |
| storage | 가장 느림 | 가장 큼 |
2. cache는 값 하나가 아니라 묶음을 가져온다
cache를 처음 배울 때 '필요한 값 하나를 가져온다'로 이해하면 절반만 이해한 것입니다. 실제로는 cache line이라는 연속된 데이터 묶음을 함께 가져오는 경우가 많습니다.
그래서 현재 쓰는 값 근처의 데이터도 곧 쓸 가능성이 높다면 유리하고, 멀리 흩어진 데이터만 계속 건드리면 낭비가 커집니다.
3. locality는 왜 성능 이야기의 중심이 될까
시간적 locality는 최근에 쓴 값을 곧 다시 쓰는 경향이고, 공간적 locality는 근처 주소를 이어서 쓰는 경향입니다. 둘 다 cache가 미리 가져온 데이터를 덜 낭비하게 만듭니다.
즉 locality는 알고리즘 복잡도와는 별개로, 같은 O(n) 코드도 실제 실행 시간이 크게 달라질 수 있는 이유를 설명해 줍니다.
| locality 유형 | 질문 | 예시 |
|---|---|---|
| 시간적 locality | 방금 쓴 값을 곧 다시 쓰는가 | 누적 합 변수 반복 사용 |
| 공간적 locality | 근처 주소를 이어서 쓰는가 | 배열을 앞에서 뒤로 순차 접근 |
4. 접근 패턴이 비슷해 보여도 성능은 달라질 수 있다
행 우선 순회와 열 우선 순회처럼 계산량은 비슷해 보여도 메모리 접근 순서가 cache 친화적인지에 따라 속도 차이가 크게 날 수 있습니다. 이 지점부터는 CPU만이 아니라 데이터 배치와 접근 순서도 함께 봐야 합니다.
5. 직접 해볼 문제: 어느 쪽이 cache 친화적일까
이 문제는 정답 코드보다 접근 패턴을 설명하는 것이 핵심입니다.
이번 글에서 기억할 것
스스로 점검
다음 글 예고
다음 글에서는 이 감각을 최적화와 연결해, 왜 측정과 locality가 함께 가야 하는지 정리합니다.
'학습 자료 글 > 컴퓨터시스템' 카테고리의 다른 글
| 컴퓨터시스템 기초 16. 운영체제는 프로세스와 가상 메모리를 어떻게 관리할까 (0) | 2026.03.31 |
|---|---|
| 컴퓨터시스템 기초 15. 코드 최적화는 왜 측정과 locality가 먼저일까 (0) | 2026.03.31 |
| 컴퓨터시스템 기초 13. x86-64와 ARM64는 무엇이 같고 다를까 (0) | 2026.03.31 |
| 컴퓨터시스템 기초 12. 배열과 구조체는 어셈블리에서 왜 주소 계산이 될까 (0) | 2026.03.31 |
| 컴퓨터시스템 기초 11. 레지스터와 스택 프레임은 함수 호출을 어떻게 드러낼까 (0) | 2026.03.31 |