Войти

Показать полную графическую версию : Война за первые 640 kb памяти


Страниц : 1 [2]

Cursed
06-02-2003, 19:24
Yozh
Запустил, пока работает. Кстати, EMS по умолчанию стоял (в Windows).  Вот только что это дает?

Yozh
06-02-2003, 19:56
В начале 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, и умеет её использовать, то всё это поможет.

Cursed
06-02-2003, 20:08
Yozh
Когда нам это все ставили,  разработчики почему-то просили выключить emm386 из конфигов. Хотя если задуматься, то схема в W2k реализована скорее всего через EMS и все прекрасно работает, не вылетает и памяти хватает. Нет, все-таки я эксперимент поставлю. Огромное спасибо за просветительскую работу :oszone:

Yozh
06-02-2003, 20:11
Да нет, в NT/2000/XP как таковой DOS вообще нет. Она там просто эмулируется. Так что любое приложение может получить памяти, сколько ему нужно. В т.ч. ровно 640 кбайт нижней памяти. Там не надо так сражаться за неё, вот и всё.

Cursed
10-02-2003, 09:21
Всем спасибо за советы. К сожалению, в моей ситуации они не помогли. Как говорится - "Будем искать".

Yozh
После установки EMS в ярлыке - никаких особых изменений не последовало: т.е. как выпадало в определенных местах, так и выпадает. Решил прописать в конфигах emm386. Как результат - постоянный глюки на обработке больших объемов данных. Собственно они появились даже там, где раньше не наблюдалось. Жаль, идея была хорошая. Так что, думаю в этом направлении работать бессмысленно. Огромное спасибо за поддержку :up: :oszone:

Blast
21-02-2003, 15:52
Лично у меня свободно не меньше 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

Yozh
21-02-2003, 16:57
Всё зависит от того, сколько памяти отъест драйвер vmm32. Он индивидуален для каждой машины и компонуется при установке Windows.




© OSzone.net 2001-2012