Война за первые 640 kb памяти

Аватара пользователя
Yozh

Re: Война за первые 640 kb памяти

Сообщение Yozh »

Цитата:



А как это можно определить?







Добавлено:



Она вообще под DOS, без загруженной винды, работать сможет?

Тогда загружаемся с config.sys, где есть строка с emm386, но без параметра noems (в этом случае будет эмулироваться некоторое количество EMS-памяти). И проверь, сможет ли программа в этом случае запуститься и нормально работать. То же самое можешь сделать в Windows: создай для программы PIF (как ярлык), разреши в его свойствах EMS и запусти.
Аватара пользователя
Cursed

Re: Война за первые 640 kb памяти

Сообщение Cursed »

В начале 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

Re: Война за первые 640 kb памяти

Сообщение Cursed »

Yozh

Когда нам это все ставили,  разработчики почему-то просили выключить emm386 из конфигов. Хотя если задуматься, то схема в W2k реализована скорее всего через EMS и все прекрасно работает, не вылетает и памяти хватает. Нет, все-таки я эксперимент поставлю. Огромное спасибо за просветительскую работу Изображение
Аватара пользователя
Cursed

Re: Война за первые 640 kb памяти

Сообщение Cursed »

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

Re: Война за первые 640 kb памяти

Сообщение Yozh »

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



Yozh

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

Re: Война за первые 640 kb памяти

Сообщение Blast »

Лично у меня свободно не меньше 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

Все остальное - Авто



[s]Исправлено: Blast, 15:53 21-02-2003[/s]
Аватара пользователя
Yozh

Re: Война за первые 640 kb памяти

Сообщение Yozh »

Всё зависит от того, сколько памяти отъест драйвер vmm32. Он индивидуален для каждой машины и компонуется при установке Windows.
Ответить

Вернуться в «Microsoft Windows 95/98/Me (архив)»