지금까지 9장의 내용을 학습했지만 이에 대한 개념이 아직 헷갈리고 책의 장황한 설명들로 인하여 이해가 어려웠던 내용에 대해 직접 서술형 문제를 답하는 연습을 수행하고 이를 기록하여 9장의 내용을 더 잘 이해하고자 했다. GPT가 내주는 서술형 문제를 직접 작성해 보고 추가로 설명이 되면 좋은 내용들을 추가했다.
가상 메모리가 가지는 주요 목적
- 캐싱 도구로서의 역할
가상 메모리는 주 기억 장치(DRAM)를 보조 기억장치(디스크)의 캐시로 활용한다. 프로그램이 참조하는 페이지가 주 기억장치에 있으면 이를 페이지 히트(page hit)라고 하며, 디스크 접근 없이 빠르게 데이터를 가져올 수 있다. 반대로, 참조한 페이지가 주기억장치에 없으면 페이지 폴트(page fault)가 발생하고 , 운영체제는 디스크에서 해당 페이지를 메모리로 가져온다. 이러한 방식으로 자주 사용되는 데이터만 메모리에 유지함으로써, 한정된 물리 메모리 공간을 효율적으로 활용할 수 있다. - 메모리 관리 도구로서의 역할
각 프로세스는 고유한 가상 주소 공간을 갖는다. 운영체제는 가상 주소 물리 주소로 매핑하여 각 프로세스가 독립적으로 메모리를 사용하는 것처럼 보이게 한다. 이로 인해 프로그램은 자신의 메모리가 연속적인 것처럼 생각하고 동작할 수 있어, 메모리 관리가 단순해지고 유연해진다. 예를 들어, 프로그램이 사용하는 힙과 스택을 서로 떨어진 공간에 배치하거나, 중간에 공간을 할당 및 해제해도 연속적인 메모리처럼 유지할 수 있다. - 메모리 보호 두구로서의 역할
가상 메모리는 프로세스 간의 메모리 접근을 격리시켜 보안을 강화한다. 한 프로세스는 다른 프로세스의 메모리 공간에 접근할 수 없으며, 커널 공간 역시 사용자 프로그램으로부터 보호된다. 만약 프로그램이 접근해서는 안 되는 메모리 영역을 참조하려 하면 운영체제는 페이지 폴트를 통해 이 동작을 감지하고 이를 차단하거나 종료시킨다. 이를 통해 시스템 전체의 안정성과 보안이 향상된다.
주소 변환(Address Translation)의 단계적 과정과 구성요소
- 가상 주소 생성
프로그램이 메모리를 참조할 때, CPU는 물리 주소가 아닌 가상 주소(virtual address) 를 생성한다. 이 주소는 해당 프로세스만의 주소 공간에서 의미 있는 주소다. - TLB(Translation Lookaside Buffer) 조회
CPU는 먼저 TLB라는 작은 캐시 메모리에서 이 가상 주소의 변환 결과(가상 페이지 번호 → 물리 페이지 번호)를 찾는다.- TLB hit: 변환된 물리 주소를 즉시 사용하여 메모리에 접근한다.
- TLB miss: 변환 결과가 없다면, 페이지 테이블을 참조해야 한다.
- 페이지 테이블 조회
TLB miss가 발생하면, 하드웨어 내의 MMU(Memory Management Unit)가 페이지 테이블(page table)을 통해 가상 주소를 물리 주소로 변환한다.
현대 시스템은 메모리 효율성을 위해 다단계 페이지 테이블(multi-level page tables)을 사용한다. 예를 들어, 64비트 주소에서 상위 비트들은 테이블 인덱스로 사용되고, 마지막 단계에서 실제 프레임 번호를 얻는다. - 물리 주소 생성
페이지 테이블을 통해 얻은 물리 페이지 번호에, 가상 주소의 페이지 오프셋을 더하여 최종 물리 주소(physical address)를 얻는다. - 메모리 접근 및 TLB 업데이트
- 메모리에서 데이터를 불러온다.
- 변환 결과를 TLB에 캐시 하여 이후 동일한 주소 접근 시 빠르게 처리할 수 있도록 한다.
- 페이지 폴트(Page Fault)
만약 페이지 테이블에 해당 항목이 없거나, 디스크에 존재하는 경우에는 페이지 폴트가 발생하고 운영체제가 디스크에서 데이터를 메모리로 가져와 페이지 테이블과 TLB를 갱신한다.
페이지 폴트(Page Fault)의 발생과 처리 과정
- 페이지 폴트 발생 상황
CPU가 어떤 가상 주소를 참조했을 때, 해당 주소가 가리키는 페이지가 주기억장치(DRAM)에 없는 경우.- 이 경우 페이지 테이블에 유효하지 않은 항목이 있거나, 항목 자체가 없을 수도 있음.
- 운영체제의 개입
페이지 폴트는 예외(인터럽트)로 처리된다. 이때 하드웨어는 CPU의 실행을 일시 중지하고, 커널 모드로 전환하여 운영체제를 호출한다. - 운영체제의 역할
운영체제는 다음과 같은 작업을 수행한다:- 디스크에서 해당 페이지를 찾아서 메모리의 빈 페이지 프레임에 로드
- 페이지 테이블을 업데이트 (해당 가상 주소에 대한 물리 프레임 번호 등록 및 유효 비트 설정)
- TLB를 갱신하거나 해당 엔트리를 무효화
- CPU가 중단된 위치에서 다시 명령을 실행하도록 재시작
- 에러 처리
만약 참조한 주소가 아예 존재하지 않는 잘못된 주소이거나 접근 권한이 없는 주소라면, segmentation fault 등 예외를 발생시켜 프로세스를 종료한다.
시스템 성능에 미치는 영향
- 디스크 접근은 매우 느리다: 메모리 접근은 나노초(ns) 단위지만, 디스크 접근은 밀리초(ms) 단위로 수백만 배 차이.
- 페이지 폴트가 잦으면 성능 급감: 페이지 교체가 빈번하게 일어나면, CPU는 대부분의 시간을 디스크 I/O를 기다리는 데 쓰게 된다.
- 쓰레싱(Thrashing): 작업 집합(working set)이 물리 메모리에 수용되지 못하면, 시스템은 끊임없이 페이지를 교체하게 되며, 실질적인 진행은 거의 없게 된다.
단일 페이지 테이블 vs 다단계 페이지 테이블
- 단일 페이지 테이블의 한계
- 예: 32비트 주소 공간, 페이지 크기 4KB일 경우
→ 페이지 수 = 2³² / 2¹² = 2²⁰ = 약 100만 개
→ 각 페이지마다 4바이트로 페이지 테이블 항목을 저장한다면
→ 총 페이지 테이블 크기 = 2²⁰ × 4 = 4MB - 64비트 시스템에서는 상황이 더 심각해짐. 테이블이 기가바이트 단위로 커질 수 있음.
- 문제점: 많은 프로그램은 주소 공간 전체를 사용하지 않기 때문에 대부분이 낭비됨.
- 예: 32비트 주소 공간, 페이지 크기 4KB일 경우
- 다단계 페이지 테이블의 필요성
- 불필요한 페이지 테이블 항목의 공간 낭비를 줄이기 위해, 필요할 때만 메모리를 할당하는 구조를 도입.
- 다단계 페이지 테이블은 트리 구조를 이루며, 상위 테이블이 하위 테이블을 가리키는 포인터를 가지고 있음.
- 실제 주소 공간에서 사용 중인 영역에 해당하는 테이블만 동적으로 생성.
다단계 주소 변환 방식
예: 32비트 주소 공간, 2단계 페이지 테이블
- 가상 주소를 비트 단위로 나눔:
- 상위 10비트: 상위 페이지 테이블의 인덱스
- 중간 10비트: 하위 페이지 테이블의 인덱스
- 하위 12비트: 페이지 내 오프셋
→ 이 구조는 마치 "이중 배열"을 순차적으로 접근하듯이 작동하며,
최종적으로 물리 프레임 번호 + 오프셋을 통해 물리 주소를 얻는다.
장점 요약
- 공간 절약: 사용 중인 부분만 메모리에 존재하여 비효율 감소
- 확장성: 주소 공간이 커져도 테이블 크기의 급격한 증가 없이 대응 가능
- 유연성: 주소 공간이 희소하게 사용되는 현대의 프로그램 패턴에 적합
TLB(Translation Lookaside Buffer)의 역할
- TLB는 주소 변환 캐시다. CPU가 가상 주소를 물리 주소로 변환할 때, 이 과정을 빠르게 하기 위해 최근에 사용한 페이지 매핑 정보를 저장한다.
- 이 구조 덕분에, 페이지 테이블 전체를 매번 접근하지 않아도 되므로, 주소 변환 속도가 획기적으로 향상된다.
- TLB 항목 하나는 보통 다음 정보를 포함한다:
- 가상 페이지 번호(VPN)
- 물리 페이지 번호(PPN)
- 유효 비트, 접근 권한 등
TLB Miss가 발생했을 때 처리 과정
- TLB 조회 실패(TLB miss)
→ 변환 정보가 없으므로 MMU(Memory Management Unit)가 페이지 테이블 탐색 시작. - 페이지 테이블 탐색
- 가상 주소를 VPN과 오프셋으로 나눈 뒤, VPN을 다단계 페이지 테이블의 인덱스로 사용해 탐색.
- 최종적으로 물리 페이지 번호(PPN)를 찾음.
- 물리 주소 계산 및 데이터 접근
- PPN과 오프셋을 합쳐 최종 물리 주소를 계산.
- 해당 주소로 메모리에서 데이터를 읽음.
- TLB 갱신
- 새로 얻은 매핑 정보를 TLB에 추가 (기존 항목을 제거할 수도 있음, 이는 캐시 교체 정책에 따라 다름)
- 페이지 폴트가 있는 경우
- 만약 페이지가 메모리에 없으면 → 운영체제가 디스크에서 페이지를 로드 후, 위 과정을 다시 수행.
TLB가 성능에 미치는 영향
- TLB hit → 매우 빠름 (수 나노초)
- TLB miss → 페이지 테이블 접근 필요 → 수십에서 수백 나노초 소요
- 페이지 폴트 → 디스크 접근 → 수 밀리초 소요 (매우 느림)
→ 따라서 TLB hit ratio가 높을수록 시스템의 전체 성능이 좋아짐.
→ 현대 CPU는 TLB hit ratio를 높이기 위해 TLB prefetching, superpages(큰 페이지) 등을 사용하기도 함.
'크래프톤 정글 (컴퓨터 시스템: CSAPP) > 9장 가상 메모리' 카테고리의 다른 글
컴퓨터 시스템 : CSAPP 9장 정리 - 9.9 동적 메모리 할당 9.9.1~9.9.5 (0) | 2025.04.24 |
---|---|
컴퓨터 시스템 : CSAPP 9장 - 서술형 문제를 통해 이해하기 Part.2 (0) | 2025.04.23 |
컴퓨터 시스템 : CSAPP 9장 정리 - 9.8 메모리 매핑 (0) | 2025.04.20 |
컴퓨터 시스템 : CSAPP 9장 정리 - 9.7 사례 연구 : 인텔 코어 i7/리눅스 메모리 시스템 (0) | 2025.04.20 |
컴퓨터 시스템 : CSAPP 9장 정리 - 9.6 주소의 번역 (0) | 2025.04.20 |