Вернуться   Компьютерный форум > Блоги > Базаров
Оценить эту запись

Эффективное использование памяти в DOS

Запись от Базаров размещена 15.07.2015 в 03:19

Проблема дефицита обычной памяти
Хотя многие прикладные DOS-программы научились работать с расширенной памятью и / или EMS-памятью, место в первых 640 Кбайт оперативной памяти не перестало быть крайне дефицитным ресурсом. Наоборот, оснащение компьютеров значительно расширилось, многие компьютеры стали снабжаться различными дополнительными устройствами: дисководами для компакт-дисков, стримерами, сканерами, магнитооптическими дисками и т.д., а драйверы для доступа к этим устройствам занимают память. Да и разные полезные резидентные программы - программы кэширования дисков, работы со сжатыми дисками и т.д., занимают много оперативной памяти. Между тем, разработчики прикладных программ, работающих в DOS, вовсе не собирались сажать создаваемые программы на режим жесткой экономии, ведь в расширенной памяти они могли хранить только данные, а код программы должны были держать в обычной памяти. В результате некоторые пользователи оказались перед крайне неприятным выбором: или работать с тем или иным устройством, или запускать нужную прикладную программу. Опытные пользователи выходили из положения, создавая различные настройки компьютера для разных режимов работы и перезагружая компьютер для перехода из одного режима в другой (как это делается будет описано далее). Но это не так уж удобно, да и слишком сложно для большинства пользователей.
Загрузка DOS в НМА
Первые признаки улучшения ситуации появились, когда различные независимые разработчики научились перемещать (с помощью специальных драйверов) часть кода DOS в первые 64 Кбайта расширенной памяти. Это позволило освобождать 30-40 Кбайт обычной памяти на компьютерах с процессором Intel-80286 или старше.
Диспетчеры памяти
А с появлением микропроцессоров Intel-80386 данную проблему стало возможно решить кардинально. Этот микропроцессор оснащен средствами управления оперативной памятью, с помощью которых можно назначить любому блоку физической памяти нужный логический адрес. Тем самым оказалось возможным как бы поместить блоки оперативной памяти в адреса, не используемые BIOS и контроллерами, то есть в "пустоты" между участками памяти, занятыми BIOS и контроллерами. Естественно, при этом количество расширенной памяти компьютера несколько уменьшалось (ведь общее количество физической памяти в компьютере от переназначения адресов не изменилось), но расширенная память - это значительно менее дефицитный ресурс.
Различные фирмы (Quarterdesk, Qualitas и др.) разработали так называемые диспетчеры памяти (QEMM и 386МАХ), которые реализовывали эту возможность, помещая блоки оперативной памяти в адреса верхней памяти и загружать драйверы и резидентные программы в эти блоки верхней памяти. В 1990 г. соответствующая возможность была включена и в DR DOS 5.0 фирмы Digital Research, что стало угрожать позициям фирмы Microsoft на рынке DOS. Поэтому фирма Microsoft напряглась и в 1991 г. выпустила MS DOS 5.0, в которую были включены аналогичные возможности: драйвер ЕММ386, обезпечивающий доступ к верхней памяти и команды DeviceHigh и LoadHigh, выполняющие загрузку драйверов и программ в верхнюю память. Кроме того, MS DOS 5.0 поддерживала и перемещение ядра DOS в первые 64 Кбайта расширенной памяти.
Итак, с помощью диспетчеров памяти ЕММ386 из MS DOS, QEMM, 386МАХ и др. стало возможным загружать драйверы и резидентные программы не в обычную, а в верхнюю память, тем самым освобождая столь драгоценную обычную память для прикладных программ. При этом значительно увеличился и общий объем памяти, который мог отводиться для драйверов и резидентных программ: ведь типичный объем свободных участков верхней памяти составляет от 100 до 200 Кбайт (на разных компьютерах - по разному).
Оптимизация использования памяти
Однако проблема наилучшего использования верхней памяти оказалась не такой-то простой. Ведь доступная для размещения программ и драйверов верхняя память не представляет собой один непрерывный кусок, а состоит из нескольких фрагментов (обычно называемых регионами), расположенных в "дырах" между адресами памяти, используемыми BIOS и контроллерами. Поэтому для наилучшего использования верхней памяти необходимо для каждой резидентной программы или драйвера решить, в какой регион верхней памяти лучше ее поместить (или, может быть, оставить в обычной памяти). Это совсем не простая комбинаторная задача, и часто здесь приходится рассматривать десятки вариантов в поисках наилучшего.
Ясно, что возлагать на пользователя заботу об эффективном использовании верхней памяти было бы неправильно. Пользователь должен решать свои проблемы, а не комбинаторные задачи по наилучшей укладке программ и драйверов в регионы верхней памяти. Тем более что при любом изменении конфигурации компьютера (добавлении нового контроллера, изменении версии драйвера и т.д.) эту задачу надо решать заново. Поэтому для решения этой задачи были созданы специальные программы - оптимизаторы использования памяти. Эти программы впервые появились в диспетчерах памяти независимых разработчиков (Optimize в диспетчере QUEMM фирмы Quarterdesk, Maximize в диспетчере 386МАХ фирмы Qualitas и т.д.). В MS DOS 6.0 также был включен оптимизатор MemMaker, который будет рассматриваться далее. Оптимизаторы выявляют потребности используемых драйверов и резидентных программ в оперативной памяти, определяют, как наилучшим образом можно разместить эти программы и драйверы в регионах верхней памяти и вносят все необходимые изменения в файлы конфигурации DOS - CONFIG.SYS и AUTOEXEC.BAT. Этот процесс требует минимальных усилий от пользователя и выполняется за пару минут.
Размещено в Без категории
Просмотров 869 Комментарии 0 Отправить другу ссылку на эту запись
Всего комментариев 0

Комментарии

 

Текущее время: 19:28. Часовой пояс GMT +4. Powered by vBulletin® Version 5.8.9
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.