⚡ 운영체제 - 가상 메모리와 페이지 교체 알고리즘
⚡ 운영체제 - 가상 메모리와 페이지 교체 알고리즘
🔹 가상 메모리란?
- 가상 메모리는 실제 물리 메모리보다 큰 공간을 프로세스에 제공하기 위한 메모리 관리 기법이다.
- 각 프로세스는 독립된 주소 공간을 가지며, 운영체제가 실제 메모리(
RAM
)와 보조기억장치(Disk
)를 조합해 가상 주소를 실제 주소로 매핑한다. - 장점은 다음과 같다.
- 물리 메모리보다 더 큰 공간 제공
- 프로세스 간 메모리 격리
- 메모리 단편화 최소화
🔹 페이징 (Paging
)
- 가상 메모리와 물리 메모리를 같은 크기의 블록으로 나누는 방식
- 가상 메모리: 페이지(
Page
) - 물리 메모리: 프레임(
Frame
)
- 가상 메모리: 페이지(
- 페이지 테이블을 통해 페이지와 프레임 간 매핑을 관리하며, 논리 주소는 페이지 번호와 오프셋으로 구성된다.
🔹 세그멘테이션 (Segmentation
)
- 코드, 데이터, 스택 등 논리적 단위로 메모리를 나누는 방식
- 각 세그먼트는 시작 주소(
base
)와 길이(limit
)로 정의되며, 접근 시 유효성 검사를 수행한다. - 가독성과 구조적 관리에는 유리하나, 외부 단편화 문제가 발생할 수 있다.
🔹 페이지 폴트 (Page Fault
)
- 프로세스가 접근한 페이지가 물리 메모리에 없는 경우 발생하는 예외 상황이다.
- 이때 운영체제는 디스크에서 해당 페이지를 메모리로 로드해야 하며, 이 과정에서 교체 알고리즘이 사용될 수 있다.
🔹 페이지 교체 알고리즘
- 메모리가 가득 찼을 때 어떤 페이지를 제거할 지를 결정하는 알고리즘
▫️ FIFO
(First-In First-Out
)
- 가장 먼저 들어온 페이지를 가장 먼저 제거
- 구현이 간단하지만, 오히려 페이지 수를 늘렸을 때 폴트가 증가하는
Belady
의 역설이 발생할 수 있다.
▫️ LRU
(Least Recently Used
)
- 가장 오랫동안 사용되지 않은 페이지를 제거
- 시간 지역성(
Locality of reference
)을 잘 반영한 방식 - 다만 정확한 구현에는 최근 사용 정보를 저장해야 하므로 추가적인 자원 필요
▫️ LFU
, Optimal
등
LRU
외에도 사용 횟수를 기반으로 한LFU
(Least Frequently Used
), 앞으로 가장 오랫동안 사용하지 않을 페이지를 제거하는Optimal
방식 등 다양한 알고리즘이 존재
🔹 TLB
란?
TLB
(Translation Lookaside Buffer
)는 페이지 테이블의 일부를 캐싱하여 주소 변환 속도를 높이는 캐시 메모리다.- 페이지 테이블 접근은 느릴 수 있으므로, 최근 접근한 페이지 매핑을
TLB
에 저장 TLB
히트 시 빠르게 물리 주소 반환TLB
미스 시 페이지 테이블 접근 필요
🔹 LRU
는 어떻게 구현할까?
▫️ 스택 기반 구현
- 각 페이지 접근 시 해당 페이지를 스택 맨 위로 이동
- 가장 아래에 있는 페이지를 제거
- 구현은 간단하지만 성능이 좋지 않다
▫️ 해시맵 + 이중 연결 리스트 구현
- 해시맵: 페이지 번호 → 노드 주소
- 이중 연결 리스트: 사용 순서 관리
O(1)
시간에 삽입, 삭제, 접근이 가능해 성능이 우수- 자바의
LinkedHashMap
으로도 구현 가능
🔹 마무리
- 가상 메모리는 운영체제의 핵심 기능이며, 페이지 교체 알고리즘은 메모리 효율성과 성능에 직접적인 영향을 준다.
TLB
,LRU
구현 방식, 페이징과 세그멘테이션의 차이 등이 자주 등장하므로 개념과 내부 동작 방식을 정확히 숙지해야 한다.
This post is licensed under CC BY 4.0 by the author.