수색…


소개

역사

첫 번째 컴퓨터

초기 컴퓨터는 프로그래머가 코드와 데이터를 넣은 메모리 블록을 가지고 있었고 CPU는이 환경에서 실행되었습니다. 컴퓨터가 매우 비쌌다는 점을 감안할 때, 한 가지 작업을 수행하고 다음 작업이로드 될 때까지 기다렸다가 기다렸다가 한 작업을 처리하는 것은 불행했습니다.

다중 사용자, 다중 처리

따라서 컴퓨터는 신속하게보다 정교 해지고 여러 사용자 및 / 또는 프로그램을 동시에 지원할 수 있습니다. 그러나 그 때가 바로 단순한 "한 블록의 메모리"아이디어로 문제가 발생하기 시작한시기입니다. 컴퓨터가 두 개의 프로그램을 동시에 실행하거나 여러 사용자에 대해 동일한 프로그램을 실행하는 경우 각 사용자별로 별도의 데이터가 필요했을 것입니다. 그런 다음 해당 메모리를 관리해야합니다.

예 : 프로그램이 메모리 주소 1000에서 작동하도록 작성되었지만 다른 프로그램이 이미로드 된 경우 새 프로그램을로드 할 수 없습니다. 이 문제를 해결하는 한 가지 방법은 프로그램이 "상대 주소 지정"과 작동하도록 만드는 것입니다. 프로그램이로드 된 위치는 중요하지 않으며로드 된 메모리 주소와 관련된 모든 것을 수행했습니다. 그러나 필요한 하드웨어 지원.

지적 교양

컴퓨터 하드웨어가 더욱 정교 해짐에 따라 더 큰 메모리 블록을 지원할 수 있었고 동시 프로그램이 많아졌으며 이미로드 된 프로그램을 방해하지 않는 프로그램을 작성하는 것이 더 어려워졌습니다. 하나의 이탈 메모리 참조는 현재 프로그램뿐만 아니라 운영 체제 자체를 포함하여 메모리에있는 다른 프로그램도 다운시킬 수 있습니다!

솔루션

필요한 것은 메모리 블록에 동적 주소를 허용하는 메커니즘이었습니다. 그렇게하면 프로그램이 인식 한 주소에서 메모리 블록을 사용하여 프로그램을 작성할 수 있으며 다른 프로그램의 다른 블록에 액세스 할 수 없습니다 (일부 협력이 허용하지 않는 한).

분할

이를 구현 한 한 가지 메커니즘은 세분화 (Segmentation)입니다. 이를 통해 메모리 블록을 다양한 크기로 정의 할 수 있었으며 프로그램은 항상 액세스 할 세그먼트를 정의해야했습니다.

문제들

이 기법은 강력했지만 매우 유연성이 문제였습니다. 세그먼트는 본질적으로 사용 가능한 메모리를 서로 다른 크기의 덩어리로 세분했기 때문에 할당, 할당 취소, 축소, 축소, 단편화 등 모든 세그먼트에 대한 메모리 관리가 문제였습니다. 필요한 모든 정교한 루틴과 때로는 대량 복사가 구현되었습니다.

페이징

다른 기술은 모든 메모리를 "페이지"라고하는 동일한 크기의 블록으로 나누었습니다. 할당 및 할당 취소 루틴이 매우 단순 해졌고, 확장, 축소 및 단편화가 없었습니다 (내부 단편화를 제외하고는 단지 문제 일뿐입니다). 소모).

가상 주소 지정

메모리를이 블록들로 나누면 프로그램이 필요로하는 어떤 주소 로든지 필요에 따라 다른 프로그램에 할당 될 수 있습니다. 메모리의 물리적 주소와 프로그램의 원하는 주소 간의 "매핑"은 매우 강력하며 오늘날의 모든 주요 프로세서 (Intel, ARM, MIPS, Power 등) 메모리 관리의 기초입니다.

하드웨어 및 OS 지원

하드웨어는 자동으로 연속적으로 다시 매핑을 수행했지만 수행 할 테이블을 정의하는 데 메모리가 필요했습니다. 물론 이러한 재 매핑과 관련된 하우스 키핑은 무언가에 의해 제어되어야했습니다. 운영 체제는 필요에 따라 메모리를 제거하고 필요한 프로그램을 지원하기 위해 하드웨어에 필요한 데이터 테이블을 관리해야합니다.

페이징 기능

하드웨어가이 재 매핑을 수행 할 수있게되면 무엇이 허용됩니까? 주요 드라이버는 다중 처리였습니다. 다중 프로그램은 각각 자신의 "자체"메모리로 서로 보호되어있는 여러 프로그램을 실행하는 기능이었습니다. 그러나 "스파 스 데이터"와 "가상 메모리"를 포함한 다른 두 가지 옵션이 있습니다.

다중 처리

각 프로그램에는 원하는 주소에 실제 메모리가 매핑 될 수있는 주소 범위 인 가상 "주소 공간"이 있습니다. 주위에 이동할 충분한 물리적 메모리가있는 한 (아래의 "가상 메모리"참조) 많은 프로그램을 동시에 지원할 수 있습니다.

또한 프로그램 가상 주소 공간에 매핑되지 않은 메모리에 액세스 할 수 없으므로 프로그램 간 보호 기능이 자동으로 수행됩니다. 프로그램이 의사 소통을해야한다면 OS에 두 개의 서로 다른 프로그램의 주소 공간에 동시에 매핑 된 실제 메모리 블록 인 공유 메모리 블록을 배치하도록 요청할 수 있습니다.

스파 스 데이터

거대한 가상 주소 공간 (일반적으로 4GB는 이러한 프로세서가 일반적으로 가지고있는 32 비트 레지스터와 일치 함)을 허용하지 않으면 해당 주소 공간의 넓은 부분이 매핑되지 않으면 메모리가 낭비되지 않습니다. 따라서 특정 부분 만 매핑되는 거대한 데이터 구조를 언제든지 만들 수 있습니다. 각 방향으로 1,000 바이트의 3 차원 배열을 상상해보십시오 : 일반적으로 10 억 바이트가 필요합니다! 그러나 프로그램은이 데이터를 "보유"하기 위해 가상 주소 공간 블록을 예약 할 수 있지만 작은 섹션은 채워질 때만 매핑합니다. 이것은 아직 필요하지 않은 데이터를위한 메모리를 낭비하지 않으면 서 효율적인 프로그래밍을 가능하게합니다.

가상 메모리

위의 설명에서는 하드웨어에서 수행되는 가상 - 물리적 주소 지정을 설명하기 위해 "가상 주소 지정"이라는 용어를 사용했습니다. 이것은 종종 "가상 메모리"라고 부릅니다. 그러나이 용어는 가상 주소 지정을 사용하여 실제로 사용할 수있는 것보다 많은 메모리를 제공하는 기술을보다 정확하게 지원합니다.

그것은 다음과 같이 작동합니다 :

  • 프로그램이로드되고 더 많은 메모리를 요청하면 OS는 사용 가능한 메모리를 제공합니다. 어떤 메모리가 매핑되었는지 추적하는 것뿐만 아니라 OS는 메모리가 실제로 사용 된 시점을 추적합니다. 하드웨어는 사용 된 페이지를 표시하는 것을 지원합니다.
  • OS가 실제 메모리를 모두 소모하면 사용 된 페이지가 가장 적게 사용되었거나 가장 오랫동안 사용되지 않은 메모리 중 이미 사용 된 메모리를 모두 찾습니다. 특정 페이지의 내용을 하드 디스크에 저장하고 원래의 소유자의 하드웨어에 "없음"으로 표시 한 다음 페이지를 초기화하여 새 소유자에게 제공합니다.
  • 원래 소유자가 해당 페이지에 다시 액세스하려고하면 하드웨어가 OS에 알립니다. 그런 다음 OS는 새 페이지를 할당하고 (이전 단계를 다시 수행해야합니다!) 이전 페이지의 내용을로드 한 다음 새 페이지를 원본 프로그램에 넘깁니다.

    주의해야 할 중요한 점은 모든 페이지가 모든 주소에 매핑 될 수 있고 각 페이지가 동일한 크기이므로 하나의 페이지가 다른 페이지와 마찬가지로 양호하다는 것입니다. 내용이 동일하게 유지되는 한!

  • 프로그램이 매핑되지 않은 메모리 위치에 액세스하면 하드웨어는 이전과 같이 OS에 알립니다. 이번에는 OS가 저장 한 페이지가 아니므로 프로그램의 버그로 인식하고 종료합니다!

    이것은 실제로 OS에서 MessageBox를 사용하여 앱이 불가사의하게 사라질 때 발생합니다. 또한 악명 높은 블루 스크린이나 슬픈 맥 (Slad Screen)이나 슬픈 맥 (Sad Mac)을 일으키는 경우도 종종있다. 버그가있는 프로그램은 실제로는 안되는 메모리를 액세스하는 OS 드라이버였다.

페이징 결정

하드웨어 설계자는 설계가 CPU 설계에 직접 영향을 미칠 수 있으므로 페이징에 대한 중요한 결정을 내려야했습니다! 매우 유연한 시스템은 페이징 인프라 스트럭처 자체를 관리하기 위해 많은 양의 메모리를 필요로하는 오버 헤드가 높습니다.

페이지가 얼마나 커야합니까?

하드웨어에서 가장 쉬운 페이징 구현은 Address를 두 부분으로 나누는 것입니다. 위쪽 부분은 액세스 할 페이지의 표시기이고, 아래쪽 부분은 필요한 바이트의 Page에 대한 인덱스입니다.

+-----------------+------------+
| Page index      | Byte index |
+-----------------+------------+

작은 페이지에는 각 프로그램마다 방대한 색인이 필요하지만, 매핑되지 않은 메모리조차도이를 나타내는 테이블에 항목이 필요합니다.

따라서 대신 다단계 인덱스가 사용됩니다. 주소는 여러 부분으로 나누어지고 (아래의 예에서는 3 개가 표시됩니다), 윗부분 (일반적으로 "디렉토리"라고 함)은 다음 부분으로 색인이 지정됩니다. 최종 페이지의 마지막 바이트 색인이 디코딩 될 때까지 계속됩니다.

+-----------+------------+------------+
| Dir index | Page index | Byte index |
+-----------+------------+------------+

즉, 디렉토리 색인은 방대한 페이지 색인을 요구하지 않고도 주소 공간의 방대한 청크에 대해 "매핑되지 않음"을 나타낼 수 있음을 의미합니다.

페이지 테이블의 사용을 최적화하는 방법은 무엇입니까?

CPU가 수행 할 모든 주소 액세스는 맵핑되어야합니다. 따라서 가상 - 물리적 프로세스는 가능한 한 효율적이어야합니다. 위에 설명 된 3 계층 시스템을 구현하려면 모든 메모리 액세스가 실제로 세 가지 액세스, 즉 하나는 디렉토리에, 하나는 페이지 테이블에; 그리고 마지막으로 원하는 데이터 자체. 그리고 CPU가 하우스 키핑 (housekeeping)을 수행 할 필요가 있다면 (예 :이 페이지가 액세스되거나 쓰여 졌음을 나타냄) 필드를 업데이트하기 위해서는 더 많은 액세스가 필요합니다.

메모리가 빠르지 만 페이징 중 모든 메모리 액세스에 3 배의 속도 저하가 발생합니다! 다행히도 대부분의 프로그램은 "범위의 지역성"을 가지고 있습니다. 즉, 메모리의 한 위치에 액세스하면 향후 액세스가 가능할 것입니다. 페이지가 너무 작지 않으므로 새로운 페이지에 액세스 할 때마다 매핑 변환이 수행되어야합니다. 모든 액세스가 절대적으로 필요한 것은 아닙니다.

그러나 가장 최근의 페이지뿐만 아니라 최근에 액세스 한 페이지의 캐시를 구현하는 것이 더 좋습니다. 문제는 페이지에 액세스 한 것과 캐시하지 않은 것을 유지하는 것입니다. 하드웨어는 캐시 된 값을 찾기 위해 모든 액세스에서 캐시를 스캔해야합니다. 따라서 캐시는 내용 주소 지정 가능 캐시로 구현됩니다. 주소로 액세스하는 대신 내용별로 액세스합니다. 요청 된 데이터가있는 경우 제공되고, 그렇지 않으면 빈 위치가 채워지기 위해 플래그가 지정됩니다. 캐시는 그 모든 것을 관리합니다.

이 내용 주소 지정 가능 캐시는 종종 TLB (Translation Lookaside Buffer)라고하며 가상 주소 지정 하위 시스템의 일부로 OS에서 관리해야합니다. 디렉토리 또는 페이지 테이블이 OS에 의해 수정 될 때 TLB에 항목을 업데이트하거나 단순히 무효 화하도록 통보해야합니다.

80386 페이징

높은 수준의 디자인

80386은 32 비트 주소 지정이 가능한 메모리 공간이있는 32 비트 프로세서입니다. Paging 서브 시스템의 설계자들은 4 비트 페이지 디자인이 10 비트, 10 비트 및 12 비트와 같이 매우 정교한 방식으로 32 비트에 매핑된다는 점에 주목했습니다.

+-----------+------------+------------+
| Dir index | Page index | Byte index |
+-----------+------------+------------+
 3         2 2          1 1          0  Bit
 1         2 1          2 1          0  number

즉, Byte 인덱스는 12 비트 폭으로 4K 페이지로 인덱싱됩니다. 디렉토리 및 페이지 색인은 10 비트였으며 각 색인 항목은 1,024 개의 항목으로 나뉘 었습니다. 그런 표 항목이 각각 4 바이트 인 경우 표당 4K가됩니다.

그것이 그들이 한 일입니다.

  • 각 프로그램에는 고유 한 디렉토리가 있으며, 다음 레벨 페이지 테이블이있는 경우 정의 된 1,024 페이지 항목이있는 페이지가 있습니다 (있는 경우).
  • 있었다면 페이지 테이블에는 마지막 레벨 페이지가있는 곳이 정의 된 1,024 개의 페이지 항목이 있습니다.
  • 있다면, 그 페이지는 직접 Byte를 읽을 수 있습니다.

페이지 입력

최상위 디렉토리와 다음 레벨 페이지 테이블은 1,024 페이지 항목으로 구성됩니다. 이 엔트리의 가장 중요한 부분은 페이지 테이블 또는 실제 페이지 인 인덱싱 대상 주소입니다. 이 주소는 전체 32 비트가 필요하지 않습니다. 모든 것이 페이지이기 때문에 상위 20 비트 만 중요합니다. 따라서 페이지 엔트리의 다른 12 비트는 다른 것들에 사용될 수 있습니다 : 다음 레벨이 존재하는지 여부; 페이지에 액세스했는지 기록했는지에 대한 정리 작업. 그리고 쓰기조차 허용되어야 할지도!

+--------------+----+------+-----+---+---+
| Page Address | OS | Used | Sup | W | P |
+--------------+----+------+-----+---+---+
Page Address = Top 20 bits of Page Table or Page address
OS           = Available for OS use
Used         = Whether this page has been accessed or written to
Sup          = Whether this page is Supervisory - only accessible by the OS
W            = Whether this page is allowed to be Written
P            = Whether this page is even Present

P 비트가 0이면 Entry의 나머지 부분에 OS의 정보가 들어갈 수 있습니다 (예 : 페이지의 내용이 하드 디스크에 저장되어 있어야 함).

페이지 디렉토리베이스 레지스터 ( PDBR )

각 프로그램마다 고유 한 디렉토리가있는 경우 하드웨어가 매핑을 시작할 위치를 어떻게 알 수 있습니까? CPU는 한 번에 하나의 프로그램 만 실행하기 때문에 현재 프로그램 디렉토리의 주소를 보유하는 단일 제어 레지스터를 가지고 있습니다. 이것은 페이지 디렉토리베이스 레지스터 ( CR3 )입니다. OS가 서로 다른 프로그램간에 서로 PDBR 프로그램의 관련 페이지 디렉토리로 PDBR 을 업데이트합니다.

페이지 폴트

CPU가 메모리에 액세스 할 때마다 지정된 가상 주소를 적절한 실제 주소로 매핑해야합니다. 이것은 3 단계 프로세스입니다.

  1. 해당 페이지 테이블의 주소를 얻기 위해 PDBR 이 가리키는 페이지로 주소의 상위 10 비트를 인덱싱합니다.
  2. 적절한 Page의 주소를 얻기 위해 Directory에 의해 지시 된 Page로 주소의 다음 10 비트를 색인하십시오;
  3. 해당 페이지에서 데이터를 가져 오기 위해 주소의 마지막 12 비트를 인덱싱합니다.

위의 1. 및 2. 단계 모두 페이지 항목을 사용하기 때문에 각 항목이 문제를 나타낼 수 있습니다.

  • 다음 단계는 "없음"으로 표시 될 수 있습니다.
  • 다음 수준은 "읽기 전용"으로 표시 될 수 있으며 작업은 쓰기입니다.
  • 다음 레벨은 "수퍼바이저"로 표시 될 수 있으며 OS가 아니라 메모리에 액세스하는 프로그램입니다.

하드웨어에서 이러한 문제가 발견되면 액세스를 완료하는 대신 Fault : Interrupt # 14, Page Fault를 발생시킵니다. 또한 일부 특정 제어 레지스터를 Fault가 발생한 이유에 대한 정보로 채 웁니다. 감독자 액세스 여부 쓰기 시도인지 여부를 나타냅니다.

OS는 오류를 잡아 내고 제어 레지스터를 해독하고 무엇을 할 것인지를 결정해야합니다. 잘못된 액세스 인 경우 오류가있는 프로그램을 종료 할 수 있습니다. 가상 메모리 액세스 인 경우 운영 체제는 새 페이지 (이미 사용중인 페이지를 비워야 할 수도 있음)를 할당하고 필요한 내용 (모두 0 또는 디스크에서 다시로드 한 이전 내용)으로 채 웁니다 ), 새 페이지를 적절한 페이지 테이블로 맵핑하고, 존재하는 것으로 표시 한 다음 오류가있는 명령을 재개하십시오. 이번에는 액세스가 성공적으로 진행될 것이며, 특별한 일이 없다는 것을 알지 못해도 프로그램이 진행될 것입니다 (시계를 보지 않는 한!).

80486 페이징

80486 페이징 서브 시스템은 80386 서브 시스템과 매우 유사합니다. 이전 버전과 호환되었으며 페이지 단위로 메모리 캐시를 제어 할 수있는 유일한 새로운 기능이있었습니다. OS 설계자는 특정 페이지를 캐시되지 않도록 표시하거나 다른 write-through 또는 write-back을 사용할 수있었습니다 캐싱 기법.

다른 모든면에서 "80386 페이징"예제가 적용됩니다.

펜티엄 페이징

펜티엄이 개발 될 때 메모리 크기와 그 안에 실행 된 프로그램이 점점 커지고있었습니다. OS는 대형 프로그램이나 데이터 세트를 사용할 때 업데이트해야하는 막대한 수의 페이지 인덱스에서 페이징 서브 시스템을 유지 관리해야했습니다.

따라서 펜티엄 설계자는 간단한 트릭을 추가했습니다. 페이지 디렉토리의 항목에 다음 비트가 페이지 테이블 (이전과 같이)인지 아니면 4MB 페이지로 직접 이동했는지 나타내는 비트를 추가합니다! OS는 4MB 페이지의 개념을 가짐으로써 페이지 테이블을 생성하고 기본적으로 이전 주소보다 4K 높은 주소를 인덱싱하는 1,024 개의 항목으로 채울 필요가 없습니다.

주소 레이아웃

+-----------+----------------------+
| Dir Index | 4MB Byte Index       |
+-----------+----------------------+
 3         2 2                    0   Bit
 1         2 1                    0   number

디렉토리 항목 레이아웃

+-----------+----+---+------+-----+---+---+
| Page Addr | OS | S | Used | Sup | W | P |
+-----------+----+---+------+-----+---+---+
Page Addr = Top 20 bits of Page Table or Page address
OS        = Available for OS use
S         = Size of Next Level: 0 = Page Table, 1 = 4 MB Page
Used      = Whether this page has been accessed or written to
Sup       = Whether this page is Supervisory - onlly accessible by the OS
W         = Whether this page is allowed to be Written
P         = Whether this page is even Present

물론, 여기에는 몇 가지 파급 효과가 있습니다.

  • 4K 페이지는 4K 주소 경계에서 시작해야했던 것처럼 4MB 주소 경계에서 시작해야했습니다.
  • 4MB는 모두 단일 프로그램에 속하거나 여러 프로그램에서 공유해야했습니다.

이것은 그래픽 어댑터와 같이 사용하기에 OS 용으로 매핑해야하는 큰 주소 공간 창이있는 대용량 메모리 주변 장치에 사용하기에 적합했습니다.

실제 주소 확장 (PAE)

소개

메모리 가격이 떨어지면서 인텔 기반 PC는 더 많은 RAM을 저렴하게 가질 수 있었으며 동시에 생산되는 많은 대형 응용 프로그램을 실행하는 데 많은 사용자의 문제를 완화 할 수있었습니다. 가상 메모리를 사용하면 기존 "이전"페이지 내용을 하드 디스크에 스왑하여 "새"데이터를 저장할 수 있으므로 사실상 "생성"할 수 있었지만 페이지를 "스 래싱"하면서 지속적으로 데이터를 교환하면서 프로그램 실행 속도가 느려졌습니다 하드 디스크를 켜고 끕니다.

추가 RAM

필요한 것은 더 많은 물리적 RAM에 액세스 할 수있는 능력 이었지만 이미 32 비트 주소 버스 였기 때문에 증가하면 더 큰 주소 레지스터가 필요합니다. 아니면 그럴까? 64 비트 프로세서가 생성 될 때까지 스톱 갭 (stop-gap)으로서 펜티엄 프로 (펜티엄 M)를 개발할 때 레지스터 비트의 수를 변경 하지 않고 더 많은 물리적 주소 비트 (더 많은 물리적 메모리 허용)를 추가해야합니다. 이것은 가상 주소가 실제 주소에 매핑 되었기 때문에 달성 될 수 있습니다. 변경해야하는 모든 것이 매핑 시스템이었습니다.

디자인

기존 시스템은 최대 32 비트의 물리적 주소에 액세스 할 수 있습니다. 이를 증가 시키려면 페이지 입력 구조를 32 비트에서 64 비트로 완전히 변경해야했습니다. 4K 페이지에서 최소 세분성을 유지하기로 결정되었으므로 64 비트 항목은 52 비트의 주소와 12 비트의 제어를가집니다 (이전 항목은 20 비트의 주소와 12 비트의 제어를 가짐).

64 비트 항목을 갖지만 (여전히) 4K의 페이지 크기는 이전 1,024 대신 페이지 테이블 또는 디렉토리 당 512 개의 항목 만있을 수 있음을 의미합니다. 이는 32 비트 가상 주소가 이전과 다르게 분할된다는 것을 의미합니다.

+-----+-----------+------------+------------+
| DPI | Dir Index | Page Index | Byte Index |
+-----+-----------+------------+------------+
 3   3 2         2 2          1 1          0   Bit
 1   0 9         1 0          2 1          0   number

 DPI        = 2-bit index into Directory Pointer Table
 Dir Index  = 9-bit index into Directory
 Page Index = 9-bit index into Page Table
 Byte Index = 12-bit index into Page (as before)

디렉토리 색인과 페이지 색인에서 한 비트를 자르면 매핑의 세 번째 계층에 대해 두 비트가 주어졌습니다. 이전의 포인터 대신 네 개의 디렉토리를 처리 한 정확히 네 개의 64 비트 항목의 테이블 인 PDPT (Page Directory Pointer Table) 하나. PDBR ( CR3 이후 -) 지금 대신 PDPT 가리키는 CR3 접근성 RAM의 제 4기가바이트에 저장 될 필요가 32 비트이다. CR3 의 하위 비트는 제어에 사용되기 때문에 PDPT는 32 바이트 경계에서 시작해야합니다.

페이지 크기 확장 (PSE)

이전의 4MB 페이지는 좋은 아이디어 였으므로 큰 페이지를 다시 지원할 수 있기를 원했습니다. 이번에는 계층 시스템의 마지막 레이어를 제거하더라도 10 + 12 비트 4MB 페이지가 생성되지 않고 9 + 12 비트 2MB 페이지가 생성되었습니다.

PSE-32 (및 PSE-40)

Pentium Pro (및 Pentum M)에서 도입 된 PAE (Physical Address Extension) 모드는 운영 체제의 메모리 관리 하위 시스템에 대한 이러한 변화 였기 때문에 Intel이 Pentium II를 설계했을 때 "표준"페이지 모드를 이전에 정의 된 32 비트 항목 내에서 프로세서의 새로운 물리적 주소 비트를 지원합니다.

그들은 4MB 페이지가 사용될 때 디렉토리 항목이 다음과 같이 보임을 깨달았습니다.

+-----------+------------+---------+
| Dir Index |  Unused    | Control |
+-----------+------------+---------+

엔트리의 Dir Index와 Control 영역은 같았지만, 존재하지 않는다면 페이지 인덱스가 사용하게 될 그들 사이의 사용되지 않는 비트 블록은 낭비되었다. 그래서 그들은 그 영역 을 사용하여 31보다 큰 상위 물리적 주소 비트를 정의 하기로 결정했습니다!

+-----------+------+-----+---------+
| Dir Index |Unused|Upper| Control |
+-----------+------+-----+---------+

이로 인해 PAE 모드를 채택하지 않은 OS에서는 4GB 이상의 RAM에 액세스 할 수있었습니다. 약간의 로직을 추가하면 각 프로그램에 정상적인 4GB를 넘지는 않지만 시스템에 많은 RAM을 추가로 제공 할 수있었습니다. 처음에는 4 비트 만 추가되어 36 비트 물리적 주소 지정을 허용하므로이 모드를 Page Size Extension 36 (PSE-36)이라고했습니다. 실제로 페이지 크기는 변경되지 않았지만 주소 지정 만 변경되었습니다.

이것의 한계는 단지 4GB 페이지가 정의 가능하다는 것입니다 - 4K 페이지는 허용되지 않았습니다. 이 모드의 채택은 광범위 하지 않았습니다. PAE를 사용하는 것보다 속도가 느린 것으로보고되었으며, Linux는 사용하지 못했습니다.

그럼에도 불구하고 실제 주소 비트가 더 많은 최신 프로세서에서 AMD와 Intel은 모두 PSE 영역을 8 비트로 넓혔는데, 일부 사람들은 "PSE-40"이라고 불렀습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow