canonical address form

Тема в разделе "WASM.X64", создана пользователем shi, 12 дек 2007.

  1. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Странная вещь...

    Вот, читаю амд64мануал, и нигде не могу найти ответы на вопросы:
    1)какие есть ограничения на кол-во значащих битов вирт.адреса в различных реализациях x86-64?
    2)есть ли какойнить нетупой способ определить кол-во этих самых битов на данном компе? (нетупой-значит не проверяя разные адреса на #gp)
    3)если эта битность составляет, например, 40 значащих бит, то где будет в pml4 ссылка на соответствующий pdp для, например, такого адреса {24 единицы знакового расширения}{1 шт. значащая единица}{39 значащих нулей}: в элементе 0x1ff или в #1?
    4)зачем старшие биты забиваются знаком, а не нулями?.. можно,конечно,предположить, что в целях отделения ядра от пользовательских прог,
    только мне это кажется перебором, ибо если забивать нулями, эффект тот же, разве что не так красиво и симметрично, но при этом, например, как-то проще создавать системы, не разделяющие ядро и userspace так явно... или я просто не могу сообразить как это сделать с учетом данного изврата... мб, вряд ли, конечно, после 0xffff..ffff идет 0x0000..0000 ...
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    максимум 64
    Код (Text):
    1. mov eax, 0x80000008
    2. cpuid
    3. shr eax, 8
    4. and eax, 255 ; в EAX - количество значащих бит линейного адреса
    0x1FF если 39-ый бит - 1, иначе - 0x1
     
  3. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    спасибо

    вопрос только по первому пункту еще..
    насчет макс.ограничения, там кажется доступно макс. 48 бит: по 9 бит на индексы в pml4,pdp,pd,pt и 12 бит смещение в странице. или я не прав?
    меня же больше интересует сколько бит гарантированно значащие, то есть какой объем виртуальной памяти предоставлен любой реализацией архитектуры
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    да много тут уже от оси больше зависит кажись) столько памяти на десктоп не ставят, зачем тебе так много? если глянуть табличку 3-24 которая называется IA-32e Mode Paging Structures (4-KByte Pages), то можно увидеть: 512 PML4 *512 PDPTE ∗ 512 PDE ∗ 512 PTE = 2^36 Pages это для 4К ниже табличка а для 2х мегобайтных страниц там их 2^27 Pages
    да в той же табличке всё и расписано даже нарисовано лучше там посмотреть чем тут на форуме вырисовывать)
    ну дык это для удобства слаживания \ вычитания
     
  5. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    мне надо стока виртуальной памяти, чтоб каждая отдельная pml4,pdp,pd и pt была по фикс. виртуальному адресу,
    чтоб можно было быстро получить доступ к любой таблице
    А вот в физ память будут отображаться токо те, которые содержать что-нить кроме нулей
    нет такой таблички в моем мануале(
    она нашлась в мануале по пень4, но там ниче не упоминается про canonical form
    а в мануале от амд написано, что
    тут упоминаются реализации, поддерживающие меньше 64 бит, а 4х-уровневая система page mapper'ов поддерживает не больше 48 бит вирт. адреса, причем судя по упомянутому рисунку в мануале от интела и по рисункам в амд их _ровно_ 48. это я во что-то не врубаюсь, или просто придираюсь по мелочам?
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    IA-32e архитектура предусматривает возможность использования максимум 64-х разрядов для представления линейного адреса
    конкретная имплементация архитектуры (скажем EM64T) предусматривает 48 разрядов для этого
    см. пример определения количества значащих разрядов
    но всегда будет как минимум 32 разряда
    для этого можно использовать концепцию self-mapping
    т. е в каждой таблице последний элемент использовать для хранения физического адреса самой таблицы
    тогда по адресу 0xFFFFFFFFFFFFF000 будет доступна PML4T
    по адресу 0xFFFFFFFFFFE00000 | (P << 12) будет доступна PDPT с индексом P в PML4T
    и т. д