Карта памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем Mika0x65, 9 ноя 2006.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Не подскажет ли кто ссылку, где подробно описана карта памяти перед передачей управления в MBR?

    Помимо этого есть еще пара вопросов:

    Насколько я помню, после включения, процессор при подаче адреса на шину адреса выставляет верхние 12 бит в '1', генерируя тем самым адреса '0xFFF00000 + линейный адрес', до первого 'far jmp'. Т.е. "совсем ранний" код BIOSа работает там. Понятно, что такие физ. адреса не всюду возможны, значит, они отображаются в реальный физ. адрес. Вопрос, собственно в том, кто занимается этим отображением.

    И вообще, как происходит отображение устройств в физ. память? Например, 0xB000 -- начало видеопамяти, но наверняка есть еще ННое кол-во адресов, которые отображаются. Как я себе представляю, отчасти отображением занимается процессор (например, для досутпа к LAPIC), а для остального должен быть какой-то программируемый контроллер (не DMA) памяти, который занимается такими отображениями. Но это всего лишь моя фантазия :).

    В общем, порекомендуйте документ, где все это почитать можно.

    Заранее благодарен :).
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    Почему не всюду? Биос появился в 486 где число линий алресса было уже 32 штуки.
    Собственно часть биоса отоброжается по линейному адрессу F0000h
    Вообще отоброжение памяти и портов ввода вывода должно быть связанно с контролером PCI, но чето там не так.
    По идее отоброжением памяти должен заведовать MCH - Memory Controller Hub.
    Топай на сайт intel там много документации.
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Разве на 486? Вроде, BIOS в 1981 в IBM придумали... Но даже если и 32 линии -- такого объема физ. памяти у меня и сейчас нет :).

    Т.е., как я понимаю, процессор генерирует адреса около 4ГБ (зачем это сделали-то вообще?..), а контроллер памяти уже отображает эти "большие" адреса в ту область, где физически размещается BIOS. Это, опять же, моя фантазия :).

    Спасибо, теперь хоть знаю, что искать надо :).

    Но я полагаю, что часть отображений адресов должна быть все же стандартизированна -- хотя бы та же видеопамять.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    Сейчас расскажу. Есть такая вещь называется PCI шина. Так вот в ней уже заложена возможность отображать память устройств в адресное пространство. Многие устройства в компьютере есть PCI устройства. Начиная от процессора, контролера памяти, контролера видеокарты и тд. Каждое PCI устройство снабжено конфигурационным пространством. В котором прописаны адреса которые будут отображаться в адресатное пространство памяти или портов вода вывода. Я не вдавался в тонкости функционирования PCI шины, но должно быть так. Устройство которое должно записать данные по некоторому адресу должно выставить его на шину адреса, так вот то устройство которое имеет в своем распоряжении данный адрес то и будет работать с данными.
    Шина там 32 разрядная. Так вот верхние адреса отведенs под системные нужды и железо С0000000-FFFFFFFFh нижние же адреса проверяет MCH контролер он уже выбирает.
    Вернее MCH- состоит из нескольких устройств и за нижние адреса отвечает.
    DRAM Controller/Host-Hub Interface Device Registers (Device 0)
    Так как это одновременно контролер основной памяти, то он может контролировать на какое устройство запрос. К основной памяти или к некоторому устройству.
    То есть он отображает БИОС который размещен где-то на материке в адресатное пространство.

    Не могу сказать на сколько стандартерезировано. Многие старые вещи связанны с SMM до которого я еще не добрался. Хотя тут переизучая MCH вроде наткнулся, что весь первый мегабайт стандартерезирован.

    Надеюсь я тебя не запутал???
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    И да и нет :).

    Я не совсем понял -- MCH получается не полностью контролирует раздачу портов/адресов?

    Почему интересуюсь стандартами -- мне кажется, что все эти вещи ОЧЕНЬ системно-зависимы. Т.е. BIOS и набор системной логики идут на одной схеме и "заключены сами в себе", т.е. по моей фантазийной схеме и контроллер и схемы BIOS и прочие элементы "сами" знают кто и как куда отображается и могут свободно изменяться -- главное, чтобы их "непротиворечивость" относительно друг друга сохранялась. А программной части они уже предоставляют интерфейс, в виде ф-ий BIOS, например. Поэтому наиболее общий стандарт даст нужное представление без системно-зависимых деталей.
    Не знаю, насколько эта тирада понятна :).

    Поиск по Интел дал такой результат: http://www.intel.com/design/chipsets/datashts/30240501.pdf -- очень подробное описание MCH. Интересно, для AMD, например, сильные отличия будут?
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    Тут статью надо писать.
    Собственно так, во времена шины ISA каждое устройство имело свои порты и само использовало адрестное пространство памяти. Все было строго расписанно и привязанно. Потом появилась технология PNP ISA. Которая позволяла прочитать данные от устройства какие она там порты использует какие диапозоны памяти.

    Потом появилась шина PCI. Каждое PCI устройство имеет свое конфигурационное пространство. В этом пространстве прописываются порты и адресса памяти. Я сейчас в некоторым замешательстве так как не могу сказать, кто инициирует PCI. То есть насколько я знаю это должен делать BIOS. Он должен задать(прописать их в конфигурационное пространство PCI) диапазоны куда будет отоброжаться память и порты ввода/вывода. И их можно переназначить.
    Есть SMM который осуществляет эмуляцию старых устройств. Одна из его функций это задание тех самых портов ввода вывода и диапазонов памяти для устройств чтобы они были совместимыми со старыми устройствами который были на шине ISA. Так вот эти порты и адресса жестко заданны.

    Так вот MCH а вернее DRAM Controller/Host-Hub Interface Device Registers (Device 0)
    Контролирует основную память. Размер основной памяти ограничен 2ГБ. Но так как первый мегабайт это 640КБ основной памяти, а далее идет видео память всякии биусы. То нужно сделать исключение чтобы обращение шло туда куда надо, а не в основную память. Сдесь надо бы рассказать, как работает компьютер и что есть шина адресса но думаю это ты знаешь.

    А вот каждое устройство тем самым хватает своею память. Так вот BIOS закреплен за двумя устройствами это
    DRAM Controller и LPC Controller.
    LPC Controller - это мост меду PCI шиной и ISA служит для работы со старыми устройствами.

    Теперь про BIOS устройство может снабжаться своим BIOSом пример видео карта. Адресс можно узнать опять таки из конфигурационного пространства видео карты. Но он дефолтовый и равен C0000h. БИОС компьютера инециирует биос видео карты тот подменяет свой сервис int 10h.

    Работа с остальными устройствами произсходит по другому в биосе зашиты те дефолтовые порты которые нам достались в наследство от старой архетектуры и которых эмулирует SMM.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Да, материал, скажем мягко, не маленький.

    А не подкинешь ссылки про PCI, по которым разбирался? Просмотрел тот документ, который нашел -- тяжело. Там, скорее, конекретная реализация архитектуры рассмотрена, как я понял. Сунулся на http://pcisig.com/home -- денег хотят :dntknw:.
     
  8. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    вообще-то если речь идет о маппинге биоса на интелах -- то этим заведует не MCH, а ICH + FWH (еще может SPI на последних). На других ессно по другому. ;)
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Pavia
    Ну насчёт 2Гб ты загнул.
    Для основной памяти доступно всё адресное пространство минус адреса занятые устройствами.
    Т.е. если в системе будет 3Гб памяти то устройства будут мапиться за 3Гб.
    Интересно выходит только если в системе 4Гб памяти - тогда устройства мапятся в старшие адреса а часть памяти становится недоступна.

    Насчёт инициализации PCI устройств - этим занимается BIOS.
    И он же отвечает за отсутствие конфликтов по ресурсам.
    Хотя никто не мешает написать софтину и назначить двум устройствам одинаковые адреса.
    Другое дело что при таком раскладе все обращения будут идти одновременно к двум устройствам и соответственно ни одно из них работать не будет.
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Я пока почти ничего не понимаю, но все же не ясно -- почему ICH? Это ведь, как я понял, hub ввода/вывода...
     
  11. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Потому что FWH "присобачен" к ICH и регистры, управляющие отображением дипазонов FWH, находятся на южном мосту, а не на северном. MCH строго говоря тоже отчасти управляет маппингом биоса -- shadowing именно на нем программируется.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    _BC_
    Я про MCH говорю только про PAM0-PAM7.Отвечающий за диапазон памяти 0C0000h–0FFFFFh.
    И еще есть регистры SMRAM и ESMRAMC которые тоже чета контролируют связанное с памятью. :derisive:
    А сам БИОС весит на ICH более точно привязан к LPC.
    FWH и Flash BIOS почти одно и тоже, от доки к доке названия меняются.
    Конечно FWH - это не только БИОС там еще и RNG есть.

    Mika0x65
    ICH за многое отвечает.

    cppasm
    Изначально было ограничение для основной памяти ее может быть не более 2ГБ потом до 3ГБ сделали. Последние доки не смотрел может что изменилось.
    У меня сейчас памяти 1ГБ и устройства все замапины за 3ГБ. Это такой стандарт у Intel да и у других производителей. Хотя никто не мешает изменить адреса на нижние если память позволяет.

    чето я в этом за сомневался надо проверить.
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Дык проверенно уже :)
    А если не секрет какие ещё могут быть варианты?
    Дефолтных значений у устройств нету, чипсету их инициализировать тоже нафиг надо...
     
  14. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Еще пару вопросов, с позволения.

    1. Крамола: а зачем вообще нужно отображать устройства в память? Т.е. для ввода/вывода ведь можно использовать порты процессора. Кроме DMA ничего в голову мне не приходит...

    2. Как ОС (Win*/*nix, не важно) с этим всем разбирается? Поясню:

    Как я понял, MCH -- первое устройство, которое принимает адрес от CPU. MCH -- специфика Intel, он может быть, а может не быть. Т.е. получается, что ОС для работы с этим (совсем низким) уровнем нужна какая-то абстракция, либо должен быть какой-то общий интерфейс для операций с контроллером. Третий вариант -- всю эту настройку выполняет BIOS еще до передачи управления ОС. Четвертый вариант -- часть настройки выполняет BIOS, часть ОС, при загрузке.

    И еще:

    1. Есть ли возможность спалить что-нибудь, если начать экспериментировать с MCH? У меня только бук, и менять в нем что-либо будет проблематично.

    2. Не совсем понятно, MCH, получается, тоже устройство на шине PCI, или же он стоит отдельно?

    P.s. Вопросы, возможно, дикие, поэтому прошу отнестись с терпением.
     
  15. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Ты вначале оперделись что ты хочешь услышать :)
    То что тебе здесь рассказали про MCH и т.д. - это аппаратная реализация, внутренне устройство так сказать.

    Теперь по порядку.
    Потому что с памятью работать удобней.
    Это раз. А два - на практически всех архитектурах устройства отображаются в память.
    А порты IO это выдумка IBM/Intel - просто адресное пространство у 8086 было маленькое чтоб туда ещё устройства мапить - вот и сделали для них отдельное адресное пространство - IO Ports.

    Оч просто.
    Как я написал это внутренний механизм.
    ОС это по барабану.
    У ОС есть доступ к конфигурационному пространству устройств через которое они конфигурируются.
    Она туда записывает адреса ресурсов и всё.

    Такая возможность есть всегда :)
    Практически - случайно спалить это врядли, там защит всяких понаставлено. Да и умышленно тоже.
    Можно правда параметры левые записать.
    У меня такое было. Потом даже жмёшь ресет - а комп перегружается и даже загрузку БИОС не показывает - чёрный экран :) Всё ж не BSOD :)
    Лечится полным отключением от сети на 30 сек.

    Да, тоже PCI устройство.
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    1. Доступ удобнее к памяти нежели чем к портам ввода/вывода да и сравнил 2ГБ и 64КБ.
    2. ОС да никак. BIOS все настраивает. Драйвер устройства читает настроенный адрес из PCI CFG и резервирует участок в памяти по средствам ОС. Так как большинство устройств являются PCI, то доступ к PCI CFG можно по лучить по средством портов ввода вывода. Есть еще много разных сервисов БИОСа. Дальше зная порты ввода вывода и область зарезервированной памяти работать с ними.

    И еще.
    1. Если не будешь разгонять компьютер, то мало вероятно. Хотя сам постоянно задаю этот вопрос.
    2. MCH и ICH - это скопления нескольких устройств, большая часть из которых PCI устройства.
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    В принципе да - но гарантии нет.
    Любой драйвер может заниматься настройкой ресурсов PCI устройства - другой вопрос зачем?

    Они-то в принципе скопления - но есть отдельно South Bridge и North Bridge (они же ICH и MCH) как отдельные устройства на PCI.
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Да, я такое тоже находил как-то. ;) Еще давно экспериментировал с nforce2 и откопал интересный регистр, который, будучи инициализированный "неправильным" значением, не дает загрузиться системе. Внешне проявляется весьма забавно -- винда не грузится на ранней стадии загрузки, наглухо зависая. Ресет и отключение питания не помогают. ;)) Великолепная деструкция -- внешне выглядит так, как будто винда накрылась п#$%&й, юзеру ничего не остается, кроме как переустановить винду и с отчаянием наблюдать что это не помогло. ;)) Лечилось только полным обесточиванием блока питания -- регистр очевидно питается от дежурных 5 В, которые БП всегда выдает МБ (на включение да всякие wake-up'ы).
     
  19. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    О! Отлично сказано :).

    Скажу так: я знаю, что процессор общается с внешними устройствами через порты. +есть память. Когда об этом только прочитал, было интересно, каким образом устройствам назначаются порты и кто отображает память, но не хотелось отвлекаться от основной тематики. Обошелся предположением, что есть некий программируемый контроллер, который принимает адрес от процессора и сам уже решает, куда реально уйдут данные. То же самое и с портами.

    Сейчас хочу углубить знания в этих вопросах. Из того, что успел в даташите прочесть, понял, что в некоторых реализациях этими вопросами занимается MCH. Он принимает адрес с шины адреса и в зависимости от адреса перенаправляет их либо в память, либо в устройства ввода/вывода (ICH). +дружит с PCI-E. Кто и как работает с портами пока не ясно.

    Беда в том, что такое представление слишком куцее и не глубокое -- общей концепции в голове нет (что видно из моих вопросов) и из даташита не появится, думаю. Поэтому нуждаюсь в совете.
     
  20. Pavia

    Pavia Well-Known Member

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