Содержание оперетивной памяти.

Тема в разделе "WASM.OS.DEVEL", создана пользователем Zhelezka, 21 дек 2008.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Какого содержание оперетивной памяти перед загрузкой операционной системы?
    Вот что я точно знаю:
    00000000h-000003FFh — Таблица векторов прерываний.
    ...
    00007C00h-00007DFFh — Загрузчик Операционной системы.
    ...

    Где находятся прерывания bios, данные bios?
    Какую часть памяти трогать нельзя, а какую можно?
     
  2. SadKo

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

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

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Zhelezka
    данные древние но может пригодятся :)
    Код (Text):
    1. E4. Область данных BIOSF
    2.  
    3.       Можно выделить три области данных BIOS:
    4.  
    5.       -   рабочая  область,   которая  занимает   256  байтов   с
    6.  абсолютного адреса 00400h;
    7.  
    8.       - дополнительная область данных (только в PS/2);
    9.  
    10.       - таблицы и данные BIOS, храняшиеся в ПЗУ.
    11.  
    12.                   E4.1. Рабочая область данныхF
    13.  
    14.       E4.1.1. Описание рабочей областиF
    15.  
    16.       Содержимое   рабочей  области   данных  можно   представить
    17.  следующей схемой:
    18.  
    19.  Адрес  Длина   Содержимое
    20.  ────────────────────────────────────────────────────────────────
    21.  400h     8     Базовые адреса портов RS-232C
    22.  408h     8     Базовые адpеса поpтов пpинтеpов
    23.  410h     2     Список обоpудования ПЭВМ
    24.  412h     1     Результат POST для PC Convertible
    25.  413h     2     Размеp памяти ПЭВМ
    26.  415h     2     Состояние батаpеи PC Convertible
    27.  417h    27h    Пеpвая область данных клавиатуpы
    28.  43Eh    0Bh    Область данных НГМД
    29.  449h    1Еh    Пеpвая область данных дисплея
    30.  467h     5     Пеpвая область системных данных
    31.  46Ch     5     Область данных таймеpа
    32.  471h     3     Втоpая область системных данных
    33.  474h     4     Область данных жесткого диска
    34.  478h     4     Значения таймаутов для пpинтеpов
    35.  47Ch     4     Значения таймаутов для RS-232C
    36.  480h     4     Втоpая область данных клавиатуpы
    37.  484h     7     Втоpая область упpавления дисплеем
    38.  48Bh    0Bh    Упpавляющие данные дисководов
    39.  496h     2     Тpетья область данных клавиатуpы
    40.  498h     9     Область данных часов pеального вpемени
    41.  4A1h     7     Резеpв для сетевых адаптеpов AT
    42.  4A8h     4     Указатель на таблицы паpаметpов EGA
    43.  4ACh    44h    Резеpв
    44.  4F0h    10h    Область межпpогpаммной коммуникации
    45.  ────────────────────────────────────────────────────────────────
    46.  
    47.       Кpоме того, BIOS использует несколько байтов с  абсолютного
    48.  адpеса 00500h в области, котоpая тpадиционно называется "область
    49.  данных ДОС". Стpуктуpа этой области данных такова:
    50.  
    51.  
    52.  
    53.  
    54.                             - 140 -
    55.  
    56.  Адрес  Длина   Содержимое
    57.  ────────────────────────────────────────────────────────────────
    58.  500h     1     Состояние печати экpана
    59.  501h     3     Резеpв
    60.  504h     1     Флаг фантомного диска
    61.  505h    0Bh    Резеpв
    62.  510h    11h    Используется интеpпpетатоpом Бейсика
    63.  521h    0Fh    Резеpв
    64.  530h     3     Используется командой MODE
    65.  ────────────────────────────────────────────────────────────────
    66.  
    67.       E4.1.2. Содержимое рабочей областиF
    68.  
    69.       В  этом  разделе  приведено  детальное описание содержимого
    70.  рабочей области BIOS.
    71.  
    72.  -400h   Базовые адpеса поpтов RS-232C
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    E0000-F0000 биос
    С0000-CFFFF видео биос
    400-4FF переенные биоса есть слух что до 504
    500-5FF дос использует для своих переменных
    9FFFF - верхняя граница Base Memory.
    Base Memory записан в ячейки 413h-414h Base Memory size (в килобайтах)


    Base Memory-9FFFF либы биос отхавал, либо бут вирус. Или просто у нас очень старый компьютер у которого менее 640КБ на борту. Либы это ОС захавола.

    Также дублируется в CMOS. В CMOS зашит объем физически присутсвующей памяти. Сейчас это не актуально так как компьютер с менее чем 640кб не найти.

    http://wiki.osdev.ru/index.php/Оперативная_память
    http://wiki.osdev.ru/index.php/Определение_объёма_памяти
     
  5. vshemm

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Биосы бывают разные :) Более того, биосы запускают опшн ромы из девайсов, которые могут делать что угодно. Поэтому, можно быть уверенным в:
    - таблице адресов прерываний;
    - адресе бутсектора;
    - видеопамяти;
    - старших адресах перед мегабайтом, занятые, собственно, биосом.
    Еще инфу на этапе выполнения бутсектора можно получить по содержимому sp (стек) и некоторым вызовам BIOS (инт 12, к примеру).
    Для загрузчика OS этого с лихвой хватает, главное, остальное не трогать :)
     
  6. vshemm

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Видеобиоса может и не быть.
     
  7. Pavia

    Pavia Well-Known Member

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

    int 12h просто читает значение из ячейки 413h-414h
     
  8. Pavia

    Pavia Well-Known Member

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

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Все верно. Я к тому, что из-за бардака нужно юзать только известные вещи, вроде хардварных (вектора, резет вектор), и более-менее стандартизированных (сервисы биоса, адрес бутсектора, настроенный стек). Иначе - будут проблемы.
    Хотя, если ОС использует биос, то... тут все сложнее :)
     
  10. vshemm

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Да, со стеком я погорячился, он может быть и не настроенным.
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    vshemm
    1. Нужно использовать правильное железо и праельное програмное обеспечение. :)
    2. Нужно писать драйвера.
    3.
    бардака много, но все же есть стандарты. И их нужно использовать. Есть то что являетя стандартом дефакто. Остальное просто доводиться до ума кропотливым трудом.

    Если Биос то это Award и Phoenix. Если матернка то Intel. Если проц то Intel, AMD. Сеть и звук это Realtek, Intel.
    Потому что тут есть стандарты они открыты и задокументированны.

    Ничего не сложнее БИОС между прочем очень хорошо задокументирован. Правда не так жестко, как хотелось бы. Поэтому и бордака много. И компаний производителей много. Тут только тестирование и проверка.
     
  12. vshemm

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Несомненно. Только критерий правильности очень тяжело вырабатывается в реале (вроде GX1 и всяких "RTOS").
    Стандарты (даже де-факто) нужно использовать, но не всё доводится до ума кропотливым трудом (Вы представляете трудоёмкость этого процесса?).
    Увы, это фигня. Все зависит от задач. AMI забыли, кстати.
    Проблема в том, что никто этим стандартам строго не следует.
    Опять же, логическая цепочка верная, но трудоемкость тестирования и проверки Вы себе представляете в реале?
    Биос давно уже никому не нужен. Все это правильно организованный пиар.
    Как и "супер риалтаймовые жесткого времени ртос".
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Про память ниже первого мега рассказали подробно: начиная с 500h и до значения, возвращаемого функцией BIOS int 12h в килобайтах. Выше только блоки типа 1, возвращаемые функцией BIOS int 15h/0000E820h, а потом и блоки типа 3. Довольно часто приходится наблюдать, что ПО определив объем памяти больше одного мега просто начинает использовать память с отметки 100000h. Считаю, что это не совсем корректно, т.к. "окно" под 17-м мегом может иметь разный размер и при определенных настройках существовать даже на современных системах.
     
  14. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Pavia написал
    В книге Калашникова
    1) Данные различаются, может в книге вариант уже после загрузки DOS?
    2) Где можно использовать для ОС и программ а где нельзя?
    3) Прокоментируйте то что указано вопросами(???).
    4) Можно-ли затереть биос и поставить свой из ОС и что тогда кроме таблицы векторов прерываний надо оставить?
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Опять 25. Таблица содержит некоторые неточности, к тому же ты ее невнимательно набрал(а):
    400h-4FFh - область данных BIOS - переменные, которыми пользуется BIOS во время своей работы, в том числе и после первичной инициализации.
    9FC00h-9FFFFh - может быть и больше! - расширенная (дополнительная) область данных BIOS, нижнюю границу которой как раз и можно получить с помощью int 12h.
    A0000h-BFFFFh - видеопамять - сейчас обычно используется только для текстовых видеорежимов (по крайней мере пока не запущен "родной" драйвер защищенного режима) - лично я использую это "окно" и в защищенном режиме (конечно при условии, что видеоадаптер является vga-совместимым).
    C0000h-FFFFFh - системная BIOS и модули-расширения BIOS (модули-расширения - постоянная память различных устройств, которая встраивается в этот диапазон, а затем детектится и инициализируется системной BIOS).
    В диапазон A0000h-FFFFFh могут вклиниваться участки ОЗУ, но от этого нет почти никакой пользы. Постоянная память может быть "теневой" (считай ОЗУ, защищенное от записи) или выполненной в виде ПЗУ, отраженной в пространство памяти. Короче в обычном режиме работы записать туда ничего не получится. Сохранять что-то в этом диапазоне можно только в видеопамяти и то только в той ее части, которую ты подключил или это за тебя сделала BIOS (это делается путем программировния видеоадаптера).

    В принципе в защищенном режиме, если работа BIOS полностью остановлена, то можно использовать и IVT, и BDA, и EBDA, но я бы не советовал это делать, потому что BIOS может работать даже тогда, когда это казалось бы невозможно, например, в режиме SMM.
     
  16. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    В книге Калашникова
    Да, извеняюсь, очень спешил с набором.
    Получается для использования ОС точно остаётся: 00000500-{int 12h} и 100000-...
     
  17. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    в пределах первого мега правильно (о чем уже было сказано). Выше первого мега определять доступную память нужно с помощью функциий BIOS в порядке наличия либо int 15h/0000E820h, либо int 15h/E801h, либо int 15h/88h (см. ссылку от Pavia).
     
  18. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    у меня на 486 е820 прокатывает (486 такой что 21 бит в рег флагов не установить)
     
  19. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    согласен, что можно ограничиться только первой функцией, о чем собственно выше и написал. Просто использование упомянутых трех функций описано в документации ACPI в виде примерного алгоритма для детекта памяти.
     
  20. KKorolev

    KKorolev New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2011
    Сообщения:
    3
    Здесь все хорошо описано http://mini-soft.ru/book/assem/glava4.php