страничная адресация - зачем такая иерархия страниц?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Quark, 11 окт 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Добрый день! У меня при изучении архитектуры 8086-64 возник вопрос:
    зачем в длинном режиме процессора для использования страничной адресации и размере страницы 4кб необходима такая огромная иерархия таблиц - 4 штуки? зацем виртуальный адрес разбивать на 6 частей? Для сравнения, при размере страниц 2мб число таблиц равно трём, а при гигабайтовой странице - вообще 2. В защищённом режиме процессора число таблиц тоже меньше, чем в длинном. к чему такая иерархия? не проще ли было бы сделать одну таблицу, в которой описать все используемые страницы, а для переключения виртуальных пространств просто менять значения регистра cr3? или я чего-то не понимаю?

    единственная мысль, которая мне приходит в голову - если бы использовалась одна таблица - для неё пришлось бы резервировать слишком много места 2exp(52-32) записей. Ну, сделать 2 таблицы. Но зачем 4?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Quark
    3 это наследие защищенного режима, плюс одна новая.
    4ГБ еще можно поделить на строници по 4кб. А вот 64 уже много получается. Вот и вводят дополнительное разбиение.
    64 бита если побить на два диапозона много. 32 бита получается тое 2^32 записей
    Побьем на 3 получается 21 бит тожее много. 2милиона сумарный объем если взять дескриптор в 64бит(8байт) получаем что под таблицы понадобиться 2*2^21*8=32мбайта
    Поделим на 4 получим 16 бит 2^16 это всего 65536 записей
    3*2^16*8=1.5мб разницу чувствуешь? А если учесть что обычному приложению нужно отсилы всего пару мегабайт. А тратить по 32 на каждое приложение расточительно.

    Причем обычно 2мб это кэш формы. разрешение экрана 1280*1024*4. Отсюда хочешь с экономить память ставте меньше разрешение.
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Если страница будет большая, то своппить её система будет очень долго. Получается, что приложение превращается в тормоз при рандрмном доступе к своей памяти.
     
  4. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Тут можно выделить несколько взаимосвязанных причин.

    1. Тяжкое наследие проклятого прошлого: хочешь-не хочешь, а совместимость с 80386 обеспечивать надо.

    2. Страницы малого размера (4 Кбайта) удобны для организации виртуальной памяти, поскольку могут быть быстро вытеснены на диск или загружены в физическую память, однако в крупных приложениях, особенно 64-разрядных, таких страниц может быть очень много. Поэтому желательно предоставлять выбор из мелких и крупных страниц, что Intel и сделала. Как этой возможностью пользуются существующие ОС -- это уже другой вопрос.

    3. Быстрое преобразование линейных адресов в физические возможно только в том случае, если вся необходимая информация хранится не в физической памяти, а во внутренних буферах процессора (в TLB). Однако эти буферы не резиновые, и слишком много записей туда не впихнёшь. Значит, здесь тоже нужно балансировать между удобством обмена страницами с файлом подкачки и количеством страниц.

    4. Наконец, "железная" проблема. Аппаратура, связанная с преобразованием адресов в 32- и 64-разрядных режимах, должна быть по возможности общей, чтобы в процессорах было как можно меньше "лишних деталей". Поэтому в 64-разрядном режиме приходится опираться на аппаратуру, изначально рассчитанную под 32-разрядный режим (в частности, это TLB).
     
  5. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Пасиб. Получается что я предполагал почти правильно.
    Ещё вопрос - как тогда происхожит перекючение адресных пространств при многозадачности? Для каждой задачи создавать свою иерархию страниц и менять значение регистра cr3?