일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- linkedmap
- OS
- Java
- black-red
- 백준_2559
- HashMap
- avl
- 트리
- 쓰레드
- 배열
- 유저 쓰레드
- os 쓰레드
- 백준2559
- 자바
- cpu
- 스케줄링
- tree
- non-blocking
- 하드웨어 쓰레드
- 유저모드
- MAP
- 코딩테스트
- 프로그래머스
- 커널모드
- 코테
- set
- 알고리즘
- Lock
- Red-Black
- list
변수의 기록
가상 메모리(Virtual Memory)에 대한 개념 (TLB , 페이징 테이블 포함) 본문
가상 메모리(Virtual Memory)에 대한 개념 (TLB , 페이징 테이블 포함)
불광동 물주먹 2025. 4. 4. 14:54가상 메모리(Virtual Memory)에 대한 개념 및 동작 원리 정리
2025년 04월 04일
가상메모리 공부
1. 가상 메모리의 개념
가상 메모리(Virtual Memory)란, 운영체제가 물리적 메모리(RAM)의 용량 한계를 극복하기 위해 제공하는 논리적 메모리 공간이다. 이는 프로세스가 실제로는 물리 메모리에 존재하지 않더라도, 마치 자신만의 연속적인 메모리 공간을 갖는 것처럼 동작하도록 만들어준다. 가상 메모리는 각 프로세스에게 독립적인 주소 공간을 제공함으로써, 메모리 보호와 다중 프로세스 실행을 가능하게 한다.
가상 메모리는 실제 메모리와 1:1로 대응하지 않으며, 일부 주소 영역은 실제 메모리에 존재하지 않고 디스크의 스왑(Swap) 공간에 저장될 수 있다. 이로 인해 실행 중인 프로세스의 전체 주소 공간을 물리 메모리에 상주시키지 않고도 실행이 가능하다.
🧠 먼저, 핵심 용어 정리
용어 | 뜻 | 쉽게 말하면 |
가상 메모리 | 실제 메모리보다 커보이게 OS가 속이는 기술 | "메모리 부족해도 넉넉한 척하는 시스템" |
페이지(Page) | 가상 메모리를 일정 크기로 나눈 조각 | 가상 메모리의 '블럭 단위' |
프레임(Frame) | 물리 메모리(RAM)의 페이지 크기만큼 나눈 조각 | 진짜 메모리의 '칸' |
페이지 테이블 | 어떤 가상 페이지가 물리 메모리 어디에 있는지 기록한 표 | 가상주소 ↔ 실제주소 주소록 |
TLB | 주소 변환 결과를 저장해둔 캐시 | “최근 주소 변환 결과 저장소” |
Valid/Invalid Bit | 페이지가 메모리에 있는지 표시 | 1이면 있음, 0이면 없음 |
Page Fault | 메모리에 없는 페이지를 접근할 때 발생하는 오류 | “어? 그 데이터 아직 안 불러왔네” |
Trap | 하드웨어가 OS에 알리는 신호 | “OS야! 너 나와봐!” |
Demand Paging | 진짜 필요한 순간에만 메모리에 페이지를 올리는 방식 |
2. 페이지와 프레임의 정의
가상 메모리는 고정 크기의 단위인 페이지(Page)로 분할되며, 물리 메모리 또한 동일한 크기의 프레임(Frame)으로 나누어 관리된다. 일반적으로 하나의 페이지 크기는 4KB이다. 가상 주소는 페이지 단위로 관리되며, 각 가상 페이지는 운영체제에 의해 물리적 프레임에 매핑되어야 실행이 가능하다.
페이지에는 실행 코드, 전역 변수, 힙, 스택 등의 데이터가 저장될 수 있으며, 이는 운영체제의 메모리 관리 정책에 따라 물리 메모리 또는 디스크에 위치할 수 있다.
3. 페이지 테이블과 주소 변환
페이지 테이블(Page Table)은 각 가상 페이지가 어느 물리 프레임에 매핑되어 있는지를 저장하는 자료구조이다. 또한 페이지 테이블은 다음과 같은 메타데이터를 포함한다:
- 프레임 번호 (Frame Number): 해당 페이지가 매핑된 물리 주소
- Valid/Invalid Bit: 해당 페이지가 현재 물리 메모리에 있는지를 표시 (0: 디스크, 1: 메모리 상주)
- Dirty Bit: 해당 페이지가 수정되었는지 여부
- Access Bit: 최근 접근 여부 (페이지 교체 알고리즘용)
- Protection Bit: 접근 권한 정보 (읽기, 쓰기, 실행 등)
페이지 테이블은 운영체제가 RAM 상에 유지하며, CPU는 CR3 레지스터 등을 통해 해당 프로세스의 페이지 테이블 주소를 MMU에 알려준다.
*추가사항 - pcb는 커널메모리 안에 존재하며, 컨테스트 스위칭시 커널메모리 안에서 전환하려는 프로세스의 pcb 정보를 가져와 pcb안에 담긴 프로세스 페이징 테이블 주소를 가져온다.
+ pcb는 운영체제가 PID로 매핑 커널메모리에서 빠르게 찾아온다.
4. TLB와 주소 캐싱
TLB(Translation Lookaside Buffer)는 MMU 내부에 존재하는 고속 캐시로, 자주 사용되는 가상 주소 ↔ 물리 주소 매핑 정보를 저장한다. TLB를 먼저 확인함으로써, 주소 변환 속도를 비약적으로 향상시킬 수 있다. TLB에 정보가 없을 경우(TLB miss), 페이지 테이블을 참조하여 정보를 가져오며, 이후 그 결과를 다시 TLB에 저장한다.

5. 주소 변환의 전체 과정 (실행 흐름)
- CPU가 가상 주소를 생성하여 메모리 접근 시도
- MMU가 TLB에서 해당 가상 페이지의 물리 주소를 찾음 (TLB hit)
- TLB에 없으면 페이지 테이블에서 찾음 (TLB miss)
- 페이지 테이블에서 Valid Bit가 1이면 → 물리 주소 반환 및 TLB 캐싱
- Valid Bit가 0이면 Page Fault 발생 → OS介입
- OS가 디스크(Swap)에서 해당 페이지를 읽어옴 (Swap In)
- RAM에 빈 프레임이 없으면 → Victim 페이지 선택 후 Swap Out
- 페이지 테이블 및 TLB 갱신
- 명령어 재실행
이 과정은 마치 도메인 주소를 IP로 변환하는 DNS처럼, CPU가 "논리 주소"만 알면 시스템이 알아서 실제 주소를 찾아주는 추상화된 시스템이라 볼 수 있다.
6. Swap 공간과 가상 메모리 구현
Swap 공간은 가상 메모리를 구현하는 데 사용되는 실제 디스크 상의 영역으로, RAM에 상주하지 못하는 페이지들을 임시로 저장하는 데 사용된다. Windows에서는 pagefile.sys라는 이름으로 구현되며, Linux에서는 별도의 스왑 파티션 또는 swapfile로 사용된다.
Swap 공간은 RAM 부족 시, Valid Bit가 0인 페이지들을 디스크로 내보내고(RAM에서 제거), 필요 시 다시 불러올 수 있게 한다. 이에 따라 페이지 테이블의 Valid Bit는 항상 현재 페이지의 위치 상태를 반영하며, TLB는 물리 주소가 유효할 때만 캐싱된다.
7. 정리 및 구조 요약
- CPU는 항상 가상 주소만 사용하고, 실제 물리 주소는 MMU가 변환한다.
- 변환 순서: TLB → 페이지 테이블 → 디스크(Swap)
- TLB: CPU 안의 캐시 메모리, 빠르게 주소 매핑 제공
- 페이지 테이블: RAM 내 운영체제가 보관하는 전체 주소 매핑 표
- Valid Bit = 0이면 → Swap에서 해당 페이지를 가져옴 (Page Fault 발생)
이와 같은 구조를 통해, 운영체제는 제한된 RAM을 효율적으로 활용하고, 다중 프로세스 환경에서도 안정성과 속도를 확보할 수 있다.
'CS지식 > 운영체제 (Operating System)' 카테고리의 다른 글
(CS 운영체제) 동기화 (기본) (0) | 2025.04.07 |
---|---|
(CS 운영체제) 동시성 - 스핀락(spinlock) 뮤텍스(mutex) 세마포(semaphore) 각각 특징과 차이 설명 java (0) | 2025.04.07 |
(CS 운영체제)CPU-bound vs IO-bound :시스템 최적화를 위한 성능 특성 및 쓰레드 전략 정리 (0) | 2025.04.06 |
[CS ] 컨텍스트 스위칭 (프로세스 컨테스트 스위칭 <-> 스레드 컨텍스트 스위칭) (0) | 2025.04.05 |
운영체제와 프로그램 실행 원리 정리 (0) | 2025.04.02 |