"RAM이 느려서 CPU가 기다린다"는 말의 진짜 의미는 무엇일까?
본문에서는 CPU와 메모리 간의 병목을 해결하기 위한 계층적 메모리 구조를 분석한다.
왜 다양한 메모리가 필요한가?
CPU는 점점 빨라지는데, 메모리는 그 속도를 따라가지 못한다.
*물리적 제약의 차이: CPU는 집적도가 높은 소수의 회로에 초고속 연산을 집중시키는 구조다. 반면 메모리는 데이터를 많이 담는 게 우선이므로 회로를 촘촘하게 배치할 수 없다.
*기술 발전 속도의 차이: CPU는 고속화에 특화된 설계 개선이 매년 이루어졌지만 메모리 기술은 발전 속도가 느리고 대부분 용량 증가 위주로 발전한다.
이로 인해 CPU는 데이터를 기다리느라 멈춰서는 상황이 빈번하게 발생한다. 이 문제를 해결하기 위해 컴퓨터는 속도와 용량, 가격 사이에서 균형을 맞춘 다양한 계층의 저장 장치를 조합한다.
이 구조를 메모리 계층 구조(memory hierarchy)라 한다.
메모리 계층 구조의 전제: 속도 vs 용량 vs 비용의 트레이드오프
컴퓨터는 다양한 종류의 저장 자이를 속도 순서대로 위에서 아래로 쌓은 구조를 가진다(메모리 계층 구조).
레지스터 | 매우 빠름 | 매우 작음 | CPU 내부 | 클럭 주기 수준 |
L1~L3 캐시 | 빠름 | 작음 | CPU/SoC | 시간/공간 지역성 |
RAM | 중간 | 수~수십 GB | 메인보드 | 실행 중 데이터 |
SSD/HDD | 느림 | 수백 GB~TB | 외부 I/O | 영속 저장소 |
레지스터 - 연산에 직접 사용되는 CPU의 초고속 기억소자
- CPU 내부에서 ALU나 제어 유닛이 직접 접근하는 저장소
- 산술 연산 피연산자, 조건 결과, 주소 계산 등에 사용됨
- 수십 개 내외의 제한된 개수만 존재하여 접근 속도는 CPU 클럭과 거의 동일
- 실제 활용
- 컴파일러는 성능 최적화를 위해 자주 사용되는 변수나 중간 계산 결과를 레지스터에 직접 매핑하려 한다. 하지만 레지스터 수가 제한되어 있기 때문에 스케줄링 알고리즘이 개입하게 된다.
*클럭: CPU는 내부 회로들이 동기화된 타밍에 맞춰 작동해야 한다. 이를 위해 일정한 간격으로 전자 신호를 보내는데, 이를 클럭 신호라고 한다(클럭이 높다는 것은 동작 사이클이 빠르다는 것이다).
예시 - 1초에 1번 신호가 울리면 1Hz, 1초에 3,000,000,000번 울리면 3GHz = 개빠르다
캐시 - RAM 접근을 줄이기 위한 고속 임시 저장소
- CPU와 RAM 사이의 속도 차이를 줄이기 위한 중간 계층
- CPU는 항상 먼저 캐시에서 데이터를 찾고(캐시 히트), 없을 경우 RAM까지 내려감(캐시 미스)
- 지역성을 기반으로 최근 접근한 데이터 혹은 인접 데이터를 우선 저장
- 캐시 계층
- L1: CPU 코어 내부, 매우 빠르지면 용량 작음(~32KB)
- L2: 코어당 전용 혹은 공유, 속도와 용량의 균형
- L3: CPU 전체 공유, 느리지만 가장 큼
- 성능 관점
- 캐시 미스는 수십~수백 클럭의 지연을 유발할 수 있아며, 메모리 접근 패턴이 나쁜 코드는 CPU가 대기 시간으로 대부분의 시간을 허비하게 된다.
RAM - 실행 중인 모든 프로그램과 데이터를 담는 주기억장치
- 코드, 전역 변수, 스택, 힙 등 실행 중인 모든 데이터가 이곳에 적재됨
- 캐시에 없으면 결국 RAM까지 내려와 데이터를 로드해야 하므로, 속도 병목의 주 원인
- RAM은 전원이 꺼지면 데이터가 사라지는 휘발성 메모리
- 예시
- 함수 호출 시 스택 프레임은 RAM에 저장된다.
- malloc() 같은 동적 메모리 할당도 힙이라는 RAM 영역을 사용한다.
SSD/HDD - 비휘발성 저장 장치
- OS, 프로그램, 사용자 파일 등이 저장되는 영속 스토리지
- 읽기/쓰기 속도는 RAM에 비해 수백~수천 배 느리지만, 가격 대비 용량이 큼
- RAM이 부족할 경우, 운영체제는 SSD 일부를 가상 메모리(swap)로 사용
- 실전에서의 영향
- RAM 부족 시 디스크 스와핑이 발생하면, 애플리케이션 반응 속도가 급격히 느려진다.
- SSD 조차 캐시/레지스터에 비하면 극도로 느린 저장소에 해당한다.
레지스터 | CPU 내부 | 최고속도 | 연산용 임시 저장소 |
캐시 | CPU/SoC | 매우 빠름 | 자주 쓰는 데이터 버퍼 |
RAM | 메인보드 | 중간 | 실행 중인 데이터/코드 저장 |
SSD/HDD | 외부 I/O | 느림 | 영구 데이터 저장소 |
개발자가 알아야 할 포인트
- 데이터가 캐시에 잘 적중(hit)되도록 메모리 접근 패턴을 고려한 코드를 작성해야 한다.
- 예: 2차원 배열 순회 시 행 우선 접근 방식
- 캐시 미스가 많아지면, CPU는 놀고 있는 시간이 많아지고 성능이 급격히 떨어진다.
- 대용량 데이터 처리, 병렬 연산 등의 경우, 메모리 병목이 성능의 최대 제약 요소가 된다.
'컴퓨터공학 > 컴퓨터 구조와 작동 원리' 카테고리의 다른 글
[컴퓨터공학] 컴퓨터 개념 기초 | CPU가 명령어를 실행하는 방법 - Fetch, Decode, Execute 사이클 완전 정복 (0) | 2025.03.24 |
---|---|
[컴퓨터공학] 컴퓨터 개념 기초 | 컴퓨터가 숫자를 표현하는 방법(2의 보수, 고정소수점 등) (0) | 2025.03.24 |
[컴퓨터공학] 컴퓨터 개념 기초 | 비트, 바이트, 이진수 개념 (0) | 2025.03.24 |
[컴퓨터공학] 컴퓨터 개념 기초 | 하드웨어와 소프트웨어 (0) | 2025.03.22 |