64비트 시스템을 기준으로 가상 메모리와 페이지 개념을 다시 정리 해보려 한다.
64비트 아키텍처는 약 8TB의 가상 메모리 공간을 지원 한다.
1. 64비트 가상 메모리 주소 공간
- 64비트 시스템에서는 가상 주소가 64비트로 표현된다. 이론적으로는 2^64 바이트, 즉 16엑사바이트(EB)의 가상 메모리 공간을 제공할 수 있다.
- 하지만 실제로는 물리적 제약 및 운영체제의 설계에 따라 약 8TB정도(윈도우 기준)가 지원된다.
- 예를 들어, 일반적인 64비트 리눅스 시스템은 48비트나 57비트만을 사용하여 가상 주소 공간을 관리한다.
2. 가상 주소의 구조
- 페이지 번호: 가상 주소의 상위 비트는 해당 페이지를 식별하는 데 사용된다.
- 오프셋(Offset): 하위 비트는 페이지 내에서의 위치를 나타낸다.
예를 들어, 64비트 시스템에서 4KB(2^12) 페이지 크기를 사용하는 경우:
- 가상 주소의 하위 12비트는 페이지 내 오프셋을 나타낸다.
- 나머지 상위 비트는 페이지 번호로 사용되어 가상 메모리의 페이지 테이블 인덱스를 결정한다.
3. 페이지 크기
- 64비트 시스템에서 일반적으로 사용하는 페이지 크기는 4KB, 2MB, 또는 1GB 등이다.
- 4KB 페이지: 가장 일반적인 페이지 크기. 대부분의 운영체제는 기본적으로 4KB 페이지를 사용한다.
- 2MB 및 1GB 페이지: Huge Pages 또는 Large Pages라고 하며, 큰 메모리 블록을 처리할 때 사용된다. 대규모 메모리 매핑 작업에서 페이지 테이블의 오버헤드를 줄여준다.
4. 페이지 테이블과 계층 구조
64비트 시스템에서 가상 주소 공간이 매우 크기 때문에, 페이지 테이블을 단순하게 하나의 테이블로 관리하기 어렵다. 따라서 다단계 페이지 테이블(Multi-level Page Table) 구조를 사용하여 가상 주소를 물리 주소로 변환한다.
예를 들어, 64비트 시스템에서 4단계 페이지 테이블을 사용하는 경우:
- 가상 주소는 4개의 부분으로 나뉘며, 각 부분이 페이지 테이블의 각 계층을 탐색하는 인덱스 역할을 한다.
- 첫 번째 부분: 최상위 페이지 디렉터리를 가리키는 인덱스.
- 두 번째 부분: 그 아래 단계의 페이지 테이블을 가리키는 인덱스.
- 세 번째 부분: 그 아래 단계의 페이지 테이블을 가리키는 인덱스.
- 네 번째 부분: 최종적으로 물리 메모리 페이지 프레임을 가리키는 인덱스.
5. 가상 메모리와 물리 메모리 매핑
- 64비트 시스템에서도 가상 메모리와 물리 메모리는 페이지 단위로 매핑된다.
- 운영체제는 가상 메모리 주소에서 페이지 번호를 추출한 후, 페이지 테이블을 참조하여 해당 페이지가 물리 메모리의 어느 위치에 매핑되는지 찾는다.
- 각 프로세스는 독립된 가상 주소 공간을 가지고, 가상 주소가 물리 주소로 변환될 때 페이지 테이블이 그 역할을 한다.
6. 페이지 테이블 엔트리(Page Table Entry, PTE)
64비트 시스템에서 페이지 테이블의 각 항목은 페이지 테이블 엔트리(PTE)로 불린다. 각 PTE는 다음과 같은 정보를 포함한다:
- 프레임 주소: 가상 페이지가 매핑된 물리 메모리 페이지 프레임의 주소.
- 유효성 비트(Valid Bit): 페이지가 물리 메모리에 적재되었는지 여부를 나타낸다.
- 읽기/쓰기 권한: 해당 페이지에 대한 접근 권한.
- 캐시 속성: 해당 페이지의 캐시 정책(캐시할 수 있는지 여부).
7. 가상 주소에서 물리 주소로 변환
64비트 시스템에서는 가상 주소를 물리 주소로 변환하기 위해 페이지 테이블의 여러 단계를 거쳐야 한다. 예를 들어, 4단계 페이지 테이블을 사용하는 경우:
- 가상 주소에서 페이지 번호와 오프셋을 추출한다.
- 페이지 번호는 페이지 테이블을 탐색하기 위한 인덱스 역할을 하며, 여러 단계의 페이지 테이블을 순차적으로 탐색한다.
- 마지막 단계에서 페이지 테이블이 물리 메모리의 페이지 프레임 주소를 반환한다.
- 페이지 프레임 주소에 오프셋을 더해 최종 물리 주소를 계산한다.
8. 페이지 폴트(Page Fault)
64비트 시스템에서도 페이지 폴트는 동일한 방식으로 발생한다:
- 프로세스가 가상 주소에 접근하려 할 때, 해당 페이지가 물리 메모리에 없으면 페이지 폴트가 발생한다.
- 운영체제는 페이지 폴트가 발생하면 해당 페이지를 물리 메모리에 적재하고, 페이지 테이블을 업데이트한다.
- 물리 메모리가 부족하면, 기존에 있던 페이지를 내보내고 새로운 페이지를 적재하는 페이지 교체 알고리즘이 사용된다.
9. 요약
- 64비트 시스템에서는 가상 주소 공간이 매우 크며, 페이지 크기는 일반적으로 4KB, 2MB, 1GB 등의 크기로 나뉜다.
- 가상 주소는 페이지 번호와 오프셋으로 나뉘며, 페이지 테이블을 통해 물리 메모리로 변환된다.
- 다단계 페이지 테이블 구조를 사용하여 가상 주소를 물리 주소로 변환하는데, 페이지 테이블은 계층적으로 탐색된다.
- 페이지 폴트는 가상 메모리에서 물리 메모리로 페이지를 적재할 때 발생하며, 페이지 교체 알고리즘을 통해 효율적으로 메모리를 관리한다.
'cs' 카테고리의 다른 글
[크래프톤 정글] 재배치 가능 목적 파일(CSAP 7.4장) (0) | 2024.10.11 |
---|---|
[크래프톤 정글] 컴파일러 와 링커(CSAP 7.1장)* (0) | 2024.10.11 |
[크래프톤 정글] cpu의 명령어 사이클 (0) | 2024.10.01 |
[크래프톤 정글] hello.s 의 어셈블리 의 구조 (0) | 2024.09.30 |
[크래프톤 정글 ] hello.c의 실행 과정 (0) | 2024.09.30 |