[OS] 메모리 관리

do_it·2025년 10월 23일

os

목록 보기
12/13
순서학습 주제핵심 질문
메모리 계층 구조CPU~디스크까지 어떤 계층이 있는가?
캐시 메모리 원리CPU는 왜 캐시가 필요한가?
캐시 교체와 적중률캐시 효율은 어떻게 평가되는가?
프로세스 메모리 구조프로세스가 메모리를 어떻게 사용하는가?
가상 메모리 구조논리 주소는 어떻게 물리 주소로 변환되는가?
페이징, TLB, 스왑가상 메모리는 성능을 어떻게 유지하는가?
캐시 vs 가상 메모리 통합두 시스템은 어떤 관계인가?

1. 메모리

프로세스가 메모리를 어떻게 사용하는가 → OS가 이를 어떻게 효율적으로 관리하는가

1-1. 메모리 계층 구조

CPU~디스크까지 어떤 계층이 있는가?

계층구성요소관리 주체속도용량주요 구성요소
1레지스터(Register)CPU 하드웨어가장 빠름매우 작음CPU 내부 레지스터
2캐시(Cache)CPU 하드웨어빠름작음L1, L2, L3 캐시
3메인 메모리(Main Memory, RAM)운영체제(OS)중간중간DRAM (Dynamic RAM)
4보조기억장치(Secondary Storage)운영체제(OS) /
파일 시스템느림SSD, HDD
5보관 장치(Backup Storage)사용자 / 서버가장 느림매우 큼외장 드라이브, 클라우드, 테이프 등
  • 캐시메모리: CPU ↔ 메인 메모리 간 최적화
  • 가상 메모리: 메인 메모리 ↔ 디스크 간 최적화

1-2. 지역성의 원리 (Principle of Locality)

모든 메모리 관리 기법의 핵심 전제

CPU가 데이터를 접근할 때 특정 영역을 집중적으로 접근하는 경향

  • 시간적 지역성: 최근에 사용된 데이터는 곧 다시 사용될 가능성이 높음
  • 공간적 지역성: 현재 참조된 주소와 가까운 주소의 내용이 곧 참조될 가능성이 높음

2. 캐시 메모리 (Cache Memory)

CPU는 왜 캐시가 필요한가? → CPU 속도 vs RAM 속도의 차이 (메모리 병목 문제)

CPU의 메모리 접근 속도를 보완하기 위한 하드웨어적 메모리 관리 기법

OS가 직접 개입하지 않으며, CPU와 MMU 수준에서 관리됨

2-1. 기본 동작

  • 캐시 라인(Cache Line): 캐시가 데이터를 저장하는 최소 단위
  • Cache Hit (적중) / Miss (실패): 데이터가 캐시에 있을 때와 없을 때의 처리

2-2. 주소 매핑 기법

데이터가 RAM에서 캐시로 올라올 때 어느 위치에 저장될지 결정하는 방법

  • 직접 매핑 (Direct Mapping): 가장 단순하지만 충돌(Conflict Miss)이 자주 발생합니다.
  • 완전 연관 매핑 (Fully Associative Mapping): 충돌은 적지만 비용이 높고 탐색이 느립니다.
  • 집합 연관 매핑 (Set-Associative Mapping): 두 방식의 절충안이며 현대 시스템에서 주로 사용됩니다.

1-2. 메인 메모리 & 프로세스 주소 공간

RAM이 어떻게 사용되는가?

  • 프로그램 실행 시 Code / Data / Heap / Stack 구조로 메모리 배치
  • 프로세스마다 독립된 주소 공간을 가짐
  • 논리 주소(Logical)와 물리 주소(Physical)의 구분 등장
  • 여기서 OS는 논리 주소 → 물리 주소 매핑을 관리해야 함

➡ 이 논리 주소 매핑을 효율적으로 관리하기 위한 기술이 가상 메모리

논리 주소 vs 물리 주소

  • 논리 주소(Logical Address): CPU가 생성하는 주소 (가상 주소, Virtual Address)
  • 물리 주소(Physical Address): 실제 RAM 상의 주소

운영체제는 논리 주소 → 물리 주소 변환을 통해 프로세스마다 독립적인 주소 공간을 제공하며, 이것이

가상 메모리 시스템의 핵심 동작 원리

MMU (Memory Management Unit)

MMU는 CPU 안에 내장된 하드웨어로, 주소 변환(Address Translation) 을 수행함

  • 논리 주소를 물리 주소로 변환
  • 페이지 테이블(Page Table) 참조
  • 접근 권한 체크(읽기/쓰기/실행 여부)
  • 캐시 및 TLB 관리

주소 공간의 구조

프로세스가 실행될 때, 운영체제는 프로세스마다 독립적은 주소공간을 제공함

주소공간은 일반적으로 다음 4개의 영역으로 구성됨

영역설명예시
코드(Code)실행 명령어 저장함수, 제어문
데이터(Data)전역 변수, static 변수int a = 10;
힙(Heap)동적 메모리 할당 공간malloc(), new
스택(Stack)함수 호출, 지역 변수 저장함수 매개변수, 지역 변수
  • 코드, 데이터는 고정 크기
  • 힙, 스택은 실행 중 동적으로 변함

메모리 바인딩

주소를 결정하는 시점에 따라 3가지로 구분됨

바인딩 시점설명특징
Compile Time실행 전에 절대 주소로 결정주소 고정, 유연성 낮음
Load Time프로그램 로드 시 주소 결정재배치 가능
Run Time실행 중 동적으로 주소 변환가상 메모리 필요, 가장 유연함

3. 가상 메모리 (Virtual Memory)

메모리 용량을 확장하고, 프로세스 간 메모리 독립성을 보장하는 OS 관리 기법

왜 필요한가? 물리적 메모리 한계 극복, 메모리 보호, 다중 프로그래밍 효율성 증대

  • 물리적으로 전재하지 않는 메모리를 마치 존재하는 것처럼 사용 → 셀제 RAM보다 큰 공간을 사용하는 프로그램도 문제없이 실행할 수 있도록 하는 논리적 메모리 확장 기법
  • 프로세스마다 독립된 논리적 주소 공간을 제공하고, 필요한 데이터만 실제 물리 메모리(RAM)에 적재

[주소 공간 구조]

구성요소설명
가상 주소(Virtual Address)프로세스가 바라보는 주소
물리 주소(Physical Address)실제 RAM 상의 주소
MMU (Memory Management Unit)주소 변환을 수행하는 하드웨어 장치
페이지 테이블(Page Table)가상 주소 → 물리 주소 매핑 정보 저장

프로세스는 OS로부터 가상 주소 공간(Virtual Address Space)을 할당받는데

이 가상 주소는 실제 물리 주소로 직접 연결되지 않고,

MMU(Memory Management Unit)가 페이지 테이블(Page Table)을 통해 변환(mapping)

3-1. 기본 동작: 페이징 기법 (Paging)

가상 메모리는 일반적으로 페이징 기법을 사용함

  • 가상 메모리와 물리 메모리를 같은 크기의 블록 단위로 나눔
    • 가상 메모리의 단위 → 페이지(Page)
    • 물리 메모리의 단위 → 프레임(Frame)
  • 페이지와 프레임은 1:1로 매핑됨
용어의미
페이지(Page)가상 메모리의 고정 크기 블록 (예: 4KB)
프레임(Frame)물리 메모리의 고정 크기 블록 (예: 4KB)
페이지 폴트(Page Fault)접근하려는 페이지가 메모리에 없을 때 발생
스왑(Swap)디스크에서 페이지를 불러오거나 내보내는 작업
  1. 프로세스가 가상 주소에 접근
  2. MMU가 페이지 테이블을 통해 해당 페이지가 물리 메모리에 있는지 확인
  3. 있으면 (Page Hit) → 바로 접근
  4. 없으면 (Page Fault) → 디스크에서 해당 페이지를 불러와 RAM의 빈 프레임에 적재
  5. 페이지 교체가 필요할 경우 → 페이지 교체 알고리즘으로 결정 (LRU, FIFO 등)

⇒ 즉, OS는 필요할 때만 디스크에서 데이터를 메모리에 수요에 따라(Demand Paging)


4. 페이징 & 세그멘테이션

페이징과 세그멘테이션 모두 프로세스의 메모리 공간을 비연속적으로 물리 메모리에 할당하여 가상 메모리를 구현하는 기법

두 기법의 주요 차이점은 메모리를 나누는 단위와 기준에 있음

구분페이징 (Paging)세그멘테이션 (Segmentation)
분할 단위고정 크기의 페이지(Page)가변 크기의 세그먼트(Segment)
분할 기준물리적 주소 공간의 효율적 관리논리적 의미 단위 (코드, 데이터, 힙, 스택, 함수 등)
주소 구조<페이지 번호, 오프셋><세그먼트 번호, 오프셋>
주체운영체제와 하드웨어에 의해 투명하게 관리 (사용자에게 숨김)사용자/컴파일러의 논리적 구조를 반영 (사용자에게 노출)
주요 단편화내부 단편화 (Internal Fragmentation)외부 단편화 (External Fragmentation)
메모리 공유/보호페이지 단위로 세밀한 보호 어려움논리적 단위이므로 공유 및 보호가 용이함

1) 페이징 (Paging)

메모리를 고정된 크기의 조각(Page/ Frame)으로 나누어 관리하여 외부 단편화를 완전히 제거함

대신 페이지 크기 때문에 발생하는 내부 단편화가 존재함

장점 (Pros)

  1. 외부 단편화 제거: 메모리가 고정된 크기의 프레임 단위로 관리되어 외부 단편화가 발생하지 않음
  2. 단순한 메모리 관리: 할당/해제가 프레임 단위로 이루어져 빈 공간 관리가 단순함
  3. 프로그래머 투명성: 주소 변환이 OS와 MMU에 의해 처리되어 프로그래머는 신경 쓸 필요가 없음

단점 (Cons)

  1. 내부 단편화 발생: 프로세스 크기가 페이지 크기의 정수배가 아닐 경우, 마지막 페이지에서 사용되지 않는 공간이 발생함
  2. 페이지 테이블 오버헤드: 모든 프로세스가 페이지 테이블을 유지해야 하므로, 테이블 저장 공간 및 크기 관리 비용이 발생함
  3. 느린 주소 변환: 물리 주소 변환을 위해 최소 두 번의 메모리 접근이 필요하여 속도가 느려짐 (TLB를 통해 완화됨)

2) 세그멘테이션 (Segmentation)

프로그램의 코드, 데이터, 스택 등 의미 있는 논리적 단위(Segment)로 나누어 관리함

사용자 관점의 메모리 구조를 반영하지만, 크기가 가변적이라 외부 단편화 문제가 발생할 수 있음

장점 (Pros)

  1. 내부 단편화 최소화/제거: 세그먼트 크기가 논리적 크기와 정확히 일치하여 내부 단편화가 발생하지 않음
  2. 효율적인 보호 및 공유: 코드/데이터 등 논리적 단위로 분할되어 공유 및 접근 권한 설정이 용이함
  3. 프로그래머 편의성: 프로그램 구조에 따라 메모리를 구성하므로 디버깅 및 관리가 직관적임

단점 (Cons)

  1. 외부 단편화 발생: 세그먼트 크기가 가변적이어서, 메모리 할당/해제 시 크기가 다른 빈 공간이 발생함
  2. 복잡한 메모리 관리: 외부 단편화 해결을 위해 메모리 압축(Compaction) 등 복잡한 기법이 요구됨
  3. 가변적인 크기 관리: 가변적인 세그먼트 크기에 맞춰 적합한 빈 공간을 찾는 최적화 과정이 복잡함

페이지 교체 알고리즘

프로세스가 접근하려는 페이지가 물리 메모리(RAM)에 없을 때 페이지 폴트(Page Fault) 발생

→ 해당 페이지를 디스크에서 물리 메모리로 가져와야 하는데

물리 메모리의 모든 프레임이 이미 사용중인 경우, OS는 현재 메모리에 있는 페이지 중 하나를 희생시켜 공간을 확보함 (Swap Out)

이 때 어떤 페이지를 희생시킬것인가를 결정하는 규칙이 페이지 교체 알고리즘

  • 목표: 페이지 폴트 발생 확률의 최소화
    가장 오랫동안 사용되지 않을 것으로 예상되는 페이지를 교체 대상으로 선택해야 함

주요 알고리즘

페이지 교체 알고리즘은 대체로 지역성의 원리에 기반하여 작동함

알고리즘개념
FIFO가장 오래된 페이지 제거
LRU (Least Recently Used)가장 오랫동안 사용되지 않은 페이지 제거
OPT (Optimal)앞으로 가장 늦게 참조될 페이지 제거 (이론적 최적)
ClockLRU 근사 알고리즘 (효율성과 단순함의 절충)

1) OPT (Optimal, 최적) 알고리즘

  • 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체함
  • 페이지 폴트율이 가장 낮음
    다른 알고리즘 성능 평가의 기준(Benchmark)이 됨
  • [+] 이론적으로 최상의 성능을 보장함
  • [-] CPU가 미래 접근 순서를 미리 알 수 없어 실제 구현은 불가능함

2) FIFO (First-In, First-Out, 선입선출)

  • 물리 메모리에 가장 먼저 들어온(가장 오래된) 페이지를 교체함
  • 구현이 매우 간단
    페이지 유입 시간만 추적함
  • [+] 단순한 구현
  • [-] 오래되었어도 자주 사용되는 페이지를 교체할 수 있어 효율이 나쁨
    ’벨라디의 모순(Belady's Anomaly)' 현상 발생 가능성이 있음

3) LRU (Least Recently Used, 최소 최근 사용)

  • 가장 오랫동안 사용되지 않은 페이지를 교체함 (시간적 지역성 기반 예측)
  • OPT 다음으로 좋은 성능을 보임. 가장 이상적인 실용 알고리즘으로 평가됨
  • [+] 지역성의 원리를 잘 반영하여 페이지 폴트율이 낮음
  • [-]모든 페이지의 최근 사용 시간 기록에 필요한 하드웨어적 오버헤드가 매우 큼

4) LFU (Least Frequently Used, 최소 빈도 사용)

  • 물리 메모리 페이지 중 가장 적게 사용된 횟수를 가진 페이지를 교체함
  • 페이지의 사용 빈도에 초점을 맞춤
  • [+] 오랫동안 메모리에 있었더라도 자주 사용된 페이지를 보호함
  • [-] 초기에 집중 사용 후 현재는 사용되지 않는 페이지가 계속 메모리에 남는 문제 발생 가능함

0개의 댓글