1. 물리적 한계를 극복하는 가상메모리(Virtual Memory)의 개요
가. 가상메모리의 정의
프로세스 전체가 메모리 내에 올리지 않고도 실행이 가능하도록, 물리 메모리(RAM) 크기보다 큰 프로세스를 실행하기 위해 보조기억장치(HDD/SSD) 공간을 주기억장치처럼 확장하여 사용하는 메모리 관리 기법.
나. 가상메모리의 핵심 장점
메모리 이용률 향상: 필요한 부분만 메모리에 로드하므로 더 많은 프로세스를 동시에 실행(다중 프로그래밍 정도 향상) 가능.
논리적 연속성 보장: 물리적 메모리는 파편화되어 있더라도 프로세스에게는 연속된 커다란 주소 공간(Logical Address Space)을 제공하여 개발 편의성 극대화.
2. 가상메모리 관리기법 (가)
가상메모리는 프로세스를 할당·분할하는 주소 사상(Mapping) 방식과, 메모리 적재 시점을 통제하는 사상 기법으로 분류된다.
가. 할당 및 분할 기법 (Paging vs Segmentation)
페이징 (Paging) 기법:
메커니즘: 가상메모리를 고정된 크기의 블록인 페이지(Page)로 나누고, 물리 메모리는 이에 대응하는 동일 크기의 프레임(Frame)으로 분할하여 관리하는 기법.
특징: 페이지 테이블(Page Table)을 통해 논리 주소를 물리 주소로 변환하며, 불연속적인 물리 공간 활용이 가능함.
세그멘테이션 (Segmentation) 기법:
메커니즘: 가상메모리를 고정 크기가 아닌 Code, Data, Stack, 함수 등 논리적 의미 단위인 세그먼트(Segment)라는 가변 크기로 분할하여 관리하는 기법.
특징: 세그먼트 테이블을 사용하며, 주소 변환 시 변위(Offset)가 세그먼트 크기(Limit)를 초과하는지 검증하는 보호(Protection) 기능이 우수함.
세그멘테이션 페이징 (Paged Segmentation) 혼용 기법:
메커니즘: 프로그램을 세그먼트 단위로 먼저 나누어 보안과 공유의 장점을 취한 뒤, 각 세그먼트를 다시 고정 크기인 페이지로 나누어 물리 메모리에 적재하는 상호보완적 기법.
나. 메모리 관리 정책 (적재, 배치, 교체)
적재 정책 (Fetch): 필요한 페이지를 언제 메모리에 올릴 것인가 결정 (요구 페이징-Demand Paging, 예상 페이징).
배치 정책 (Placement): 디스크에서 가져온 페이지를 메모리의 어느 위치에 넣을 것인가 결정 (최초·최적·최악 적합 - 페이징에서는 크기가 고정되어 고민 불필요).
교체 정책 (Replacement): 메모리가 가득 찼을 때 어떤 페이지를 내보낼 것인가 결정 (FIFO, LRU, LFU, NUR 알고리즘 등).
3. 가상메모리 단편화(Fragmentation) 유형 (나)
단편화란 메모리 공간이 작은 조각으로 나뉘어 실질적인 빈 공간이 있음에도 불구하고 프로세스를 할당하지 못해 메모리가 낭비되는 현상이다.
가. 내부 단편화 (Internal Fragmentation)
발생 원인: 페이징(Paging) 기법과 같이 고정 크기 블록 할당 방식을 사용할 때 발생.
현상: 프로세스가 요청한 크기가 할당된 고정 블록 크기보다 작아서, 할당된 블록 내부에서 사용되지 않고 버려지는 빈 메모리 공간이 생기는 현상.
예시: 페이지 크기가 $4\text{KB}$인데 프로세스가 $3\text{KB}$만 요구한 경우, 해당 프레임 내부의 $1\text{KB}$는 낭비됨.
나. 외부 단편화 (External Fragmentation)
발생 원인: 세그멘테이션(Segmentation) 기법과 같이 가변 크기 할당 방식을 사용하거나 프로세스의 빈번한 할당/해제가 반복될 때 발생.
현상: 메모리 상의 총 여유 공간 합계는 프로세스를 할당하기에 충분하지만, 공간들이 연속되지 않고 너무 작은 크기로 파편화(Splitting)되어 있어 할당이 불가능한 상태.
예시: 대기 중인 세그먼트 크기는 $10\text{MB}$인데, 메모리 곳곳에 $3\text{MB}, 4\text{MB}, 5\text{MB}$ 크기의 빈 공간만 흩어져 있어 진입하지 못함.
4. 가상메모리 단편화를 최소화하기 위한 방안 (다)
단편화 해결을 위해서는 설계 관점의 아키텍처적 보완과 런타임 운영체제 수준의 집약·자동화 기술이 유기적으로 연계되어야 한다.
가. 기술적 단편화 최소화 방안
| 분류 | 구체적인 대응 기술 | 단편화 제어 메커니즘 및 효과 |
아키텍처 관점 | 페이징 기법 선택 (외부 단편화 해결) | * 메모리를 고정 크기로 나누는 페이징 아키텍처를 기본 채택하여 세그멘테이션의 고질적 문제인 외부 단편화를 원천 제거 |
페이지 크기(Page Size) 최적화 (내부 단편화 완화) | * 시스템 환경에 따라 페이지 크기를 작게 설정하여 내부 단편화 절감 * 단, 페이지 크기가 너무 작으면 페이지 테이블 크기가 비대해지므로 내부 단편화와의 트레이드오프 조절 필요 | |
운영체제 런타임 관점 | 메모리 압축 (Compaction) (외부 단편화 해결) | * 가변 분할 환경에서 메모리 곳곳에 흩어진 빈 공간들을 한쪽 방향으로 몰아서 하나의 거대한 연속된 가용 공간으로 합치는 작업 (디스크 조각모음과 유사, CPU 오버헤드 유발) |
통합 (Coalescing) (외부 단편화 해결) | * 인접한 두 개의 작은 빈 공간이 발생했을 때, OS가 이를 감지하여 하나의 더 큰 빈 공간으로 결합하여 관리하는 기법 | |
알고리즘 관점 | 슬랩 할당자 (Slab Allocator) (내부 단편화 해결) | * 리눅스 등 현대 커널에서 커널 객체(프로세스 디스크립터 등) 할당 시, 자주 사용되는 크기의 객체 풀(Pool)을 미리 만들어 두고 할당·해제하여 내부 단편화 방지 |
버디 시스템 (Buddy System) (외부 단편화 완화) | * 요청된 크기에 맞추어 메모리를 계속 2의 제곱수($2^n$) 크기로 이등분(Buddy)하여 할당하고, 해제 시 다시 합치는 고속 가변 메모리 분할 알고리즘 |
5. 기술사적 제언: 가상메모리 과부하(Thrashing) 방지와 현대적 하드웨어 연계
스래싱(Thrashing) 전이 예방을 위한 워킹셋(Working Set) 관리: 가상메모리는 단편화 제어만큼이나 스래싱(페이지 교체 횟수가 빈번하여 CPU가 프로세스 실행보다 페이지 교체 연산에 더 많은 시간을 소모하여 시스템 성능이 급감하는 현상) 통제가 중요하다. 이를 방지하기 위해 운영체제는 가상메모리 할당 시 프로세스가 일정 시간 동안 자주 참조하는 페이지 집합인 워킹셋(Working Set)을 주기억장치에 상주시키거나, PFF(Page Fault Frequency, 페이지 부조 빈도) 알고리즘을 연동하여 프로세스별 프레임 할당량을 동적으로 조절해야 한다.
하드웨어 가속기(TLB) 및 Huge Page 기법과의 융합: 단편화를 해결하기 위해 페이징 기법을 고도화하면 주소 변환을 위한 가상 메모리 테이블이 커져 메모리 참조 오버헤드가 발생한다. 이를 극복하기 위해 하드웨어적 캐시 인터페이스인 TLB(Translation Lookaside Buffer)의 적중률을 극대화해야 하며, 대용량 메모리가 필요한 가상화 서버 및 AI 분석 인프라에서는 페이지 크기를 기본 $4\text{KB}$에서 $2\text{MB}\sim1\text{GB}$ 단위로 확장하는 Huge Page(가상 메모리 확장 기법)를 컴플라이언스 표준으로 채택하여 변환 오버헤드와 단편화 리스크를 동시에 관리해야 한다.
댓글 없음:
댓글 쓰기