DOS Extender

Материал из Old-Games.RU Wiki
(перенаправлено с «DOS-расширитель»)
Перейти к: навигация, поиск

DOS Extender, расширитель DOS — особая программа для DOS, позволяющая обходить архитектурные ограничения, наложенные спецификацией IBM PC, для предоставления программам дополнительных ресурсов, недоступных при традиционном подходе к написанию программ.

Исторический экскурс

При разработке первых спецификаций IBM PC подразумевалось, что максимальный объем ОЗУ у любого компьютера не может превышать 1 Мб. Эта цифра бралась не из потолка, а из реальных технических ограничений центрального процессора системы. Intel 8088 мог адресовать только 20 адресных линий, отсюда 220 = 1 Мб. На деле же пользователю было доступно еще меньше. Согласно тем же спецификациям, вся ОЗУ делилась на 16 сегментов по 64 Кб. Первые десять сегментов общим объемом в 640 Кб выделялись ОС и пользователю. Эти первые 10 сегментов называются «основной памятью» (conventional memory). Оставшиеся 384 Кб или «верхнюю память» (upper memory) занимали различные аппаратные устройства компьютера (видеопамять EGA/MGA/CGA, BIOS). Помните знаменитое «640K хватит всем»? Вот отсюда оно и пришло. На момент создания IBM PC так оно и было, и Билл Гейтс (если он и говорил эти слова) мог высказывать подобные заявления. Память была дорогая, программы - неприхотливы и экономили каждый байт, что еще нужно было от скромного персонального компьютера, созданного для офисной работы? С развитием платформы появлялись разные ухищрения для выделения дополнительной памяти - загрузка DOS в верхнюю память, выделение сегментов из верхней памяти за счет неиспользуемой части видеопамяти. Но такие техники подчас вносили серьезные ограничения в режим работы компьютера, например при выделении видеопамяти оставался доступным только CGA режим. Некоторые аппаратные блоки управления памятью могли выделять 952 Кб, практически предел для архитектуры, однако для работы в этом режиме нужные программы частенько необходимо было адаптировать силами разработчиков программ. Эта «дыра» между 640 и 1024 Кбайт по-прежнему остается недоступной даже на современных компьютерах как дань совместимости.

Но прогресс не стоял на месте, Intel 8088 сменил Intel 80286, который, являясь по сути 16-битным процессором, мог уже адресовать по 24-разрядной шине 224 = 16 Мб физической памяти. Однако нужно было что-то делать со всеми теми программами, которые не могли работать с такими адресами. Были разработаны так называемый «реальный» и «защищенный» режим, реализующие работу программ в среде 8088 процессора (в которых оставалось ограничение в 1 Мб) и в среде 80286 (с доступом к дополнительной памяти). Не решив по сути проблему рационального использования памяти, новый процессор добавил дополнительную проблему совместимости.

Появившийся позднее 32-битный Intel 80386 пошел по схожему пути, но при его разработке учли и устранили многие архитектурные просчеты, допущенные в ранних моделях. Теперь можно было адресовать 232 = 4 Гб памяти, предел, который оставался недостижимым долгое время. Обновленный лейтмотив «4G хватит всем» снова притупил на время родовой порок архитектуры x86. Про проблему «барьера 3 Gb» не задумывались вплоть до 2000-х годов...

Итак, традиционная DOS без дополнительных инструментов не позволяет пользоваться памятью сверх 640 Кб, однако компьютерные игры, традиционно самые требовательные программы для компьютера, требуют дополнительных ресурсов для своей работы. Чтобы решить эту проблему, были разработаны DOS extender'ы или расширители DOS.

Суть работы

Расширитель DOS обеспечивает прозрачную работу программы, выполняемой в защищенном режиме, с операционной системой, запущенной в реальном режиме. Ведь по сути, при традиционных условиях большинство функций ОС работает в реальном режиме и соответственно требует адресации в основной памяти, ограниченной 640 Кб. Расширитель транслирует вызовы программы в основной режим и обеспечивает обратное преобразование в защищенный, попутно стараясь при этом рационально использовать дорогостоящие системные прерывания, затрагивающие дисковый ввод-вывод, видеовывод и работу с периферией. Именно поэтому нередко можно наблюдать картину, что с расширителем программа начинает работать быстрее. Фактически расширитель берет на себя ряд важных системных операций, превращаясь в мини-ОС внутри DOS.

Впервые расширители DOS появились с появлением Intel 80286 и офисных пакетов, требующих большие объемы памяти для вычислений. Однако наибольшее применение расширители получили в играх. Было разработано два вида управления памятью - интерфейсы Virtual Control Program Interface (VCPI) и DOS Protected Mode Interface (DPMI). VCPI был практически полностью вытеснен DPMI, стандартом, разработанным Microsoft. DPMI используется и поныне - в эмуляторе DOS от Microsoft, входящем в Windows.

Среди множества расширителей, разработанных с 1980-х годов, наибольшую популярность приобрело семейство DOS/4G, DOS/4GW и DOS/16 от Tenberry Software. DOS/4GW можно встретить практически в каждой игре для DOS, разработанной после 1991 года. Однако он подвержен различным недостаткам, которые остались со времен выхода последней версии расширителя. Более поздний DOS/32A решает большинство этих проблем, к тому же работает эффективнее и надежнее. В комплект DOS/32A входят утилиты, которые позволяют заменить DOS/4GW.