다시보는 Virtual Memory

CorinBeom·2025년 6월 11일
0

CS

목록 보기
18/22

공부 키워드에 있던 개념들을 정리해보자 !

💽 Virtual Memory (가상 메모리)


📌 개념 요약

  • 정의:
    프로세스가 사용하는 주소 공간이 실제 물리 메모리(RAM)와 분리되어 운영체제가 제공하는 논리적 주소 공간

  • 특징:

    1. 메모리 보호 (Protection): 프로세스 간 독립된 주소 공간 → 다른 프로세스 메모리 침범 불가
    2. 추상화 (Abstraction): 물리 메모리 크기와 관계없이 프로그램은 항상 넓은 주소 공간 사용 가능
    3. 유연성 (Flexibility): 메모리 부족 시 보조기억장치 활용 (ex. Swap)
    4. 효율성 (Efficiency): 메모리 활용률 극대화 → 실제로 필요한 데이터만 메모리에 유지

📌 주소 공간 분리

  • CPU가 직접 사용하는 주소 = 가상 주소 (Virtual Address)
  • 가상 주소 → MMU (메모리 관리 유닛)가 물리 주소 (Physical Address)로 변환

📌 주소 공간 구성 예시 (64-bit 시스템 기준)

구분주소 범위설명
커널 공간상위 절반 (ex: 0xFFFF...)커널 코드, 데이터
사용자 공간하위 절반 (ex: 0x0000...)유저 프로세스 코드, 데이터, 힙, 스택
  • 커널과 유저의 주소 공간이 분리됨 → 보호 기능 핵심.

📌 Virtual Memory의 주요 특징

Demand Paging 기반

  • 페이지 단위로 물리 메모리에 로딩
  • 모든 페이지를 미리 올리지 않음 → Lazy Loading 가능

가상 주소는 연속, 물리 주소는 불연속

  • 프로그램 입장에서는 연속된 메모리처럼 보임
  • 실제 물리 메모리에는 임의의 프레임에 저장됨

메모리 부족 시 Swap으로 확장

  • Swap-in / Swap-out 통해 디스크 사용 → 물리적 한계 완화

하드웨어-소프트웨어 협력

  • MMU: 주소 변환 수행
  • OS: 페이지 테이블 관리, 페이지 폴트 처리

📌 장점 vs 단점

장점단점
프로세스 간 보호구현 복잡
메모리 효율적 사용성능 오버헤드 (변환 비용)
주소 공간 확장페이지 폴트 발생 가능
Lazy Load 가능Swap 사용 시 속도 저하

📌 왜 Virtual Memory가 등장했나?

  • 초기 시스템은 "물리 주소만 사용하는 시스템" → 다중 프로세스 어려움
  • 프로그램간 메모리 충돌 → 치명적 오류
  • → 프로세스 독립성 확보 위해 "가상 주소 ↔ 물리 주소" 분리 등장

📌 한줄 정의

"Virtual Memory는 프로세스마다 독립된 가상 주소 공간을 제공하여 물리 메모리를 추상화하고, 보호, 확장성, 효율성을 제공하는 메모리 관리 기법이다."


📑 Page Table (페이지 테이블)

📌 개념 요약

  • 정의:
    가상 주소(Virtual Address)를 물리 주소(Physical Address)로 변환하기 위한 핵심 데이터 구조.

  • 주소 변환 역할:

    • 가상 페이지 번호 → 물리 프레임 번호 매핑
    • 하나의 엔트리가 한 페이지(보통 4KB) 정보를 담당

📌 주소 변환 과정

  • 가상 주소 = (가상 페이지 번호, 페이지 오프셋)
  • 변환 흐름:
    1. 가상 페이지 번호로 Page Table 접근
    2. 해당 물리 프레임 번호 획득
    3. 페이지 오프셋 유지 → 최종 물리 주소 계산

📌 계층적 페이지 테이블

  • 32-bit 시스템까지는 1단계 테이블도 가능
  • 64-bit 시스템부터는 계층 구조로 분할
레벨설명엔트리 수
PML4최상위512
PDPT페이지 디렉터리 포인터512
PD페이지 디렉터리512
PT페이지 테이블512
  • 각 엔트리는 다음 단계의 테이블 주소를 가짐
  • 마지막 PT에서 물리 프레임 번호 반환

📌 페이지 테이블 엔트리 (PTE) 구성

필드설명
Valid bit유효한 매핑 여부
Frame number물리 프레임 번호
Access bit최근 접근 여부
Dirty bit수정 여부
Permission읽기/쓰기/실행 권한
기타OS 구현에 따라 커스텀 비트 존재 가능

📌 핵심 성질

  • 분리와 보호: 프로세스 간 주소 공간 격리
  • 유연성: 다양한 크기의 가상 메모리 지원
  • 메모리 사용량 조절: 필요시 부분만 매핑 가능 → Lazy Load 가능

📌 페이지 테이블 크기 문제

  • 단일 테이블 사용시 메모리 낭비 심각
  • 계층적 테이블 → 메모리 공간 최적화
  • 사용하지 않는 하위 테이블은 생성하지 않음 → 공간 절약

📌 페이지 테이블 vs TLB 관계

  • 페이지 테이블: 전체 변환 정보 저장 (RAM)

  • TLB: 자주 사용하는 일부 변환 결과 캐싱 (CPU 내부)

  • 변환 순서:

    1. TLB Hit → 바로 물리주소 변환
    2. TLB Miss → 페이지 테이블 탐색

📌 한줄 정의

"페이지 테이블은 가상 페이지를 물리 프레임에 매핑하는 계층적 자료구조로, 가상 주소 변환의 핵심 역할을 한다."


☄︎ TLB (Translation Lookaside Buffer)

📌 개념 요약

  • 정의:
    페이지 테이블 탐색 결과(가상 페이지 번호 → 물리 프레임 번호)를 캐싱하는 고속 하드웨어 캐시.

  • 필요성:

    • 페이지 테이블 접근은 메모리 연산 → 느림
    • 변환 속도 개선 → 주소 변환을 하드웨어 수준에서 캐싱

📌 동작 원리

  • CPU가 가상 주소 접근 시

    1. TLB 조회 (TLB Lookup)
    2. TLB Hit → 변환 즉시 완료
    3. TLB Miss → 페이지 테이블 접근 후 변환 결과 TLB에 저장
  • TLB Hit 비율이 시스템 성능에 큰 영향


📌 TLB 구성

구성요소설명
VPN (Virtual Page Number)가상 페이지 번호
PPN (Physical Page Number)물리 프레임 번호
Access Permissions읽기/쓰기 권한
Valid bit유효성 여부
  • 일반적으로 fully associative or set-associative cache 구조 사용

📌 TLB 특징

  • 매우 소형 (수십~수백 개 엔트리)
  • 매우 고속 (CPU 클럭 수준에서 동작)
  • 완전 하드웨어 동작
  • CPU 아키텍처마다 구조 다름 (예: x86, ARM 등)

📌 TLB Miss 처리

  • 소프트웨어 방식 (Soft TLB miss)

    • 일부 RISC (ex: MIPS)
    • OS가 페이지 테이블 탐색 직접 수행
  • 하드웨어 방식 (Hardware TLB miss)

    • 대부분의 현대 CPU
    • MMU가 페이지 테이블 자동 탐색

📌 TLB와 Context Switch

  • 프로세스마다 페이지 테이블 다름 → TLB Flush 필요
  • Context Switch 시 TLB 무효화
  • 일부 시스템은 ASID (Address Space ID) 사용하여 TLB 엔트리 공유 가능

📌 TLB Shootdown (멀티코어에서 중요)

  • 멀티코어 시스템에서 페이지 테이블 변경 시 각 코어의 TLB 동기화 필요
  • 다른 CPU의 TLB를 강제로 무효화 → TLB Shootdown 발생

📌 TLB vs Page Table 비교 요약

항목TLBPage Table
저장 위치CPU 내부메인 메모리
크기수십~수백 엔트리수백 MB 가능
속도매우 빠름상대적으로 느림
Miss 발생시Page Table 탐색Page Fault 가능성

📌 한줄 정의

"TLB는 최근 사용한 주소 변환 정보를 캐싱하여 주소 변환 속도를 획기적으로 높여주는 CPU 내부 고속 캐시이다."


💥 Page Fault (페이지 폴트)

📌 개념 요약

  • 정의:
    프로세스가 접근한 가상 주소가 현재 물리 메모리에 매핑되어 있지 않을 때 발생하는 예외(interrupt).

  • 핵심 역할:

    • 동적 메모리 할당 (Lazy Allocation)
    • Swap-in (스왑 복구)
    • Stack Growth
    • 보호 위반 감지

📌 Page Fault 발생 흐름

1️⃣ CPU가 가상 주소에 접근
2️⃣ TLB 조회
3️⃣ TLB Miss → Page Table 조회
4️⃣ Page Table에서 해당 페이지 매핑 없음 → Page Fault 발생


📌 Page Fault 발생 원인

유형설명
Not Present아직 메모리에 로드되지 않은 페이지 (ex: Lazy Load)
Protection Violation접근 권한 위반 (ex: read-only 페이지에 write)
Invalid Access잘못된 주소 접근 (ex: NULL 포인터, Stack Overflow)

📌 OS의 Page Fault 처리 순서

1️⃣ Page Fault Handler 진입 (CPU → OS 전환)
2️⃣ 접근 주소 및 에러코드 분석
3️⃣ 보조 테이블(Supplemental Page Table 등)에서 정보 조회
4️⃣ 적절한 핸들러 호출:

  • Lazy Loading → 디스크에서 읽어오기
  • Swap-in → 스왑 디스크에서 복구
  • Stack Growth → 새로운 페이지 할당
    5️⃣ 페이지 테이블 업데이트 (새로운 매핑 등록)
    6️⃣ TLB 갱신
    7️⃣ 프로세스 재개

📌 정상적인 Page Fault 예시

  • Lazy Loading:
    • 프로그램 시작 시 모든 페이지 미리 로드 안 함 → 첫 접근 시 Page Fault → 디스크에서 로드
  • Stack Growth:
    • 스택 크기 초과 접근 시 Page Fault → OS가 새 스택 페이지 할당

📌 비정상 Page Fault → 프로세스 종료

  • 잘못된 주소 접근 (ex: dereference NULL)
  • 권한 위반 (ex: write to read-only page)
  • 이 경우 → Segmentation Fault (SIGSEGV) 발생 → 프로세스 강제 종료

📌 Page Fault가 중요한 이유

  • OS 메모리 관리의 중심
  • 가상 메모리 시스템의 유연성과 효율성을 만들어주는 핵심 기술
  • Lazy Load, Swap, Stack Growth 전부 Page Fault 기반으로 동작

📌 한줄 정의

"Page Fault는 프로세스가 물리 메모리에 없는 페이지를 접근할 때 발생하며, OS가介入하여 필요한 메모리 할당 및 복구를 수행하는 가상 메모리 핵심 메커니즘이다."


∾ Lazy Loading (지연 로딩)

📌 개념 요약

  • 정의:
    프로그램이 사용하는 데이터를 실제로 접근할 때까지 물리 메모리에 로딩을 지연시키는 메모리 관리 기법.

  • 핵심 목표:

    • 메모리 사용량 최소화
    • 프로세스 시작 속도 향상

📌 왜 Lazy Loading을 사용하는가?

  • 프로그램 전체 데이터를 항상 사용하는 것은 아님
  • 초기 구동 시 필요한 최소한의 데이터만 로딩
  • 이후 접근하는 데이터는 On-demand 로 로딩

📌 Lazy Loading 작동 흐름

1️⃣ 프로세스 생성 → 페이지 테이블에 엔트리 생성 (Present bit: 0)
2️⃣ 해당 페이지에 첫 접근 → Page Fault 발생
3️⃣ Page Fault Handler 호출
4️⃣ Lazy Load 핸들러 실행 → 디스크에서 데이터 로드
5️⃣ 메모리에 적재 → 페이지 테이블 업데이트 → TLB 갱신
6️⃣ 프로세스 재개 → 해당 데이터 정상 사용 가능


📌 Lazy Loading 주요 활용 사례

활용설명
실행 파일(.exe, ELF 등)프로그램 코드/데이터 세그먼트 로딩
mmap (메모리 매핑 파일)파일을 메모리에 매핑 후 지연 로딩
Stack Growth스택이 확장될 때 on-demand 할당
Memory-mapped DB대용량 데이터베이스 성능 최적화

📌 Lazy Loading 장점

  • 프로세스 시작 속도 빨라짐
  • 불필요한 데이터 미적재 → 메모리 사용량 감소
  • 대용량 파일 처리 가능 (부분만 읽기 가능)

📌 Lazy Loading 단점

  • 첫 접근 시마다 Page Fault 발생 → 오버헤드 존재
  • I/O 대기 → 느린 초기 응답 가능성
  • 구현 복잡도 상승 (OS 차원에서 Page Fault 처리 필요)

📌 Lazy Loading과 Page Fault의 관계

  • Page Fault는 Lazy Loading의 트리거
  • Lazy Loading 구현의 본질 = Page Fault Handler 커스터마이징

📌 Lazy Loading이 메모리 관리에 주는 의미

  • "필요한 만큼만, 필요한 순간에" 메모리를 소비
  • 시스템 전체 메모리 효율이 크게 향상됨
  • 서버, 클라우드, 가상 머신 등에서 필수적인 기술

📌 한줄 정의

"Lazy Loading은 실제 사용 시점까지 데이터를 메모리에 적재하지 않는 방식으로, 가상 메모리의 효율성과 확장성을 극대화하는 핵심 기법이다."


↩︎ Page Replacement Policy (페이지 교체 정책)


📌 개념 요약

  • 정의:
    물리 메모리가 가득 찼을 때, 어떤 페이지를 제거(Swap-out)하고 새로운 페이지를 적재할지 결정하는 알고리즘.

  • 등장 이유:

    • 물리 메모리는 한정 → 모든 페이지를 항상 유지 불가능
    • 적절한 희생자 선택이 시스템 성능 좌우

📌 Page Replacement의 핵심 목표

  • Page Fault 발생률 최소화
  • 필요한 데이터는 오래 유지, 불필요한 데이터는 빠르게 제거

📌 Page Replacement 필요 시점

1️⃣ 페이지 폴트 발생
2️⃣ 빈 물리 프레임 없음
3️⃣ 교체 대상 선정 → Victim 선택
4️⃣ Swap-out 수행 → 새 페이지 적재


📌 대표적인 교체 정책들

Optimal (이론상 최적)

  • 앞으로 가장 오랫동안 사용하지 않을 페이지 제거
  • 현실 구현 불가능 (미래 예측 불가)
  • 다른 모든 알고리즘은 이 이론 최적에 근사

FIFO (First-In First-Out)

  • 가장 오래된 페이지 제거
  • 구현 단순 → 성능은 비효율적일 수 있음 (Belady's Anomaly 발생 가능)

LRU (Least Recently Used)

  • 가장 오래 사용되지 않은 페이지 제거
  • 성능 우수 → 하지만 정확한 LRU 구현은 비용 높음 (하드웨어 지원 필요)

Clock (Second Chance, 근사 LRU)

  • LRU 근사 → 접근 비트(Access bit) 활용
  • 페이지들을 원형 큐 형태로 순회
  • Access bit가 0인 페이지를 Victim 선정

📌 Clock 알고리즘 동작 방식

1️⃣ 시계바늘이 가리키는 페이지 확인
2️⃣ Access bit 확인:

  • 1이면 → Access bit 0으로 초기화, 다음 페이지로 이동

  • 0이면 → 해당 페이지 선택 (교체)
    3️⃣ 이 과정을 반복하여 Victim 선정

  • 장점: 구현 쉬움, 하드웨어 부담 적음


📌 Swap-out 과정에서 처리할 것

  • Dirty bit 확인 → 디스크에 write-back 필요 여부 결정
  • Anonymous Page → Swap Disk에 기록
  • File-backed Page → 수정 여부에 따라 파일 write-back 여부 결정

📌 Replacement Policy 선택 기준

정책장점단점
Optimal이론 최적불가능
FIFO단순Belady’s Anomaly
LRU성능 우수구현 어려움
Clock근사 LRU중간 난이도

📌 한줄 정의

"Page Replacement Policy는 한정된 물리 메모리를 관리하기 위해 희생할 페이지를 결정하는 알고리즘이며, LRU와 Clock이 가장 현실적이다."


🫥 Anonymous Page (익명 페이지)

📌 개념 요약

  • 정의:
    파일과 연결되지 않은 메모리 페이지. 디스크에 존재하는 원본 없이 운영체제가 직접 관리하는 페이지.

  • 명칭 이유:

    • "익명" = 어떤 파일도 백업 원본으로 가지지 않음
    • 순수히 프로세스 실행 중 동적으로 생성된 메모리 공간

📌 주요 예시

메모리 영역설명
Heapmalloc() 등 동적 메모리 할당
Stack함수 호출 스택
BSS Segment초기화되지 않은 전역변수
Anonymous mmap파일과 무관한 mmap

📌 Anonymous Page의 특징

  • 물리 메모리가 부족할 경우 → Swap Disk로 내보냄
  • 스왑으로 복구될 때는 디스크에서 읽어올 원본 없음 → 스왑 영역이 유일한 저장소
  • 페이지 폴트 발생시 → 새로 할당하거나 스왑에서 복구

📌 Anonymous Page의 생성 흐름

1️⃣ 프로세스 실행 도중 메모리 할당 요청 (malloc, stack growth 등)
2️⃣ 운영체제가 가상 주소 공간에 페이지 테이블 엔트리 생성
3️⃣ 초기에는 실제 물리 메모리 연결하지 않고 Lazy Allocation 가능
4️⃣ 첫 접근 → Page Fault → 물리 메모리 할당 및 매핑


📌 Anonymous Page의 Swap-out / Swap-in

  • Swap-out 시 → Swap Disk의 빈 슬롯에 페이지 내용 저장
  • Swap-in 시 → 해당 슬롯에서 페이지 복구
  • 스왑 영역 관리가 매우 중요 (bitmap 등으로 슬롯 관리)

📌 Anonymous Page와 File-backed Page 비교

구분Anonymous PageFile-backed Page
연결된 파일없음있음
초기 데이터없음 (보통 0으로 초기화)파일 내용
Swap 대상항상 Swap 사용파일 시스템 + Swap
복구 방식Swap에서만 복구파일 재로딩 or Swap 복구

📌 Anonymous Page가 중요한 이유

  • 운영체제에서 프로세스의 "실제 실행 중 생성되는 대부분의 메모리"가 이 Anonymous 영역
  • 대다수의 Swap-in / Swap-out이 이 영역에서 발생

📌 한줄 정의

"Anonymous Page는 파일과 무관하게 생성된 메모리 페이지로, 스왑 공간을 통해 백업되며 대부분의 실행 중 동적 메모리를 담당한다."


🔁 Swap Disk (스왑 디스크)

📌 개념 요약

  • 정의:
    물리 메모리가 부족할 때, 메모리 페이지를 임시로 저장하는 보조 저장장치 영역.

  • 핵심 역할:

    • 메모리 부족 시 Anonymous Page를 디스크로 이동
    • 메모리 사용량을 논리적으로 확장 가능하게 만듦

📌 Swap의 동작 시점

1️⃣ Page Fault 발생
2️⃣ 사용할 빈 물리 프레임 없음
3️⃣ Victim 페이지 선정 (Replacement Policy 적용)
4️⃣ Victim이 Anonymous Page인 경우 → Swap-out 수행


📌 Swap-out (스왑 아웃)

  • Victim 페이지의 메모리 내용을 Swap Disk에 저장
  • 해당 페이지의 페이지 테이블 엔트리 수정 (Present bit = 0, Swap slot 기록)
  • 물리 프레임 해제 → 새로운 페이지 적재 가능

📌 Swap-in (스왑 인)

  • 다시 해당 페이지에 접근 시 Page Fault 발생
  • Swap Disk에서 해당 슬롯을 읽어 메모리에 복구
  • 페이지 테이블 수정 (Present bit = 1, Swap slot 해제)

📌 Swap 공간 관리

  • 일반적으로 Bitmap 자료구조로 관리
  • 각 Swap slot의 사용 여부 추적
  • 슬롯 수 한정 → Swap 영역도 결국 유한함 → Swap 공간 부족 가능성 존재

📌 Swap의 성능적 특징

장점단점
물리 메모리 부족시 프로그램 종료 방지속도가 매우 느림 (디스크 I/O)
일시적 메모리 압박 해소Swap thrashing 발생 가능
시스템 전체 안정성 보장스왑 과다 사용시 성능 급락
  • Swap Thrashing:
    • Swap-in/out이 반복되며 시스템 전체가 Swap I/O에 과부하 → 시스템 정지 직전 상태

📌 Swap 대상과 비대상

페이지 종류Swap 가능 여부
Anonymous Page가능
File-backed Page (dirty)가능
File-backed Page (clean)일반적으로 파일에서 재로딩
  • Anonymous Page가 Swap의 주 대상이다.

📌 Swap이 필요한 이유

  • RAM 용량이 모든 프로그램을 감당 못함
  • 일시적 메모리 요구량 급증 시 안정성 확보
  • 서버, VM, 클라우드 환경에서 필수 기술

📌 한줄 정의

"Swap Disk는 메모리 부족 시 페이지를 임시 저장하는 디스크 영역으로, 가상 메모리 확장의 마지막 방어선 역할을 수행한다."


📁 File-backed Page (파일 기반 페이지)

📌 개념 요약

  • 정의:
    디스크 상의 파일 내용을 메모리 페이지에 직접 매핑하여 사용하는 가상 메모리 페이지.

  • 핵심 역할:

    • I/O 성능 최적화 (파일을 메모리처럼 사용)
    • Lazy Loading 기반의 효율적인 파일 접근
    • 중복 캐싱 최소화 (Buffer Cache 역할)

📌 File-backed Page 주요 활용 예시

활용 영역설명
프로그램 실행실행 파일의 .text, .data 섹션
mmap()파일 메모리 매핑
공유 라이브러리동일 코드 여러 프로세스 공유
DB 시스템파일 기반 페이지 캐싱

📌 File-backed Page 동작 흐름

1️⃣ 프로그램이 mmap() 또는 실행 시 파일을 매핑 요청
2️⃣ 페이지 테이블에 해당 가상주소 매핑 엔트리 생성 (실제 로딩은 지연)
3️⃣ 첫 접근 시 Page Fault → Lazy Loading → 디스크에서 파일 읽어오기
4️⃣ 페이지가 메모리에 적재되고 매핑 완료
5️⃣ 프로세스는 해당 데이터를 메모리처럼 접근


📌 수정(write) 처리

  • 페이지가 수정되면 Dirty Bit 설정
  • Swap-out 시 Dirty 여부에 따라 다르게 처리:
    • Dirty → 파일에 write-back 필요
    • Clean → 파일 원본 유지, 재로딩 가능

📌 File-backed vs Anonymous Page 차이

항목File-backed PageAnonymous Page
원본 데이터파일 시스템에 존재없음
초기 로딩파일에서 읽기보통 0으로 초기화
Swap 필요성수정시 필요항상 Swap 사용
복구 경로파일 or SwapSwap만 사용

📌 File-backed Page 장점

  • I/O 최소화 (한번 로드하면 중복 로드 불필요)
  • 여러 프로세스가 동일 파일을 공유 가능
  • 프로그램 시작속도 향상 (Lazy Loading 덕분)

📌 File-backed Page 단점

  • 파일 시스템과 긴밀한 동기화 필요
  • Write-back 타이밍 관리 복잡
  • Dirty 상태 관리 필요

📌 File-backed Page의 메모리 관리 난이도

  • Swap-out 시 디스크 쓰기가 필요하므로 오버헤드 발생
  • 프로그램 종료 시 write-back 필요 여부 체크 필수
  • 일부 시스템은 periodic sync로 처리

📌 File-backed Page의 실질적 중요성

  • OS는 대부분 실행 파일을 File-backed Page로 관리
  • Shared Library, mmap 등 실전 시스템에서 매우 널리 사용

📌 한줄 정의

"File-backed Page는 디스크 파일 내용을 메모리 페이지에 직접 매핑하여 효율적인 파일 접근과 메모리 관리를 가능하게 하는 가상 메모리 핵심 기법이다."


♐︎ Direct Memory Access (DMA)

📌 개념 요약

  • 정의:
    CPU介入 없이 주변 장치가 메모리와 직접 데이터 전송을 수행할 수 있도록 해주는 하드웨어 메커니즘.

  • 등장 이유:

    • CPU가 모든 I/O 전송을 직접 처리하면 비효율적
    • I/O 장치가 스스로 메모리에 직접 데이터 복사 → CPU는 다른 작업 수행 가능

📌 DMA 동작 기본 흐름

1️⃣ CPU가 DMA Controller에 I/O 요청 (메모리 주소, 크기, 방향 설정)
2️⃣ DMA Controller가 장치 ↔ 메모리 간 데이터 직접 전송
3️⃣ 전송 완료시 DMA Controller가 CPU에 인터럽트 (전송 완료 알림)


📌 DMA 활용 영역

활용 영역설명
디스크 I/O파일 로딩, Lazy Loading, Swap-in/out
네트워크패킷 수신/송신
그래픽 카드화면 출력용 버퍼 전송
오디오실시간 오디오 스트림
  • 거의 모든 고성능 I/O는 DMA 기반으로 동작

📌 DMA가 메모리 관리와 연결되는 이유

  • Lazy Loading:
    • 파일에서 페이지 로딩 시 → 디스크 → 메모리 직접 복사 가능
  • Swap-in/out:
    • 스왑 디스크 ↔ 메모리 간 전송 → DMA 이용
  • 메모리 복사 속도 향상:
    • CPU는 바쁘게 계산 → DMA는 백그라운드에서 I/O 진행

📌 DMA와 CPU 관계

구분CPU 방식DMA 방식
데이터 복사 담당CPU 직접DMA Controller
CPU 부하높음낮음
I/O 속도느림빠름
CPU 활용률떨어짐효율적

📌 DMA의 한계와 제약

  • 버스 대역폭 제한 존재 → 과도한 DMA는 다른 장치 성능 저하
  • 데이터 일관성 문제 발생 가능 → 캐시와 동기화 필요
  • 메모리 접근 충돌 방지 필요 → DMA-safe 메모리 영역 사용

📌 현대 시스템의 확장 DMA 기술

  • Scatter-Gather DMA:
    • 여러 메모리 블록을 한 번에 처리
  • IOMMU (I/O Memory Management Unit):
    • DMA 접근을 가상 주소 기반으로 관리 → 보호 기능 강화

📌 한줄 정의

"DMA는 CPU개입 없이 I/O 장치가 메모리와 직접 데이터 전송을 수행하여 시스템 성능을 최적화하는 하드웨어 기반 I/O 가속 기술이다."

profile
Before Sunrise

0개의 댓글