가상 메모리
가상 메모리 개념
가상 메모리란?
- 가상 메모리는 시스템이 프로그램의 주소 공간을 실제 메모리의 물리적 레이아웃과 분리하는 메커니즘입니다.
- 가상 주소는 프로그램의 주소 공간 내 위치를 나타냅니다.
- 물리 주소는 실제 하드웨어 RAM 내 위치를 나타냅니다.
- 가상 메모리 덕분에 프로그램 주소 공간과 실제 메모리 레이아웃이 동일할 필요가 없습니다.
가상 메모리의 장점
1. 메모리 보호
- 각 프로세스는 독립된 가상 주소 공간을 가지므로, 다른 프로세스의 메모리에 접근할 수 없습니다.
- 이는 프로세스 간의 충돌을 방지하고 시스템의 안정성을 높입니다.
2. 프로세스 격리
- 프로세스 간의 메모리 격리를 통해 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않도록 합니다.
3. 효율적인 메모리 사용
- 가상 메모리는 실제 물리적 메모리보다 큰 주소 공간을 제공하므로, 프로그램은 물리 메모리의 제약 없이 실행될 수 있습니다.
- DRAM을 가상 주소 공간의 일부로 캐시로 사용하여 주 메모리를 효율적으로 사용합니다.
4. 스왑을 통한 메모리 확장
- 사용되지 않는 메모리 페이지를 디스크로 스왑 아웃(swap out)하여 실제 물리 메모리를 절약할 수 있습니다.
5. 메모리 단편화 해결
- 가상 메모리를 사용하면 물리 메모리의 연속적인 할당이 필요 없으므로, 내부 단편화와 외부 단편화 문제를 줄일 수 있습니다.
6. 동적 메모리 할당
- 프로그램이 실행되는 동안 필요한 만큼 메모리를 동적으로 할당하고 해제할 수 있습니다.
메모리 관리 간소화
- 각 프로세스는 동일한 일관된 선형 주소 공간을 가집니다.
주소 공간 격리
- 한 프로세스가 다른 프로세스의 메모리를 간섭할 수 없습니다.
- 사용자 프로그램이 특권 있는 커널 정보와 코드에 접근할 수 없습니다.
Locality와 가상 메모리
페이지 테이블 및 TLB
- 페이지 테이블은 가상 주소와 물리 주소 간의 매핑 정보를 저장합니다.
- TLB(Translation Lookaside Buffer)는 최근에 접근한 페이지의 매핑 정보를 캐시합니다.
- Locality 덕분에 동일한 페이지나 인접 페이지에 자주 접근하게 되면, TLB 히트율이 높아져 주소 변환이 빠르게 이루어집니다.
캐시 메모리
- CPU 캐시는 메모리 접근 패턴을 기반으로 최근에 사용된 데이터와 인접 데이터를 캐싱합니다.
- Locality 덕분에 캐시 히트율이 높아져 메모리 접근 속도가 빨라집니다.
페이지 교체 알고리즘
- 운영 체제는 LRU(Least Recently Used)와 같은 페이지 교체 알고리즘을 사용하여, Locality를 최대한 활용하도록 메모리 페이지를 관리합니다.
- 최근에 사용된 페이지는 메모리에 오래 유지되고, 덜 사용된 페이지는 스왑 아웃됩니다.
Locality와 가상 메모리
페이지 테이블 및 TLB
- 페이지 테이블은 가상 주소와 물리 주소 간의 매핑 정보를 저장합니다.
- TLB(Translation Lookaside Buffer)는 최근에 접근한 페이지의 매핑 정보를 캐시합니다.
- Locality 덕분에 동일한 페이지나 인접 페이지에 자주 접근하게 되면, TLB 히트율이 높아져 주소 변환이 빠르게 이루어집니다.
캐시 메모리
- CPU 캐시는 메모리 접근 패턴을 기반으로 최근에 사용된 데이터와 인접 데이터를 캐싱합니다.
- Locality 덕분에 캐시 히트율이 높아져 메모리 접근 속도가 빨라집니다.
페이지 교체 알고리즘
- 운영 체제는 LRU(Least Recently Used)와 같은 페이지 교체 알고리즘을 사용하여, Locality를 최대한 활용하도록 메모리 페이지를 관리합니다.
- 최근에 사용된 페이지는 메모리에 오래 유지되고, 덜 사용된 페이지는 스왑 아웃됩니다.
메모리 관리 장치 (MMU)
MMU의 역할
- 메모리 관리 장치 (MMU)는 가상 주소를 물리 주소로 변환하는 하드웨어 컴포넌트입니다.
- CPU가 메모리에 접근할 때 MMU가 가상 주소를 인터셉트하여 물리 주소로 변환합니다.
- 이 과정에서 페이지 테이블을 참조하여 변환 작업을 수행합니다.
페이지 테이블
페이지 테이블의 기능
- 페이지 테이블은 가상 주소와 물리 주소의 매핑 정보를 저장하는 데이터 구조입니다.
- 각 프로세스는 고유한 페이지 테이블을 가지며, 이는 DRAM에 항상 적재되어 있습니다.
- 페이지 테이블 엔트리는 가상 주소 공간을 페이지 크기로 나눈 결과로, 각 페이지에 해당하는 엔트리가 페이지 테이블에 존재합니다.
페이지 히트와 페이지 폴트
페이지 히트 (Page Hit)
- 페이지 히트는 프로세스가 접근하려는 가상 주소의 페이지가 이미 물리 메모리에 존재하는 경우를 의미합니다.
- CPU가 가상 주소를 참조할 때 MMU가 해당 가상 페이지가 물리 메모리에 있는지 확인하여, 페이지 히트가 발생하면 가상 주소를 물리 주소로 변환하여 데이터를 즉시 접근할 수 있습니다.
페이지 폴트 (Page Fault)
- 페이지 폴트는 프로세스가 접근하려는 가상 주소의 페이지가 현재 물리 메모리에 없는 경우를 의미합니다.
- 페이지 폴트가 발생하면 CPU는 운영 체제에 인터럽트를 발생시켜 페이지 폴트 핸들러를 호출합니다.
- 페이지 폴트 핸들링 과정:
- 디스크에서 페이지 로드: 필요한 페이지를 물리 메모리로 로드.
- 메모리 할당: 물리 메모리의 빈 프레임을 찾아 페이지를 로드. 빈 프레임이 없으면 페이지 교체 알고리즘을 사용하여 공간 확보.
- 페이지 테이블 업데이트: 페이지가 물리 메모리에 로드되면 페이지 테이블을 업데이트.
- 프로세스 재개: 페이지 폴트 핸들러가 작업을 완료하면 프로세스는 중단된 지점에서 재개.
페이지 폴트 처리
페이지 폴트 핸들링
- 페이지 폴트가 발생하면 페이지 폴트 핸들러가 호출되어 필요한 페이지를 디스크에서 물리 메모리로 로드합니다.
- 페이지 폴트 핸들러는 메모리 할당을 위해 페이지 교체 알고리즘을 사용하여 빈 프레임을 찾거나, 필요시 다른 페이지를 디스크로 스왑 아웃합니다.
- 페이지가 물리 메모리에 로드되면 페이지 테이블을 업데이트하고, 프로세스는 중단된 지점에서 재개됩니다.
주소 공간
주소 공간 유형
- 선형 주소 공간: 0, 1, 2, 3, ...과 같이 순서가 있는 연속된 비음수 정수 주소의 집합.
- 가상 주소 공간: N = (2^n)개의 가상 주소의 집합.
- 물리 주소 공간: M = (2^m)개의 물리 주소의 집합.
VM의 장점
메모리 할당의 유연성
- 각 가상 페이지는 임의의 물리 페이지에 매핑될 수 있습니다.
- 가상 페이지는 다른 시간에 다른 물리 페이지에 저장될 수 있습니다.
프로세스 간 코드 및 데이터 공유
- 가상 페이지를 동일한 물리 페이지에 매핑하여 코드와 데이터를 공유할 수 있습니다.
링크와 로딩
- 각 프로그램은 유사한 가상 주소 공간을 가지며, 코드, 데이터, 힙은 항상 동일한 주소에서 시작합니다.
execve는 .text와 .data 섹션에 대해 가상 페이지를 할당하고, 필요에 따라 페이지별로 복사됩니다.
메모리 보호
- 페이지 테이블 엔트리는 접근 권한 비트를 포함하며, MMU는 각 접근 시 이 비트를 검사하여 메모리 접근을 제어합니다.
요약
- 가상 메모리는 메모리 관리 장치를 사용하여 물리 주소 공간과 다른 가상 주소 공간에서 CPU가 동작하도록 합니다.
- MMU는 가상 주소를 물리 주소로 변환합니다.
- 페이징 시스템은 두 주소 공간을 페이지로 나누어, 개별 페이지를 매핑합니다.
- 페이지 폴트는 매핑된 페이지를 메모리에 가져오며, 페이지 테이블은 MMU가 주소를 변환하도록 돕습니다.
이 설명은 가상 메모리와 Locality의 상호 작용, MMU, 페이지 테이블, 페이지 히트와 페이지 폴트, 주소 공간, 그리고 가상 메모리의 장점을 상세히 다루어 이해를 돕습니다.