TIL_098 : 물리메모리 계층, 캐시미스 알고리즘, 메모리 단편화 해결

김펭귄·2026년 1월 16일

Today What I Learned (TIL)

목록 보기
98/115

1. 물리메모리 계층

  • 자주 사용하는 데이터는 작고 빠른 장치에, 그렇지 않은 대용량 데이터는 크고 느린 장치에 보관
계층종류위치주요 특징휘발성 여부
L0레지스터 (Register)CPU 내부가장 빠르고 비쌈, 연산에 직접 사용휘발성
L1~L3캐시 메모리 (Cache)CPU 내부/근처CPU와 RAM 사이의 속도 차이 완화휘발성
L4주기억장치 (RAM)메인보드실행 중인 프로그램과 데이터 저장휘발성
L5보조기억장치 (SSD/HDD)외부 연결영구 저장소, 대용량, 저렴한 가격비휘발성

1.1. 레지스터 (Registers)

  • CPU가 지금 연산하고 있는 데이터를 담는 가장 작은 단위

  • 접근 시간이 거의 0에 수용할 정도로 빠르며, 비트(bit) 단위로 데이터를 처리

1.2. 캐시 메모리 (Cache Memory)

  • CPU와 RAM 사이의 속도 격차를 줄이기 위한 임시 저장소

  • L1 캐시: CPU 코어 안에 위치한 가장 빠른 캐시. 코어마다 독립적 할당 및 사용

  • L2 캐시: L1보다 크고 조금 더 느림. cpu코어 내부나 근처에 존재하며, 최근엔 코어마다 독립적으로 사용하는 추세.

  • L3 캐시: 여러 코어가 공유하는 대용량 캐시. cpu 칩 내부 공용공간에 위치

  • 캐시 미스 일어나면 보통은 L1, L2, L3 캐시에 다 적재하여 이후 L1에서 바로 데이터에 접근할 수 있도록 함

1.3. 주기억장치 (Main Memory / RAM)

  • 프로그램이 실행되기 위해 올라오는 공간

  • CPU가 직접 접근할 수 있는 마지막 단계

  • 주기억장치 = Main Memory = 메모리 = RAM = Random Access Memory

1.4. 보조기억장치 (Secondary Storage)

  • 전원이 꺼져도 데이터를 반영구적으로 보관하는 장치

  • SSD와 HDD

  • CPU가 직접 읽을 수 없어, DMA를 통해 RAM과 Storage사이에서 데이터를 읽고 씀

2. 캐시 미스 알고리즘

  • 캐시 miss를 방지하기 위해 지역성을 지키는게 좋음

    • 시간 지역성(Temporal Locality): 최근에 참조된 주소는 곧 다시 참조될 수 있다

    • 공간 지역성(Spatial Locality): 참조된 주소 근처의 데이터도 곧 사용될 수 있다

  • 캐시 미스 발생시 교체할 캐시를 고르기 위한 알고리즘으로 대표적으로 2개가 존재

2.1. LRU

  • Least Recently Used

  • 가장 오랫동안 사용되지 않은 데이터를 제거하는 방식

  • 시간 지역성(Temporal Locality)에 기반하여, 최근에 사용되지 않았다면 앞으로도 사용될 확률이 낮다고 판단

  • 가장 많이 채택되는 알고리즘

  • 최근 딱 한 번만 참조된 데이터가 자주 쓰이는 데이터를 밀어내는 현상 발생 가능

2.2. LFU

  • 참조 횟수가 가장 적은 데이터를 제거하는 방식

  • 데이터가 얼마나 자주(Frequency) 사용되었는지를 중점적으로 봄

  • 초반에만 집중적으로 사용되다가 더 이상 쓰이지 않는 데이터가 메모리에 계속 머물 수 있다는 단점이 있음

3. 메모리단편화 해결

3.1. 내부 단편화 (Internal Fragmentation)

  • 세그멘테이션 (Segmentation): 프로세스를 논리적 단위(코드, 데이터, 스택 등)로 나누어 가변적인 크기로 할당. 딱 필요한 만큼만 할당하므로 내부 단편화가 발생하지 않음

  • 슬랩 할당자 (Slab Allocator): 커널에서 자주 사용하는 객체 크기별로 메모리를 미리 할당해 두어 낭비를 최소화

  • 페이지 크기 최적화: 페이지 크기를 작게 설정하여 프로세스 끝부분에 남는 자투리 공간을 줄임. 대신 PageTableEntry가 많아져 오버헤드 발생 가능

3.2. 외부 단편화 (External Fragmentation) 해결

  • 압축 (Compaction) : 메모리 곳곳에 흩어져 있는 빈 공간들을 한쪽으로 몰아서 하나의 커다란 가용 공간을 만듦. 옮기는 과정에서 오버헤드 발생

  • 페이징 (Paging) : 물리 메모리를 Frame으로 나누고, 프로세스도 같은 크기(Page)로 나눔

profile
반갑습니다

0개의 댓글