| 계층 | 종류 | 위치 | 주요 특징 | 휘발성 여부 |
|---|---|---|---|---|
| L0 | 레지스터 (Register) | CPU 내부 | 가장 빠르고 비쌈, 연산에 직접 사용 | 휘발성 |
| L1~L3 | 캐시 메모리 (Cache) | CPU 내부/근처 | CPU와 RAM 사이의 속도 차이 완화 | 휘발성 |
| L4 | 주기억장치 (RAM) | 메인보드 | 실행 중인 프로그램과 데이터 저장 | 휘발성 |
| L5 | 보조기억장치 (SSD/HDD) | 외부 연결 | 영구 저장소, 대용량, 저렴한 가격 | 비휘발성 |
CPU가 지금 연산하고 있는 데이터를 담는 가장 작은 단위
접근 시간이 거의 0에 수용할 정도로 빠르며, 비트(bit) 단위로 데이터를 처리
CPU와 RAM 사이의 속도 격차를 줄이기 위한 임시 저장소
L1 캐시: CPU 코어 안에 위치한 가장 빠른 캐시. 코어마다 독립적 할당 및 사용
L2 캐시: L1보다 크고 조금 더 느림. cpu코어 내부나 근처에 존재하며, 최근엔 코어마다 독립적으로 사용하는 추세.
L3 캐시: 여러 코어가 공유하는 대용량 캐시. cpu 칩 내부 공용공간에 위치
캐시 미스 일어나면 보통은 L1, L2, L3 캐시에 다 적재하여 이후 L1에서 바로 데이터에 접근할 수 있도록 함
프로그램이 실행되기 위해 올라오는 공간
CPU가 직접 접근할 수 있는 마지막 단계
주기억장치 = Main Memory = 메모리 = RAM = Random Access Memory
전원이 꺼져도 데이터를 반영구적으로 보관하는 장치
SSD와 HDD
CPU가 직접 읽을 수 없어, DMA를 통해 RAM과 Storage사이에서 데이터를 읽고 씀
캐시 miss를 방지하기 위해 지역성을 지키는게 좋음
시간 지역성(Temporal Locality): 최근에 참조된 주소는 곧 다시 참조될 수 있다
공간 지역성(Spatial Locality): 참조된 주소 근처의 데이터도 곧 사용될 수 있다
캐시 미스 발생시 교체할 캐시를 고르기 위한 알고리즘으로 대표적으로 2개가 존재
Least Recently Used
가장 오랫동안 사용되지 않은 데이터를 제거하는 방식
시간 지역성(Temporal Locality)에 기반하여, 최근에 사용되지 않았다면 앞으로도 사용될 확률이 낮다고 판단
가장 많이 채택되는 알고리즘
최근 딱 한 번만 참조된 데이터가 자주 쓰이는 데이터를 밀어내는 현상 발생 가능
참조 횟수가 가장 적은 데이터를 제거하는 방식
데이터가 얼마나 자주(Frequency) 사용되었는지를 중점적으로 봄
초반에만 집중적으로 사용되다가 더 이상 쓰이지 않는 데이터가 메모리에 계속 머물 수 있다는 단점이 있음
세그멘테이션 (Segmentation): 프로세스를 논리적 단위(코드, 데이터, 스택 등)로 나누어 가변적인 크기로 할당. 딱 필요한 만큼만 할당하므로 내부 단편화가 발생하지 않음
슬랩 할당자 (Slab Allocator): 커널에서 자주 사용하는 객체 크기별로 메모리를 미리 할당해 두어 낭비를 최소화
페이지 크기 최적화: 페이지 크기를 작게 설정하여 프로세스 끝부분에 남는 자투리 공간을 줄임. 대신 PageTableEntry가 많아져 오버헤드 발생 가능
압축 (Compaction) : 메모리 곳곳에 흩어져 있는 빈 공간들을 한쪽으로 몰아서 하나의 커다란 가용 공간을 만듦. 옮기는 과정에서 오버헤드 발생
페이징 (Paging) : 물리 메모리를 Frame으로 나누고, 프로세스도 같은 크기(Page)로 나눔