[CS] 가상메모리 동작원리 (2)
안녕하세요, 루피입니다!
지난 글에서는 가상 메모리가 왜 필요하며, 페이징과 세그멘테이션을 통해 어떻게 메모리 단편화 문제를 해결했는지 알아보았습니다. 오늘은 가상 메모리가 실제로 어떻게 필요한 것만, 필요할 때 메모리에 올리는지, 동작 원리에 대해 정리 해보겠습니다. 바로 시작합니다.
1. Demand Paging (요구 페이징)
가상 메모리의 핵심은 Demand Paging입니다. 이름 그대로, '요구가 있을 때만 페이지를 메모리에 올린다'는 뜻입니다.
프로그램을 시작할 때 모든 데이터를 RAM에 올리는 것은 엄청난 낭비입니다. 요구 페이징은 일단 아무것도 올리지 않고 시작합니다. 그러다 CPU가 특정 주소의 데이터를 요청했는데 그 데이터가 RAM에 없으면, 바로 그때 디스크에서 해당 페이지만 가져와 RAM에 적재합니다.
장점
- 메모리 사용 효율 극대화: 실제로 사용하는 부분만 메모리에 올립니다.
- 프로그램 시작 시간 단축: 전체를 로드할 필요 없이 즉시 실행 가능합니다.
- 더 많은 프로세스 동시 실행: 한정된 RAM으로 더 많은 작업 처리가 가능합니다.
2. Page Fault (페이지 폴트)
CPU가 요청한 페이지가 RAM에 없을 때 발생하는 현상이 바로 페이지 폴트입니다.
이건 시스템 오류가 아니라, "필요한 페이지가 지금 없으니, 디스크에서 가져와 주세요!"라고 운영체제에 보내는 정상적인 요청 신호입니다.
페이지 폴트 처리 과정
- 주소 요청: CPU가 특정 가상 주소의 데이터를 요청합니다.
- 페이지 부재 확인: MMU가 주소 변환을 시도하다가, 해당 페이지가 RAM에 없음을 확인하고 운영체제에 페이지 폴트 트랩(Trap)을 겁니다.
- 페이지 로드: 운영체제는 디스크(Swap 영역)에서 해당 페이지를 찾아 RAM의 비어있는 프레임으로 가져옵니다.
- 테이블 업데이트: 페이지가 RAM의 어느 프레임에 저장되었는지 페이지 테이블에 기록합니다.
- 작업 재개: 원래 중단되었던 명령어를 다시 실행하여 작업을 이어갑니다.
3. 페이지 교체 알고리즘
만약 RAM에 빈 프레임이 없다면 어떻게 될까요? 이때 운영체제는 기존에 있던 페이지 중 하나를 디스크로 내보내고(Swap-out) 그 자리에 새로운 페이지를 올려야 합니다. 누구를 내보낼지 결정하는 규칙이 바로 페이지 교체 알고리즘입니다.
1) FIFO (First-In, First-Out)
- 개념: 가장 먼저 메모리에 들어온 페이지를 가장 먼저 내보냅니다.
- 장점: 구현이 매우 간단합니다.
- 단점: 아주 예전에 들어왔어도 계속 자주 쓰이는 중요한 페이지일 수 있기 때문에 비효율적인 경우가 많습니다.
2) LRU (Least Recently Used)
- 개념: "가장 오랫동안 사용되지 않은 페이지를 내보내자"는 아이디어입니다.
- 원리: 지역성 원리(Locality Principle)에 따라, 오랫동안 안 쓴 페이지는 앞으로도 안 쓸 가능성이 높다고 판단합니다.
- 장점: 성능이 우수합니다.
- 단점: 모든 페이지의 마지막 사용 시간을 기록해야 해서 구현이 복잡하고 비용이 비쌉니다.
3) Clock Algorithm (Second-Chance)
- 개념: LRU의 성능과 FIFO의 단순함을 절충한 현실적인 알고리즘입니다.
- 동작 방식: 각 페이지에 '참조 비트(Reference Bit)'를 두고, 최근에 사용되었는지(1) 아닌지(0)만 간단히 확인하여 교체 대상을 결정합니다.
- 특징: 많은 운영체제에서 이와 유사한 방식이 사용되는 현실적인 해법입니다.
4. TLB (Translation Lookaside Buffer)
주소 변환을 할 때마다 RAM에 있는 페이지 테이블에 접근하는 것은 생각보다 느립니다. 이 속도를 높이기 위해 MMU 안에 TLB라는 초고속 캐시 메모리를 둡니다.
TLB 동작 방식
- TLB Hit: CPU가 요청한 가상 주소 정보가 TLB에 있으면, RAM을 거치지 않고 즉시 물리 주소로 변환합니다.
- TLB Miss: 정보가 없으면 RAM의 페이지 테이블을 조회하고, 그 결과를 TLB에 새로 기록하여 다음번 접근 속도를 높입니다.
TLB의 중요성
TLB 미스가 발생하면 메모리 접근이 두 번 필요해져(페이지 테이블 조회 + 실제 데이터 접근) 성능에 큰 영향을 미칩니다.
5. 지역성 원리 (Locality Principle)
효율적인 페이지 교체의 핵심은 지역성 원리를 이해하는 것입니다.
- 시간적 지역성: 최근에 참조된 페이지가 다시 참조될 가능성이 높음
- 공간적 지역성: 참조된 페이지 근처의 페이지가 참조될 가능성이 높음
이 원리를 활용하여 페이지 교체 알고리즘은 '앞으로도 사용될 가능성이 높은' 페이지를 메모리에 유지하려고 합니다.
오늘도 화이팅입니다.