Я читаю главу «Расширение физических адресов» (PAE) в четвертом издании Windows Internals (стр. 435–437) и не могу найти ссылку на 24 бита. Существует ссылка на 25 битов, используемых для адреса базовой страницы, что означает, что адресуемое пространство становится 2 ^ (12 + 25) = 128 ГБ. Но мы вернемся к этому. Сначала давайте посмотрим, как линейный адрес преобразуется в физический адрес (и это прекрасно описано в книге): линейный адрес разбивается на три части:
- 12 младших битов смещены в пределах страницы, обращаясь к любому байту на странице 4 КБ;
- следующие 10 битов являются индексом записи в таблице страниц (PTE), которая содержит базовый адрес (физический адрес первого байта) страницы;
- старшие 10 битов являются индексом записи в таблице каталогов страниц (PDE), которая содержит базовый адрес для PTE.
Каждый элемент в PTE и PDE содержит 32-битную запись, 20 бит которой содержат физический адрес страницы или таблицы следующего уровня соответственно. Другие 12 битов - это флаги, описывающие страницу или таблицу (читаемые / записываемые / исполняемые и т.д.). Так работали 80386, x486 и Pentium.
Теперь Pentium Pro и более новые процессоры при работе в режиме PAE используют записи шириной 64 бита в таблицах PDE и PTE. В этих записях может быть использовано до 40 бит для кодирования базового адреса страницы в памяти. Это означает, что режим PAE теоретически может адресовать 2 ^ 40 страниц (1T страниц) размером 2 ^ 12 (4 КБ каждая). Общее теоретическое адресное пространство составляет 2 ^ (40 + 12) = 2 ^ 52 = 4 Петы байтов. Однако операционные системы не используют все эти 40 бит. Например, Windows использует только 24 из них, что приводит к общему адресуемому адресному пространству в 2 ^ (24 + 12) = 2 ^ 36 = 64 Гбайт.
Видимо, разные версии (разновидности) Windows используют разное количество битов в этой таблице, что кажется немного странным. Согласно 4-му изданию рассматриваемой книги, в этом случае используется 25 бит, что увеличивает адресное пространство до 128 Гб, и это также подтверждается этой страницей. Это является источником несоответствия между 4-м и 5-м изданием, упомянутым выше.
Для более подробного объяснения того, как происходит перевод, взгляните на страницы 4-17 и 4-18 (глава 4.4.2) Руководства разработчика программного обеспечения Intel 64 и IA32 Architectures.
О, да, и система называется 32-битной не потому, что она адресует 2 ^ 32 байта. Это потому, что он работает в режиме, когда внутренние регистры имеют ширину 32 бита (что уже не всегда верно, но достаточно близко к реальности). Если бы адресное пространство определяло имя ОС, то DOS была бы 20-битной ОС, а старые Mac были бы 24-битной ОС