캐시 메모리와 가상 메모리 (Cache Memory and Virtual Memory)
기술노트
캐시 메모리와 가상 메모리 (Cache Memory and Virtual Memory)
컴퓨터 시스템에서 메모리 관리는 성능에 직접적인 영향을 미치는 중요한 요소입니다. 이 문서에서는 메모리 계층 구조에서 중요한 두 가지 개념인 캐시 메모리와 가상 메모리에 대해 설명합니다.
캐시 메모리 (Cache Memory)
정의
캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치하는 고속의 임시 데이터 저장소입니다. CPU가 자주 사용하는 데이터를 미리 저장해 두어 접근 시간을 단축시키는 것이 주요 목적입니다.
필요성
- 속도 차이 해소: CPU의 처리 속도는 매우 빠른 반면, 주 메모리(RAM)의 접근 속도는 상대적으로 느립니다. 이 속도 차이를 줄이기 위해 캐시 메모리가 필요합니다.
- 병목 현상 방지: 캐시가 없다면 CPU는 데이터를 기다리는 시간이 길어져 성능이 저하됩니다.
캐시 메모리의 계층 구조
- L1 캐시: CPU에 가장 가까운 캐시로, 크기는 작지만(32KB~64KB) 접근 속도가 가장 빠릅니다.
- L2 캐시: L1보다 크지만(256KB~1MB) 약간 느립니다.
- L3 캐시: 일부 현대 CPU에서 사용되며, 여러 코어가 공유하는 대용량(4MB~50MB) 캐시입니다.
캐시 작동 원리
시간적 지역성(Temporal Locality)
한 번 접근한 데이터는 곧 다시 접근될 가능성이 높다는 원리입니다. 예를 들어 루프에서 반복적으로 사용되는 변수가 이에 해당합니다.
공간적 지역성(Spatial Locality)
특정 데이터 근처의 데이터도 곧 사용될 가능성이 높다는 원리입니다. 배열의 순차적 접근이 이에 해당합니다.
캐시 관리 정책
캐시 배치 정책(Cache Placement Policy)
- 직접 매핑(Direct Mapping): 메모리의 각 위치가 캐시의 특정 위치에만 매핑됩니다.
- 완전 연관 매핑(Fully Associative Mapping): 메모리 위치가 캐시의 어느 위치에나 매핑될 수 있습니다.
- 집합 연관 매핑(Set Associative Mapping): 직접 매핑과 완전 연관 매핑의 중간 형태로, 캐시를 여러 집합으로 나누고 메모리 위치가 특정 집합 내 어느 위치에나 매핑될 수 있습니다.
캐시 교체 정책(Cache Replacement Policy)
- LRU(Least Recently Used): 가장 오래 사용되지 않은 데이터를 교체합니다.
- FIFO(First In First Out): 가장 먼저 들어온 데이터를 교체합니다.
- LFU(Least Frequently Used): 사용 빈도가 가장 낮은 데이터를 교체합니다.
- Random: 무작위로 데이터를 교체합니다.
캐시 쓰기 정책(Cache Write Policy)
- Write-Through: 캐시와 주 메모리에 동시에 데이터를 씁니다.
- Write-Back: 캐시에만 데이터를 쓰고, 나중에 주 메모리에 업데이트합니다.
캐시 히트와 캐시 미스
- 캐시 히트(Cache Hit): CPU가 요청한 데이터가 캐시에 있을 때 발생합니다.
- 캐시 미스(Cache Miss): CPU가 요청한 데이터가 캐시에 없을 때 발생하며, 주 메모리에서 데이터를 가져와야 합니다.
- 캐시 히트율(Hit Rate): 전체 메모리 접근 중 캐시 히트의 비율로, 높을수록 시스템 성능이 좋아집니다.
가상 메모리 (Virtual Memory)
정의
가상 메모리는 물리적 메모리(RAM)의 크기 제한을 극복하기 위한 메모리 관리 기법입니다. 프로그램에 연속적인 메모리 공간을 제공하는 추상화 계층으로, 실제 프로그램은 물리적 메모리와 보조 저장장치(하드 디스크, SSD)에 분산되어 저장됩니다.
필요성
- 물리적 메모리 제한 극복: RAM보다 큰 프로그램을 실행할 수 있습니다.
- 메모리 보호: 프로세스 간 메모리 공간을 격리하여 보안을 강화합니다.
- 메모리 단편화 감소: 물리적 메모리의 단편화 문제를 줄일 수 있습니다.
가상 메모리 구현 방식
페이징(Paging)
- 가상 메모리와 물리적 메모리를 동일한 크기의 블록(페이지)으로 나눕니다.
- 가상 페이지는 페이지 테이블을 통해 물리적 페이지에 매핑됩니다.
- 페이지 테이블은 각 프로세스마다 유지되며, 현재 메모리에 있는 페이지와 디스크에 있는 페이지를 관리합니다.
세그멘테이션(Segmentation)
- 프로그램을 논리적 단위(세그먼트)로 나눕니다(코드, 데이터, 스택 등).
- 각 세그먼트는 다른 크기를 가질 수 있으며, 세그먼트 테이블을 통해 물리적 메모리에 매핑됩니다.
- 페이징보다 내부 단편화 문제는 적지만 외부 단편화 문제가 발생할 수 있습니다.
페이지 교체 알고리즘
- FIFO(First In First Out): 가장 먼저 메모리에 올라온 페이지를 교체합니다.
- LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 페이지를 교체합니다.
- LFU(Least Frequently Used): 사용 빈도가 가장 낮은 페이지를 교체합니다.
- NUR/Clock(Not Used Recently): 최근에 사용되지 않은 페이지를 교체하는 LRU의 근사 알고리즘입니다.
- Optimal: 이론상 가장 효율적인 알고리즘으로, 가장 오랫동안 사용되지 않을 페이지를 교체합니다(미래를 알 수 없어 실제로는 구현 불가능).
페이지 폴트 (Page Fault)
프로세스가 접근하려는 페이지가 현재 물리적 메모리에 없을 때 발생하는 현상입니다. 이때 운영체제는 디스크에서 해당 페이지를 메모리로 로드해야 합니다.
스래싱 (Thrashing)
시스템이 실제 작업보다 페이지를 교체하는 데 더 많은 시간을 소비하는 현상입니다. 메모리가 부족하여 페이지 폴트가 지나치게 많이 발생할 때 나타납니다.
캐시 메모리와 가상 메모리의 차이점
특성 | 캐시 메모리 | 가상 메모리 |
---|---|---|
주요 목적 | CPU와 메인 메모리 간의 속도 차이 해소 | 물리적 메모리 제한 극복 |
관리 주체 | 하드웨어(CPU) | 운영체제(소프트웨어) |
크기 | 매우 작음(KB~MB) | 매우 큼(GB~TB) |
속도 | 매우 빠름 | 상대적으로 느림 |
데이터 이동 | 메인 메모리 ↔ 캐시 | 디스크 ↔ 메인 메모리 |
투명성 | 프로그램에 완전히 투명 | 프로그램에 투명하지만 성능에 영향 |
참조 방식 | 하드웨어 기반 자동 참조 | MMU(Memory Management Unit)를 통한 주소 변환 |
실제 사용 예시
캐시 메모리 활용 사례
- 데이터베이스 캐싱: 자주 요청되는 쿼리 결과를 캐시하여 성능 향상
- 웹 브라우저 캐싱: 웹 페이지, 이미지 등을 로컬에 저장하여 로딩 시간 단축
- CDN(Content Delivery Network): 전 세계에 분산된 서버에 콘텐츠를 캐싱하여 사용자 접근성 향상
가상 메모리 활용 사례
- 대용량 데이터 처리: 물리적 메모리보다 큰 데이터셋을 처리할 때
- 멀티태스킹 환경: 여러 프로그램을 동시에 실행할 때 메모리 관리
- 메모리 매핑 파일: 파일을 메모리에 직접 매핑하여 I/O 성능 향상