Конфигурация PCI: BAR

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

  1. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Доброго времени суток!

    Если установить в BAR (базовый регистр адреса) адрес ячецки ОЗУ, что в этом случае произойдет? Как мне теперь обратиться к памяти, которая была расположена по прежнемк адресу?

    С Уважением, Александр!
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    BAR адресс должна устанавливать ОС или БИОС, а не драйвер устройства.

    Ничего страшного не произойдет. Все зависит от того как настроенна система. Вообще Прежде чем адресс попадет в PCI он попадет к конроллеру памяти(серверный мост) так вот в нем есть дыры. Если адрес соответствует дыре то он его пропустит по шине PCI, если нет то завернет в основную оперативную память.
     
  3. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Pavia
    И тогда до устройства не доберёшься...

    exst
    Ну а вообще, конфигурирование устройств (и в частности, настройка адресов их регистров) -- вещь достаточно сложная и комплексная. Устройства не в вакууме находятся, поэтому при настройке надо учитывать массу факторов.
     
  4. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Пока что мне все это для общего развития. Допустим есть сетевой контроллер, доступ к регистрам которого происходит через память. Я конфигурирую устройство: устанавливаю BAR (скажем в пределах E00000000-F00000000) и вдруг в сестеме оказывается 4 ГБ ОЗУ. Чипсет трогать не желаю. Слишком сложно да и основное конфигурирование производит BIOS. Таким образом можно работать устройством?
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Неа. У Memory Mapped устройств выше приоритет, если можно так выразиться.
    Обращения пойдут к устройству, а память станет недоступна.

    Если в системе 4Гб ОЗУ, все они видны не будут.
    Можно на примере 32-битной Windows или Linux посмотреть.
    Там предел в районе 3.7Гб (колеблется в зависимости от того встроенное видео или нет).
    Верхние адреса на которые отображены устройства станут недоступны, а доступ к устройствам будет.

    Хотя возможно это настраиваемо в чипсете, но думаю врядли.
     
  6. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Хм... Значит в современных ОС "пропадает" много памяьти? Получается выгоднее вынести устройства из 4ГБ и обращаться к ним через страничную 36битную адресацию. А возможно ли это?
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Зависит от материнок. На старых будет доступно около 3 ГБ озу.
    В новых идет переотоброжение за 4Гб. Так что память не пропадает.

    ОС Борятся с этим.

    Вопервых старые устройства имеют ограничения и адресса выше 4ГБ могут не видить поэтому ради совместимости такии устроуства распологаются в 4 гбайте. Да и непереместишь их BAR у них 32 битный Так что не переместишь их.
    Те которые имеют BAR 64 бита могут распологаться в верхней дырке для PCI.
    А во-вторых не надо путать физические адресса и виртуальные,линейные.
     
  8. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Не путаю. Виртуальные - чисто для использование через PAE.

    Не подскаете каким образом? Часто изменяют BAR?

    Я ща пишу с системы, с установленной Windows x64. Диспечер устройств признается, что используемые адреса видеокарты (GF8400): EA000000-EAFFFFFF, D0000000-D7777777, E8000000-E9FFFFFF. Таким образом получаем 16M+120M+32M=168M. Тут возникают два вопроса: На видеокарте установлено 512МЬ, а тут отображено 168МБ. Собственно почему? И почему не используются адреса выше 4ГБ? Оборудование довольно свежее.
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Скорее всего изменяют все BAR так что бы они занили как можно меньше места.

    Вопрос совместимости видео карта должна работать на машинах с 32 битной шиной и 36. А доступ к 512Мбайтам не нужен. Да и совместимость со старым софтом, поэтому БИОС настраивает адрес на 4гб. Ни кто попиксельно не пишет не читает из видио карты, так как это медленно. Используют потокувую передачу через DMA. Видео карте посылается адрес откуда забрать данные и она сама их забирает.

    16M и 32M это не память, а скорее всего порты отображенные в память. А 512 очень много для 1ГБ резерва.

    Видюшка может и свежая, а материнка наверника урезанная. Интел до сих пор выпускает материнки которые поддерживают только 2-3ГБ.

    Собственно нет выгоды от использования адресов выше 4ГБайт. Хотя для отладки удобнее иметь доступ ко всей памяти.
     
  10. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Также я решин взглунуть на распределение памяти в Линукс-машинке (32 бита). Был немного удивлен. Тут видеокарта как раз использует все 256 МБ.
     
  11. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Да и при чем тут все место. выше головы все равно не прыгнешь. Мне вот интересно: как система использует ОЗУ, адреса которые заняты PCI? Постоянно менят BAR?
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Устройства имеют тенденцию резервировать память в 2 раза больше чем используют на самом деле. Вот это большая загадка. Хотя есть одно предположение.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не меняет так как это не поможет.
    Если материнка переотоброжает памтять за 4ГБ то все доступно под PCI не теряется.
    Если не переотоброжает то память теряется. Так как терять 1ГБ не сруки то ОС виндовс пробует упоковать PCI как можно плотнее. И в итоге высвыбождает 300-500МБайт.
     
  14. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    А если поступить так:
    1)Прописать BAR
    2)Произвести доступ в устройство
    3)Переместить BAR
    4)Произвести работу с памятью.

    Как вы считаете, такое возможно?
     
  15. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    Железо зависемо. Да и смысла нет. Проще другую материнку найти.
     
  16. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Вы абсолютно правы. Скачал некую программу meminfo, которая выводит диапазоны физической памяти. На системе 5ГБ ОЗУ:
    До 4ГБ:
    0x1000-0x9F000;
    0x1000000-0xCFFF0000;
    Свыше 4ГБ:
    0x100000000-0x170000000. (1792МБ, если бы не было переотображения - было бы 1024МБ).

    Во всем разобрался. Спасибо.