Показать полную графическую версию : Война за первые 640 kb памяти
Yozh
Запустил, пока работает. Кстати, EMS по умолчанию стоял (в Windows). Вот только что это дает?
В начале 80-х, когда ещё не был разработан стандарт XMS (eXtended Memory Specification), но процессоры Intel (8086 и 8088) в реальном режиме (а защищённый ещё только проектировался) могли адресовать не более 1 Мб памяти. А многим уже хотелось больше.
Был придуман трюк под названием EMS - Expanded Memory Specification. В компьютер вставлялась плата расширения памяти, доступ к которой обеспечивался через окна в обычной, адресуемой, памяти куда её куски и отображались (её второе название - отображаемая). Эта спецификация быстро стала стандартом де-факто и довольно долго не сдавала позиции, несмотря на появление защищённого режима и пр. Таким образом можно адресовать не более 32 мегабайт памяти.
Стандарт EMS позволял программистам вырваться за пределы ограничения в 640 мегабайт, хоть и довольно неудобным способом. Очень многие среды программирования (в частности, TurboPascal) поддерживали программирование EMS.
В MSDOS драйвером EMS является emm386.exe. При этом часть расширенной (XMS) памяти просто будет использоваться как EMS-память (эмуляция - скажем так). Он же даёт возможность грузить программы и драйвера в UMB при помощи devicehigh и loadhigh (lh) (ну, и ещё одна функция была, но она сейчас неактуальна). Параметр noems запрещает поддержку EMS, оставляя в силе devicehigh и lh. Зачем он нужен? Как уже было сказано, EMS - память отображаемая. Т.е. для работы с ней надо часть обычной памяти отвести под "окна". А зачем транжирить драгоценную conventional memory, если EMS не используем?
Если был использован ключ noems, Win98 и в свойствах PIF'а (ярлыка) не позволит выделить программе EMS.
Если твоя программа знает, что такое EMS, и умеет её использовать, то всё это поможет.
Yozh
Когда нам это все ставили, разработчики почему-то просили выключить emm386 из конфигов. Хотя если задуматься, то схема в W2k реализована скорее всего через EMS и все прекрасно работает, не вылетает и памяти хватает. Нет, все-таки я эксперимент поставлю. Огромное спасибо за просветительскую работу :oszone:
Да нет, в NT/2000/XP как таковой DOS вообще нет. Она там просто эмулируется. Так что любое приложение может получить памяти, сколько ему нужно. В т.ч. ровно 640 кбайт нижней памяти. Там не надо так сражаться за неё, вот и всё.
Всем спасибо за советы. К сожалению, в моей ситуации они не помогли. Как говорится - "Будем искать".
Yozh
После установки EMS в ярлыке - никаких особых изменений не последовало: т.е. как выпадало в определенных местах, так и выпадает. Решил прописать в конфигах emm386. Как результат - постоянный глюки на обработке больших объемов данных. Собственно они появились даже там, где раньше не наблюдалось. Жаль, идея была хорошая. Так что, думаю в этом направлении работать бессмысленно. Огромное спасибо за поддержку :up: :oszone:
Лично у меня свободно не меньше 620 (на большом количестве машин), а вот содержимое файлов:
config.sys
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICEHIGH=C:\WINDOWS\EMM386.EXE NOEMS
dos=high,umb
FILESHIGH=120
devicehigh=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys
autoexec.bat
lh mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
lh mode con codepage select=866
lh keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys
И на ярлыке программы в закладке "память":
Переменные среды - 4096
Дополнительная(XMS)память - 8192
Все остальное - Авто
Исправлено: Blast, 15:53 21-02-2003
Всё зависит от того, сколько памяти отъест драйвер vmm32. Он индивидуален для каждой машины и компонуется при установке Windows.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.