기타 고려 사항
페이지 크기 (Page Size)
페이지 크기를 결정하는 것은 시스템 설계에서 중요한 요소입니다.
큰 페이지 크기의 장점:
페이지 테이블 크기 감소: 페이지 수가 줄어들기 때문에 페이지 테이블의 크기가 감소하고, 따라서 페이지 테이블 관리 오버헤드가 줄어듭니다.
TLB 효율 증가: 페이지 테이블 엔트리(PTE)의 수가 줄어들어, TLB(Translation Look-Aside Buffer) 적중률이 높아집니다.
디스크 I/O 효율 증가: 디스크 접근 효율이 높아집니다. 디스크의 탐색 시간과 회전 지연 시간은 한 번의 I/O 작업에서 전송되는 데이터 양에 비해 상대적으로 일정하기 때문에, 큰 페이지를 한 번에 전송하면 I/O 오버헤드가 줄어듭니다.
큰 페이지 크기의 단점:
내부 단편화 증가: 페이지 크기가 커질수록 프로세스가 사용하는 마지막 페이지의 낭비되는 공간이 커져 내부 단편화가 증가합니다.
프로그램 실행 시간 증가: 프로그램이 시작될 때 사용되지 않는 큰 페이지의 많은 부분이 메모리에 적재될 수 있어 초기 로드 시간이 증가합니다.
현대의 시스템들은 이러한 장단점의 균형을 맞추기 위해 **다중 페이지 크기(multiple page sizes)**를 지원하는 경향이 있습니다 (예: 4KB, 2MB, 1GB 등).
TLB 도달률 (TLB Reach)
TLB 도달률은 TLB에 의해 커버될 수 있는 최대 메모리 양을 의미하며, 다음 공식으로 계산됩니다.
$$\text{TLB 도달률} = (\text{TLB 엔트리 수}) \times (\text{페이지 크기})$$
의미: TLB 도달률은 TLB가 효율적으로 관리할 수 있는 가상 주소 공간의 크기를 나타냅니다.
개선: TLB 도달률이 낮으면 TLB 미스가 자주 발생하여 성능이 저하됩니다. 이를 개선하기 위해 큰 페이지 크기를 사용하거나, 더 많은 TLB 엔트리를 사용하여 TLB 도달률을 높일 수 있습니다.
프로그램 구조 (Program Structure)
프로그램이 가상 메모리를 참조하는 방식은 성능에 큰 영향을 미칩니다.
2차원 배열의 예: 행(row)을 주 저장 순서로 하는 언어(예: C/C++)에서, 열 순서로 배열을 접근하면 페이지 오류율이 매우 높아집니다.
잘못된 접근 (열 순서): 배열의 요소들이 서로 다른 페이지에 연속적으로 저장되어, 각 접근마다 새로운 페이지 오류를 유발합니다.
올바른 접근 (행 순서): 배열의 요소들이 메모리에 연속적으로 저장되어 있어, 한 번의 페이지 오류로 많은 요소를 접근할 수 있습니다.
영향: 프로그래머는 프로그램의 **지역성(locality)**을 높여 메모리 참조를 최적화해야 합니다.
운영체제 인터페이스 (Operating-System Interface)
운영체제는 프로그래머가 가상 메모리 시스템과 상호 작용할 수 있도록 여러 인터페이스를 제공합니다.
예시:
공유 메모리: 명시적인 시스템 호출을 통해 메모리 영역을 공유하도록 요청할 수 있습니다.
페이지 잠금: 특정 메모리 영역을 잠금(pinning) 상태로 만들어 스와핑되는 것을 방지할 수 있습니다. 이는 실시간 프로세스나 I/O 작업을 수행하는 프로세스에서 유용합니다.
사전 페이징(Prepaging): 페이지가 필요하기 전에 미리 메모리에 로드하도록 운영체제에 힌트를 줄 수 있습니다.
Last updated