OSDev http://osdev.su/ |
|
Virtual 8086 mode http://osdev.su/viewtopic.php?f=6&t=522 |
Страница 3 из 4 |
Автор: | DJ PhoeniX [ 04 апр 2012, 05:04 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
grindars писал(а): Я бы повесил (собственно, и вешал) эмулятор 8086 в отдельную задачу, чтобы не захламлять ядро кучей малонужных костылей для поддержки давно умершего софта. Проблема в том, что эти костыли в ядре как раз и нужны. И, по сути, только в нём |
Автор: | grindars [ 04 апр 2012, 07:18 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
Ну так пусть задача-эмулятор будет драйвером режима пользователя, а ядро пусть формирует и передает ему запросы на ввод-вывод. И вообще, зачем самому ядру понадобился BIOS? |
Автор: | valeri [ 04 апр 2012, 08:21 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
Если речь идет о накопителях, и если действительно там работа идет в 32-битном режиме, то прыжки в RM, наверное, единственный выход (тем более там нужна обработка прерываний). А для установки видеорежимов наверняка хватит эмулятора - перехватываем обращения к пространству ввода-вывода, а ось их обрабатывает. |
Автор: | Yoda [ 04 апр 2012, 10:13 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
Вот мне интересно, как решает эти вопросы Мелкософт в 64-битых системах? Сдаётся мне, что они как переходят в защищённый режим, так и забивают на BIOS INT 13h. Все остальные обращения делают только при наличии соответствующего драйвера I/O железки. |
Автор: | pavia [ 04 апр 2012, 10:27 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
XP решает так. В загрузчике, если не путаю в ntdetect. Работа идёт в RealMode использует int 13h для загрузки загрузочного драйвера жесткого (в 99,9% этот драйвер отсутствует). В случае его отсутствия прыгает между реальным и защищенным режимом, для загрузки ядра. Затем передает управление ядру которое загружает драйвера жесткого диска который грузится либо загрузочным драйвером либо прыжком в реальный режим. Как видите VM86 windows не использует. в 64 битной думаю ничего не поменялось. |
Автор: | valeri [ 04 апр 2012, 12:44 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
В Vista, 7, 8 (BOOTMGR/winload) не зависимо от x86/x64 все абсолютно так же, для загрузки ядра и первичных драйверов используются прыжки. После запуска ядра, стандартный видеодрайвер (он работает, если нет дров на видюху) использует эмулятор в HAL. |
Автор: | grindars [ 04 апр 2012, 15:00 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
valeri писал(а): После запуска ядра, стандартный видеодрайвер (он работает, если нет дров на видюху) использует эмулятор в HAL. А экспорты эмулятора вам известны? Интересно было бы на него поглядеть. |
Автор: | pavia [ 04 апр 2012, 15:59 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
HAL - уровень абстракции от железа. Другими словами прослойка в виде интерфейсов. Что такое интерфейс это указатель на функции и описание функции как то список передаваемых и принимаемых параметров. Архитектура виндоуса построена по принципу разработки сверху в низ. Драйверная система в виндоусе построенна следующим образом есть набор мини драйверов в которых описаны интерфейсы такие драйвера называются "MiniPort". Что касается видео драйвера то это "videoprt.sys" По сути это и есть частичка HAL. В виндоусе есть ещё HAL.dll в котором всякая мелочевка собрана не попавшая в другие части. Так вот универсальный видео драйвер в виндоусе называется vga.sys он вызывает функции из videoprt.sys либо заменяет на свои. В секции импорта vga.sys лежит функция VideoPortInt10 из videoprt.sys. Далее надо смотреть как там это сделано. videoprt.sys есть импорт из HAL.dll функции Ke386CallBios (WinXP) x86BiosCall (Win7). Насколько я думаю там все таки не эмуляция, а переход в реальный режим. Эмулятор у них под NTVDM заточен и там int реальные надо эмулировать в защищенном. Т.е в NTVDM вызов int 10 приводит к вызову VideoPortInt10. |
Автор: | valeri [ 04 апр 2012, 16:19 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
Я разбирался с x86BiosCall и насколько я разобрался, там как раз чистый эмулятор, без прыжков. А вот ее предшественница Ke386CallBios, по-моему прыгала. |
Автор: | Yoda [ 04 апр 2012, 17:10 ] |
Заголовок сообщения: | Re: Virtual 8086 mode |
Если исходить из теории, то прыжки действительно вызывают большую головную боль с обработкой возникших в течение работы BIOS аппаратных прерываний. Эмуляция с этой точки зрения надёжней, хотя возникает другая проблема - производительность. Ещё непонятно, до какой глубины эмулировать процессор? Ведь BIOS в принципе, может исполнять любые инструкции реального режима. А т.к. системный BIOS затачивается под конкретную систему, он совершенно не обязан ограничиваться только базовым набором инструкций 386. |
Страница 3 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |