가상 메모리는 한정된 물리 메모리의 한계를 극복하고,
각 프로세스가 무한한 메모리를 사용할 수 있는 것 처럼 느끼도록 시스템이 메모리를 추상화한 개념
- 각 프로세스가 자신만의 메모리 공간을 가지는 것처럼 보이도록 하여 프로세스간 격리를 수행
- 실제 물리 메모리가 부족할 경우 보조 기억 장치를 활용하여
필요한 데이터를 스왑하는 방식으로 무한한 메모리를 갖는 것처럼 보임
- 자주 사용하는 메모리는 물리 메모리에 놓고, 자주 사용되지 않는 데이터는 스왑 영역에 내려
물리 메모리를 효율적으로 사용
가상 메모리 주소
- 가상 메모리 주소는 단순 주소 범위를 뜻한다.
- 64비트 시스템에서는 이론적으로 16엑사 바이트의 가상 메모리 주소 공간을 가질 수 있다.
→ 현실적인 제약으로 일부 비트를 사용하지 않기도 함 (물리적 한계, 운영체제 정책)
→ 48비트 ~57비트 정도의 가상 주소 공간을 활용
메모리 레이아웃
프로세스의 메모리는 코드, 데이터, 힙, 스택 영역으로 논리적으로 나누어 관리한다.
- 코드 영역 : 프로그램 실행 코드가 저장됨 // 주로 읽기 전용으로 설정하여 무결성을 유지
- 데이터 영역 : 전역 변수와 정적 변수가 저장되는 영역으로,
초기화된 데이터와 초기화되지 않은 데이터로 나눈다. (.data, .bss)
- 힙 : 동적 메모리 할당이 이루어지는 영역으로 ,프로그램이 실행되는 동안 크기가 변할 수 있다.
- 스택 : 함수 호출 시 지역 변수나 반환 주소 등이 저장되며, 호출이 끝나면 해당 메모리는 해제 됨
**
현대 시스템은 물리 메모리 관리 방식으로 세그멘테이션을 사용하지 않고
페이징을 통해 페이지, 프레임 단위로 메모리를 관리한다.
페이징
프로세스의 주소 공간을 고정된 크기의 단위로 분할하는 것
각각의 고정 크기 단위를 [페이지]라고 한다.
상응하여 물리 메모리도 [페이지 프레임]으로 고정 크기로 분할 됨
**
가상 주소 공간의 페이지들은 물리 메모리 전체에 분산 배치되어 있다.
페이지 테이블
가상 주소를 물리 주소로 변환할 때 사용하는, 가상 페이지 번호와 매핑된 프레임 번호를 매핑해 놓은 자료구조
페이지 테이블은 커널 메모리 영역에 저장
페이지 폴트
주 페이지 폴트 (Major Page Fault)
- 해당 페이지가 물리 메모리에 없어서 디스크에서 데이터를 읽어와야 할 때 발생
부 페이지 폴트 (Minor Page Fault)
- 해당 페이지가 이미 물리 메모리에 있지만,
페이지 테이블에 매핑 정보가 없어 이를 업데이트할 때 발생
- 물리 메모리에 해당 페이지가 이미 존재하지만,
페이지에 해당 페이지의 매핑 정보가 누락된 경우
→ 물리 메모리에 있는 페이지에 대한 매핑 정보만 페이지 테이블에 추가
**
메모리 관리를 위해 운영체제가 페이지 테이블 엔트리의 일부를 제거하게 될 경우
부 페이지 폴트가 발생할 수 있음
파일 기반 페이지와 익명 페이지
[파일 기반 페이지(File Backed Page)]
- 특정 파일이나 디스크 영역에 매핑된 메모리 페이지
- 주로 메모리 맵 파일 또는 실행 파일의 코드와 데이터를 포함
주 페이지 폴트 발생 - 가상 메모리와 디스크 영역에 매핑된 후 처음 접근할 때나,
스왑 아웃된 페이지를 스왑 인해야 할 때 발생한다.
[익명 페이지 (Anonymous Page)]
- 특정 파일이나 디스크 영역에 매핑되지 않고 익명으로 존재하는 메모리 페이지
- 이 페이지는 프로세스가 동적으로 메모리를 할당할 때 주로 사용됨
주 페이지 폴트 발생 - 가상 메모리 주소 할당 후, 처음 접근할 때 주 페이지 폴트가 발생하며,
운영체제는 물리 메모리를 할당하고 0으로 초기화한다.
스왑 아웃된 페이지를 스왑 인해야 할 때도 발생한다.
가상 메모리 매핑
익명 페이지
스택
- 스택의 경우 운영체제가 자동으로 관리
스택 영역이 확장될 필요가 있을 때, 주 페이지 폴트가 발생하여 익명 페이지가 할당됨
힙
- 작은 메모리 할당의 경우 brk() 시스템 콜로 힙 영역을 확장하고
큰 메모리 할당의 경우 mmap() 시스템 콜을 사용하여 새로운 메모리 영역을 할당
그 외
mmap() 시스템 콜을 활용하여 가상 메모리를 할당하고 해당 주소로 접근할 때,
주 페이지 폴트가 발생하여 익명 페이지가 할당된다.
<< 익명 페이지 할당 과정 >>
1. 초기에는 가상 메모리만 할당
2. 실제 접근하는 경우 주 페이지 폴트가 발생하여,
물리 메모리가 할당되고 0으로 초기화되고
가상 주소와 물리 주소 매핑
파일 기반 페이지
mmap() 시스템 콜을 통해 가상 메모리와 디스크 영역이 매핑되며, 해당 페이지 접근할 때,
주 페이지 폴트가 발생하여, 디스크에서 데이터를 읽어와 물리 메모리에 파일 기반 페이지를 할당
<< 파일 관련 페이지 할당 과정 >>
1. 초기에는 가상 메모리 할당 후, 디스크 영역에 매핑됨
2. 실제로 접근하는 경우 주 페이지 폴트가 발생하며,
디스크에서 데이터를 읽어와 프레임 단위로 물리 메모리에 적재 후,
가상 주소와 물리 주소 매핑