Какого содержание оперетивной памяти перед загрузкой операционной системы? Вот что я точно знаю: 00000000h-000003FFh — Таблица векторов прерываний. ... 00007C00h-00007DFFh — Загрузчик Операционной системы. ... Где находятся прерывания bios, данные bios? Какую часть памяти трогать нельзя, а какую можно?
Zhelezka данные древние но может пригодятся Code (Text): E4. Область данных BIOSF Можно выделить три области данных BIOS: - рабочая область, которая занимает 256 байтов с абсолютного адреса 00400h; - дополнительная область данных (только в PS/2); - таблицы и данные BIOS, храняшиеся в ПЗУ. E4.1. Рабочая область данныхF E4.1.1. Описание рабочей областиF Содержимое рабочей области данных можно представить следующей схемой: Адрес Длина Содержимое ──────────────────────────────────────────────────────────────── 400h 8 Базовые адреса портов RS-232C 408h 8 Базовые адpеса поpтов пpинтеpов 410h 2 Список обоpудования ПЭВМ 412h 1 Результат POST для PC Convertible 413h 2 Размеp памяти ПЭВМ 415h 2 Состояние батаpеи PC Convertible 417h 27h Пеpвая область данных клавиатуpы 43Eh 0Bh Область данных НГМД 449h 1Еh Пеpвая область данных дисплея 467h 5 Пеpвая область системных данных 46Ch 5 Область данных таймеpа 471h 3 Втоpая область системных данных 474h 4 Область данных жесткого диска 478h 4 Значения таймаутов для пpинтеpов 47Ch 4 Значения таймаутов для RS-232C 480h 4 Втоpая область данных клавиатуpы 484h 7 Втоpая область упpавления дисплеем 48Bh 0Bh Упpавляющие данные дисководов 496h 2 Тpетья область данных клавиатуpы 498h 9 Область данных часов pеального вpемени 4A1h 7 Резеpв для сетевых адаптеpов AT 4A8h 4 Указатель на таблицы паpаметpов EGA 4ACh 44h Резеpв 4F0h 10h Область межпpогpаммной коммуникации ──────────────────────────────────────────────────────────────── Кpоме того, BIOS использует несколько байтов с абсолютного адpеса 00500h в области, котоpая тpадиционно называется "область данных ДОС". Стpуктуpа этой области данных такова: - 140 - Адрес Длина Содержимое ──────────────────────────────────────────────────────────────── 500h 1 Состояние печати экpана 501h 3 Резеpв 504h 1 Флаг фантомного диска 505h 0Bh Резеpв 510h 11h Используется интеpпpетатоpом Бейсика 521h 0Fh Резеpв 530h 3 Используется командой MODE ──────────────────────────────────────────────────────────────── E4.1.2. Содержимое рабочей областиF В этом разделе приведено детальное описание содержимого рабочей области BIOS. -400h Базовые адpеса поpтов RS-232C
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/Определение_объёма_памяти
Биосы бывают разные Более того, биосы запускают опшн ромы из девайсов, которые могут делать что угодно. Поэтому, можно быть уверенным в: - таблице адресов прерываний; - адресе бутсектора; - видеопамяти; - старших адресах перед мегабайтом, занятые, собственно, биосом. Еще инфу на этапе выполнения бутсектора можно получить по содержимому sp (стек) и некоторым вызовам BIOS (инт 12, к примеру). Для загрузчика OS этого с лихвой хватает, главное, остальное не трогать
vshemm Обычно он есть. Вообще там может быть вперемешку. Может быть и память и БИОС устройств и во все отсутствовать и то и другое. Да на этапе начальной загрузки БИОС может вызывать БИОСы устройств и может их распаковывать в базовою память если это им нужно. Поэтому в базовой памяти может оказаться мусор. int 12h просто читает значение из ячейки 413h-414h
Стек на этапе загрузки может указывать черти куда. В спецификации о нем ничего не говориться. Вот другии регистры могут ссылаться на PnP структуру.
Все верно. Я к тому, что из-за бардака нужно юзать только известные вещи, вроде хардварных (вектора, резет вектор), и более-менее стандартизированных (сервисы биоса, адрес бутсектора, настроенный стек). Иначе - будут проблемы. Хотя, если ОС использует биос, то... тут все сложнее
vshemm 1. Нужно использовать правильное железо и праельное програмное обеспечение. 2. Нужно писать драйвера. 3. бардака много, но все же есть стандарты. И их нужно использовать. Есть то что являетя стандартом дефакто. Остальное просто доводиться до ума кропотливым трудом. Если Биос то это Award и Phoenix. Если матернка то Intel. Если проц то Intel, AMD. Сеть и звук это Realtek, Intel. Потому что тут есть стандарты они открыты и задокументированны. Ничего не сложнее БИОС между прочем очень хорошо задокументирован. Правда не так жестко, как хотелось бы. Поэтому и бордака много. И компаний производителей много. Тут только тестирование и проверка.
Несомненно. Только критерий правильности очень тяжело вырабатывается в реале (вроде GX1 и всяких "RTOS"). Стандарты (даже де-факто) нужно использовать, но не всё доводится до ума кропотливым трудом (Вы представляете трудоёмкость этого процесса?). Увы, это фигня. Все зависит от задач. AMI забыли, кстати. Проблема в том, что никто этим стандартам строго не следует. Опять же, логическая цепочка верная, но трудоемкость тестирования и проверки Вы себе представляете в реале? Биос давно уже никому не нужен. Все это правильно организованный пиар. Как и "супер риалтаймовые жесткого времени ртос".
Про память ниже первого мега рассказали подробно: начиная с 500h и до значения, возвращаемого функцией BIOS int 12h в килобайтах. Выше только блоки типа 1, возвращаемые функцией BIOS int 15h/0000E820h, а потом и блоки типа 3. Довольно часто приходится наблюдать, что ПО определив объем памяти больше одного мега просто начинает использовать память с отметки 100000h. Считаю, что это не совсем корректно, т.к. "окно" под 17-м мегом может иметь разный размер и при определенных настройках существовать даже на современных системах.
Pavia написал В книге Калашникова 1) Данные различаются, может в книге вариант уже после загрузки DOS? 2) Где можно использовать для ОС и программ а где нельзя? 3) Прокоментируйте то что указано вопросами(???). 4) Можно-ли затереть биос и поставить свой из ОС и что тогда кроме таблицы векторов прерываний надо оставить?
Опять 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.
В книге Калашникова Да, извеняюсь, очень спешил с набором. Получается для использования ОС точно остаётся: 00000500-{int 12h} и 100000-...
в пределах первого мега правильно (о чем уже было сказано). Выше первого мега определять доступную память нужно с помощью функциий BIOS в порядке наличия либо int 15h/0000E820h, либо int 15h/E801h, либо int 15h/88h (см. ссылку от Pavia).
согласен, что можно ограничиться только первой функцией, о чем собственно выше и написал. Просто использование упомянутых трех функций описано в документации ACPI в виде примерного алгоритма для детекта памяти.