Логическая структура памяти в реальном режиме.

Тема в разделе "WASM.BEGINNERS", создана пользователем AS25, 28 ноя 2007.

  1. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    Уважаемые воины дзена.
    Не подскажите какая логичская структура памяти после того как прошел POST когда процессор находится в реальном режиме.
    Если можно то поподробней. где находятся вектора прерывания и BIOS и что происходит если мы кешируем BIOS в BIOSe)).
    С уажением будуший воин дзена.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А что подразумевается под логической структурой памяти? В реальном режиме (и это не только сразу после POST'а) память _условно_ делится на сегменты по 64К. Адресация памяти ведется с помощью сегментных регистров и части регистров общего назначения. Подробнее об этом всем можно прочитать в учебнике по ассемблеру.

    Вектора прерываний (адреса обработчиков) располагаются с адреса 0 до адреса 1024 (0х0 - 0х400), начиная с i486 (здесь, кажется, наврал, возможно и раньше) таблицу адресов можно перенести на любой другой адрес путем изменения регистра IDTR. Где находится код самих обработчиков прерываний я точно не помню, но это можно посмотреть в справочнике Ralf Brown Interrupt List -- находится в гугле с первых строчек. Там же можно узнать многое и про остальные участки памяти и про порты.

    Состояние самого процессора при старте хорошо описано в главе 9 Intel Manual.

    У меня на этой фразе произошло заворачивание мозга :). Что имелось в виду?
     
  3. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    AS25
    Кэшировать BIOS в BIOSе невозможно ;)

    В реальном режиме карта распределения памяти такова:

    -- с физического адреса 0 до 3FF включительно находятся вектора прерываний (ровно один килобайт -- 256 векторов по 4 байта);
    -- в области 400-4FF находятся стандартные переменные BIOS;
    -- область 500-5FF вроде бы используется для каких-то BIOSовских нужд, но точно не помню, для чего имени; важно лишь, что эти 256 байт тоже заняты;

    -- с адреса 600 и до верхней границы стандартной (conventional) памяти идёт область, доступная для использования программами;
    -- с упомянутой верхней границы стандартной памяти и до 9FFFF идёт область расширенных данных BIOS (она может и отсутствовать);
    -- с адреса A0000 до BFFFF идёт видеопамять;
    -- от C0000 до EFFFF идут всякие дополнительные ПЗУ, если таковые присутствуют. Например, здесь может располагаться BIOS видеоплаты;
    -- от F0000 до FFFFF идёт ПЗУ BIOS.
     
  4. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    Спасибо за ответы.
    Насчет BIOSa когда мы входим в BIOS там в меню есть кеширование области BIOSa как я понял оно нужно что бы BIOS скопировал себя в ОЗУ тем самым повышается как бы производительность. Так же есть кеширование для BIOSa видеоадаптера и других ROMов.

    А где находится память CMOS в этой логической структуре.
    Простите за глупый вопрос.
     
  5. SII

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

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

    Я так и подумал. Наверное, я прозорливый O:) С точки зрения программ расположение BIOS в ПЗУ или в теневом ОЗУ ничем не отличается: адреса те же самые. Это "затенение" производится при поддержке аппаратуры и является аппаратно-зависимым (т.е. на разных чипсетах может быть реализовано совершенно по-разному, во всяком случае, в теории).

    А её там нет. CMOS доступна через порты ввода-вывода, а не через ячейки памяти.
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    CMOS, насколько я знаю, выполнена на отдельной микросхеме, доступ к ней осуществляется через порты 0х70/0х71.
     
  7. SII

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

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

    Именно. И, если память не изменяет, в порт 70 записывается адрес байта CMOS, а через порт 71 осуществляется его чтение или запись. Ну а проверять, не ошибаюсь ли, мне лень. Тем более что в CMOS без особой надобности лучше не забираться, у "будущего воина дЗена" есть и более насущные задачи :)
     
  8. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    А что происходит с этим метром после перехода PM.
    Как я панял таблиу векторов можно перетащить в любое место памяти.
    А вот биос там же остается?
    Эти области надо защищать или нет (указывая их в таблице дискрипотров GDT).
     
  9. Pavia

    Pavia Well-Known Member

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

    На самом деле BIOS лежит верхних адресах 4ГБ (1 00000000h) минус размер биоса (он разный бывает).
    А вот то, что лежит от 0C0000h до 0FFFFF это еще бабка на двое сказала. Будем считать что там лежит БИОС видео карты и системного БИОСа и др устройств. Хотя вполне возможно, что там лежат копии БИОСов. БИОС это ПЗУ поэтому с целью совместимости и соображений безопасности, область защищена от записи аппаратно.

    В PM предусмотрено несколько способов защиты. Разграничить области используя дескрипторы. Или сделать виртуальную память используя страничный механизм. При помощи оного можно защитить первый мегабайт.
    В этом мегабайте много важной информации, которая может понадобиться.
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Pavia
    Давно хотел спросить, а как он туда "попадает"? Т.е. MCH транслирует эти физ. адреса в адреса ПЗУ?
     
  11. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Mika0x65
    Он там физически "прописан". А в нижние адреса (в верхней части первого мегабайта) лежит какая-то его часть, также аппаратно туда спроецированная. Возможности переотображать, отключать и т.д. все сии проекции зависят от чипсета (в частности, ПЗУ могут быть "намертво" завязаны на эти адреса).

    Pavia
    Почему ж бабушка надвое? Как раз из соображений совместимости там должны лежать вполне определённые вещи. Вот можно ли их при желании изменить, поковырявшись в регистрах чипсета, -- это уже как раз к бабушке :)

    Важная информация имеется в ОЗУ и выше первого мегабайта. Чтобы определить, какие области можно затирать, а какие надо сохранять, следует попросить карту памяти у ACPI.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    Везде по разному. Пока схема такая есть физически линии адреса. Все устройства сидят на этих линиях – шина адреса.
    Первым сидит MCH он смотрит, какие адреса. В нем предусмотрено несколько дырок например:
    Видео память (A0000h-BFFFFh), BIOS, ISA hole, верхний адрес памяти Top of Used DRAM (Top of Low Used DRAM) нарикаю "PCI Hole".
    То есть выставляется запрос на обращение к некоторому адресу. MCH смотрит ага этот адрес из памяти, а этот нет. Вот которой нет – тот из дырки. Этот адрес пропускается дальше. Затем адрес хватает следующее устройство, к примеру мост ISA(LPC), он смотри его адрес и передает уже на BIOS.

    В более современных там еще и переотображение основной памяти DRAM идет на более высокие адреса.

    Top of Low Used DRAM - определяет границу памяти. Выше этой границе идет память системных устройств и плат расширения. К примеру вся(а вся ли!!!) память видео карты, BIOS, регистры сетевой карты, и тд.
    Дальше идет граница 4ГБ. Вот эта дырка много съедает около 1ГБ. Это связанно с выравниванием. Вернее просто вот чтобы линии адреса завести в устройства как есть. Верхние линии отбрасываются, тем самым получается перевод адресов в адресатное пространство устройства. Поэтому и получается, что память видео карты можно разместить по адресам кратным ее размеру. Так что поидее тут дырка равна двум размерам видео карты. Два потому что вверху лежит BIOS и мешается.
    А BIOS перестраховщик берет с запасом увеличивая до 1ГБ объем этой дырки.

    В современных компах уже 8ГБ и чтобы не терять 1ГБ придумали переотображать часть адресов DRAM за 4ГБ.
    Так как много старых PCI устройств то им нужна совместимость вот и выходит что остается дырка в диапазоне 3-4ГБ.
    Дальше идет основная память. И снова область для системных устройств.

    До сих пор для совместимости со старыми ISA устройствами придусмотренна ISA hole. Хотя если вы попробуете ее найти вы не найдете, так как по дефолту отключена.
     
  13. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    Простите безадаря за глупый вопрос...
    А что за дырки в адресах памяти???

    Сразу вспомнил анегдот:
    -Сколько стоит бублик???
    -5 рублей.
    -А дырка от бублика???
    -Ничего.
    -Тогда мне бублик вот с такой дыркой.)))

    Да и надо ли BIOS который лежит в верхних адресах защищать?
     
  14. SII

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

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

    Дырки -- это дырки :) Участки адресного пространства, в которых нет "нормальной" памяти и которые предназначены для чего-то другого (например, для ПЗУ BIOS плат расширения -- в частности, видео)

    Сам BIOS, строго говоря, вообще защищать не надо, но и писать в него тоже (всё равно бесполезно). Т.е. области памяти, занимаемые BIOS -- "мёртвые".
     
  15. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    BIOS по-умолчанию сам себя защищает (если, конечно, есть аппартаная защита)
    к примеру на интеловских чипсетах в конфигурационном адресном пространстве LPC есть регистр, который позволяет запретить доступ к BIOS для записи
    + регистр содержит аппаратный lock-бит
    если его установить, то значение регистра нельзя будет изменить (а значит и снять защиту), любая попытка изменения приведет к генерации SMI#
     
  16. Elusory Jo

    Elusory Jo New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2006
    Сообщения:
    30
    Адрес:
    Moscow
    Может пусть автор изложит свою конечную цель? Или цель просто теоретическая (что тоже очень полезно)?
     
  17. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    Цель изучение того как работает PC который стоит у нас на столе.

    Знание есть сила.

    Надо уметь заклдинать эту адскую машину что бы управлять ей.
    А без понимания как оно там работает на асме много не на заклинаешься.
    А документации по нашим РС очень мало. Спасибо что есть сайт WASM.RU там хоть что то есть и этот форум и его сообщество которое знает ответы на большинство моих глупых вопросов.

    Хоть я на асме уже очень долго заклинаю я все еще считаю себя новичком.
    Потому что чем больше я изучаю и узнаю тем больше я понимаю что я ничего не знаю.

    Щас вот в голову брякнул вопрос:
    Что происходит в РМ с прерыванием INT 10h или INT 08h?
    В реальном режиме INT 10h это видео адаптер а в РМ это ошибка сопроцесора а где видео адаптер РМ.
     
  18. SII

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

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

    В реальном режиме INT 10h -- это интерфейс с видеофункциями BIOS, а отнюдь не видеоадаптер (он с BIOSом вообще без прерываний работает, да и в нормальных ОС прерывания от него, как правило, не особо-то и нужны -- во всяком случае, без них прожить можно).

    А "ошибка сопроцессора" -- это прерывание, генерируемое самим процессором при возникновении определённого условия. К этой же группе можно отнести ещё целый склад прерываний (типа деления на нуль или нарушения защиты).

    Интел чётко описывает, для чего в её процессорах (ну а значит, и во всех совместимых -- AMD и т.д.) используются первые 32 прерывания (от 0 до 1Fh включительно) -- они как раз и предназначены для уведомления об интересных событиях в процессоре (обычно, но не всегда, об ошибках). А вот все остальные прерывания можно назначать, как заблагорассудится программисту.

    Правда, можно спросить: почему ж тогда в "процессорные" прерывания попали "непроцессорные" вещи -- сервисы BIOS (INT 10h, 13h и др.)? Ответ простой: IBM, разрабатывая первый ПК, не очень-то заботилась о соблюдении интеловских спецификаций и задействовала под свои нужды зарезервированные, но не использовавшиеся тогда прерывания, и до сих пор с целью совместимости всё это сохраняется (а обработчики соответствующих прерываний вынуждены разбираться, по какой причине они были активизированы -- то ли команда INT была выдана, то ли произошло интересное событие, то ли прерывание от внешнего устройства). При разработке же нового ПО нарушать спецификации не следует по вполне понятным причинам :)

    Следует иметь ввиду, что всё выше мною написанное -- лишь поверхностный взгляд. Если копать глубже, всё окажется где проще, а где сложнее. Но в качестве общих сведений, ИМХО, сгодится :)
     
  19. AS25

    AS25 New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    28
    Адрес:
    Russia
    Простите за ошибку я это и подразумевал.

    Но значит видеофункции BIOS видео даптера в РМ можно забыть. Так как на этом прерывании в РМ сидит шлюз ошибки соопроцесора.
     
  20. SII

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

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

    В защищённом режиме функции BIOS вообще недоступны. Точней, некоторые через известное место вызвать всё-таки можно, но в первом приближении можно считать, что их нет вовсе.