x86 - Максимально адресуемый объем памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем OxMDN, 18 фев 2009.

  1. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Y_Mur
    Так база это физический адрес, логически отсчет идет от нуля. И оффсет считается от этого нуля. Не пойму откуда взялось 8ГБ.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Partner
    offset внутри сегмента считается от базы этого сегмента (база и лимит хранятся в дескрипторе), потому они и складываются. Если модель памяти многосегментная, то в GDT\LDT можно указать ненулевую базу сегмента. Это в win все адреса отчитываются от 0, потому что модель flat. Но если указать базу на адрес например в 2Гб или 4Гб, то при прибавлении offset гипотетически можно получить до соответсвенно 6Гб или 8Гб, но при этом старший 33й бит потеряется и если сумма >4Гб то адрес всё равно окажется в пределах 4Гб, а не 8.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Y_Mur
    А там разве не будет GP в случае >= 4 ГБ?
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Y_Mur
    Если установить базу (например) 2ГБ, то ты сможешь адресовать от 2 до 6ГБ, т.е. те же 4 ГБ.
    база + оффсет это (упрощая) - физ адрес. База фиксирована, а оффсет 32 битный. Как можно адресовать больше 4ГБ?

    Поясни, как ты собираешься адресовать ниже 2 ГБ? Ведь любой адрес - это положительное смещение от базы.
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Partner
    Вообще-то адресация выполняется не дескриптором, а селектором и смещением. Соответственно можно насоздавать сколько угодно дескрипторов с четырёхгигабайтным лимитом и различными базами и выбирать селектором любой понравившийся дескриптор: 23h:0 (адресуем нулевой байт) и одновременно 27h:FFFFFFFFh (вроде как адресуем 8589934590-й байт при условии, что база в дескрипторе с селектором 27h равна FFFFFFFFh). Соответственно можно было бы теоретически адресовать почти 8 ГБ, если бы линейный адрес не был бы по определению 32-битным.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Теоретический предел размера логического адресного пространства равен 16383 * 4 Гбайта, т.е .32 Тбайта без 4 Гбайт (8191 сегмент в GDT и 8192 сегмента в LDT, каждый по 4 Гбайта).

    Размер линейного адресного пространства всегда 4 Гбайта.

    Максимальный размер физического адресного пространства зависит от режима работы страничного механизма и не превышает (во всяком случае, в "обычных" процессорах) 64 Гбайт.
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    l_inc
    это не одновременно :)
    между этими обращениями к памяти происходит переключение сегментов.
    В общем я понял, что имеют ввиду те, кто говорит о 8ГБ. Как всегда, большинство непоняток происходит от терминологической путаницы.
     
  8. OxMDN

    OxMDN New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2003
    Сообщения:
    11
    Адрес:
    Moscow
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    l_inc
    нет GP не будет - проверял - дворд записанный в защищённый сегмент с ненулевой базой по адресу [0FFFFFFFFh - 3] попадает в адрес base - 4, что как раз соответствует отбрасыванию 33 бита. Исключение возникает только если попытаться записать дворд по адресу 0FFFFFFFFh, когда граница сегмента явно нарушается.

    Partner
    вовсе не обязательно - можно "одновременно" иметь 6 дескрипторов в разных сегментных регистрах и адресоваться через них (в дос и win16 это было обычной практикой), но дело в том что и с этой поправкой >4Гб нельзя из-за отбрасывания 33 бита.

    OxMDN
    Поздравляю :))
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Y_Mur
    Да. Проверил. Действительно не будет GP. А раньше проверял — было. Наверное, лимит забыл на максимум выставить. Спасибо.