최근 리눅스 패치가 32비트 PAE(물리 주소 확장) 페이지 테이블 처리 방식을 개선하여, 페이지 테이블 격리(PTI) 사용 시 발생하는 복잡성을 해결했습니다. 이러한 변경은 코드베이스를 단순화하지만, 비-PTI PAE 커널의 경우 프로세스당 약 2페이지의 메모리 오버헤드를 초래합니다. 이는 보안을 우선시하는 사용자에게 특히 중요하며, 이들은 이미 PTI와 PAE를 사용하고 있어 메모리 패널티를 감수하고 있습니다.
이 글에서는 32비트 x86 시스템을 위한 두 가지 하드웨어 페이지 테이블 형식에 대해 논의합니다: 32비트 페이지 테이블 항목(PTE)을 사용하는 2단계 형식과 64비트 PTE를 사용하는 PAE로 알려진 3단계 형식입니다. PAE 형식은 더 큰 PTE 크기로 인해 각 레벨당 주소 지정 용량이 효과적으로 감소하는 비효율성이 지적됩니다. 그러나 추가 레벨을 도입하여 이를 보완하며, 이 레벨은 단 4개의 항목만을 허용하여 하드웨어에 의한 공격적인 캐싱을 가능하게 합니다.
PAE와 PTI 간의 상호작용은 복잡하며, 특히 Xen과 같은 하이퍼바이저의 맥락에서 페이지 테이블 관리가 복잡해집니다. 새로운 패치는 PAE PGD(페이지 글로벌 디렉토리)를 위해 항상 페이지가 할당되도록 하여 PAE 처리를 표준화하고, 커널 PMD(페이지 미들 디렉토리) 페이지의 공유를 제거하며, 모든 PAE PMD 페이지를 미리 할당하도록 목표하고 있습니다. 이는 일부 메모리 낭비를 초래할 수 있지만, PAE 동작을 PTI와 일치시켜 페이지 테이블 관리 전반을 단순화합니다.
이러한 업데이트는 32비트 운영 체제에 대한 지속적인 지원을 반영하며, 이들이 구식이라는 인식에 반박하고 레거시 시스템에서 보안과 효율성을 유지하는 것의 중요성을 강조합니다.
* 이 글은
phoronix.com의 기사를 요약한 것입니다. 전체 기사의 내용은
이곳에서 확인하실 수 있습니다.