![]() |
Кто-нибудь боролся за первые 640 кило памяти? Подскажите, что можно сотворить такого. Испробовал уже много от сторонних производителей. QEMM стоит, но Vidram запускается далеко не на всех машинах, а без него памяти маловато будет. Единственное что остается, ИМХО, это править руками конфиги. Вот и вопрос - что там особенного можно сотворить? Или в QEMM есть какие-нибудь злые настройки?
|
А сколько надо-то?
Обычно (под Win98) в config.sys: dos=high,umb device=c:\himem.sys device=c:\windows\emm386.exe ram Дальше всё что можно devicehigh В autoexec.bat всё что можно loadhigh |
mazepkstan
Для нормальной работы надо 610-620 кб _минимум_ :( Поэтому и спрашиваю. Едиственное, что можно, как мне кажется - это избавиться от всего лишнего в загрузке, и что лезет куда не надо. А вот что конкретнее - вопрос. [s]Исправлено: Cursed, 0:54 1-02-2003[/s] |
А что у тебя там вообще есть-то сейчас?
Если хочешь побольше памяти, запускай emm386 с ключом scanhigh (без слэша), но не гарантирую, что после этого будет нормально грузиться винда. В BIOS'е убери все shadow. Далее, в config.sys: fileshigh=60 fcbshigh=1 buffershigh=12 немного памяти можешь ещё получить за счёт lastdrivehigh=K Country=007,866,C:\WINDOWS\COMMAND\country.sys device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1) installhigh=C:\WINDOWS\COMMAND\mode.com con cp prepare=((866) c:\windows\command\ega.cpi) installhigh=C:\WINDOWS\COMMAND\mode.com con cp select=866 Можешь там тоже, в принципе, оставить. Из них разве что только display.sys остаётся в памяти (не уверен), остальные делают свои настройки и выгружаются. Это всё настройка кода страны и русификаторы. Если не нужны - выкинь. А вот русификатор клавиатуры installhigh=C:\WINDOWS\COMMAND\keyb.com ru,866,c:\windows\command\keybrd3.sys в памяти остаётся точно. Если хочешь полный контроль, то пиши dos=high,umb,noauto но тогда в config.sys обязательно должна быть строка device=c:\windows\ifshlp.sys иначе не будет грузиться винда (это драйвер VFAT). В autoexec.bat в этом случае можешь вообще ничего не оставлять, кроме set TEMP=C:\TEMP set TMP=C:\TEMP SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\ARC;C:\UTL;C:\VC;C:\NC Если при работе в DOS будет много обращений к винту, запусти также кэш: lh c:\windows\smartdrv.exe a b- c+ Но он откусит много памяти. Что ещё там у тебя есть? |
Yozh
fcbshigh=1, buffershigh=12 - а это зачем? В моем случае их просто нет. И зачем с high? Разве хоть что-то изменится? Ведь это управляющие параметры. Далее, если русификацию вообще выкинуть я имею в виду строки Цитата:
На данный момент у меня все то, что понаписала винда при установке, плюс параметры: В autoexec.bat: files=250 В config.sys: SET CLIPPER=F250 Плюс ко всему, установлен QEMM версии 8.0, в результате свободно всего-лишь 605 кб. Хотя, судя по всему, он в верхнюю память затолкал все, что мог. Возможно, что в винде грузится что-то еще при запуске досовой проги. Забыл посмотреть dosstart.bat - теперь до понедельника :( |
Во-первых. Вместо того чтобы гадать на кофейной гуще, выполни команду
mem /d >mem.txt и внимательно изучи содержимое файла mem.txt. Либо выполни mem /d|more и изучай то же самое прямо в окне MSDOS. Во-вторых, fsbshigh. Немного истории. MSDOS 1.0 не знала, что такое каталоги. Базовая конигурация первых IBM PC не включала жёсткий диск, потому всё пока создавалось в одном - корневом - каталоге. Для манипуляции с открываемыми файлами служили т.н. File Contol Blocks. В MSDOS 2.0 появились каталоги, а FCB сменились более гибкими структурами - File Handlers. Максимальное количество одновременно обрабатываемых FCB задаётся при помощи FCBS=x, для File Handlers - FILES=x (ну, или xxxHIGH=x, начиная с Win95 тоже возможно). Если ты не указываешь в config.sys эти параметры, система берёт по умолчанию: FILES=8, FCBS=4 (в целях совместимости неизвестно с кем). Чем это грозит? Под каждый FCB выделяется 64 байта памяти или что-то в этом роде. Т.о., при FCBS=4 ты теряешь 256 байт. Мелочь, а неприятно, правда? Ты запускаешь программы, которые открывают файлы через FCBs? Если нет, то, может, не будем тратить байты попусту? Посмотри в дампе, сколько памяти ты теряешь на FILES=250? Оно тебе столько надо? Может, ограничимся чем-нибудь вроде 100? Неужто у тебя CLIPPER будет держать открытыми сразу 250 файлов? Вот для примера дамп by default: 192 (0K) FILES=8 256 (0K) FCBS=4 10 720 (10K) BUFFERS=20 А как у тебя дело обстоит? Если запускаешь DOS-программу из винды, то зачем тебе, кстати, BUFFERS=20? У меня есть подозрение, что виндовский дисковый кэш с этими задачами справися лучше. Что касается FCBS и FCBSHIGH, то я пока тоже ничего ответить не могу. У меня винда по FCBSHIGH упорно не хочет помещать это в UMB. Будем разбираться. Из русификаторов: попробуй keyrus Добавлено: Кстати, а строка files=250, помещённая в autoexec.bat, у тебя нормально отрабатывается? Ты ничего не перепутал? |
Несколько дополнений и уточнений:
1) программа MODE резидентно не загружается, поэтому ее вовсе не требуется загружать с помощью INSTALLHIGH, а можно загрузить обычным способом в INSTALL.BAT 2) сам файл WIN.COM берет 3 Kb (или больше?) памяти, поэтому лучше блокировать его загрузку при запуске компьютера (в MSDOS.SYS писать BootGUI=0) и начинать работать в DOS, а Windows грузить при необходимости командой WIN. 3) можно написать FCBS=4,0 (кажется, под них память тогда вообще не выделитмя) 4) BUFFERS=9,256 - вполне достаточно, если используется SMARTDRV.EXE (кстати, его можно запускать с параметром /U, это позволит избавиться от модуля кеширования CD-ROM, что освободит несколько лишних Kb в UMB). 5) количество файлов вполне можно уменьшить до 40 (а то и меньше, это от конкретных условий зависит). |
И поменять стандартные кириллизаторы на что-нибудь другое --- жрут память десятками килобайт.
|
С XXXX Pro соглашусь, но лишь частично.
> 2) сам файл WIN.COM берет 3 Kb (или больше?) памяти, > поэтому лучше блокировать его загрузку при запуске > компьютера (в MSDOS.SYS писать BootGUI=0) и начинать > работать в DOS, а Windows грузить при необходимости > командой WIN. Если человек собирается работать без графического интерфейса Windows, то да. Если DOS-программы запускаются из Windows, то - однозначно нет. Дамп при BootGUI=1: ------------------------------- 00A13 80 (0K) MSDOS System Program 00A18 176 (0K) COMMAND Data 00A23 80 (0K) vmm32 Data 00A28 32 (0K) WIN Data 00A2A 96 (0K) vmm32 Data 00A30 6 944 (7K) KEYB Program 00BE2 4 688 (5K) DOSKEY Program 00D07 272 (0K) WIN Environment 00D18 3 424 (3K) WIN Program 00DEE 288 (0K) vmm32 Program 00E00 320 (0K) COMMAND Data 00E14 8 624 (8K) COMMAND Program 0102F 1 440 (1K) COMMAND Environment 01089 336 (0K) MEM Environment 0109E 90 464 (88K) MEM Program 026B4 492 736 (481K) MSDOS -- Free -- ------------------------------- Дамп при BootGUI=0, графический интерфейс запускался через win.com: ------------------------------- 00A13 80 (0K) MSDOS System Program 00A18 272 (0K) WIN Environment 00A29 112 (0K) vmm32 Data 00A30 6 944 (7K) KEYB Program 00BE2 4 688 (5K) DOSKEY Program 00D07 8 624 (8K) COMMAND Program 00F22 1 440 (1K) COMMAND Environment 00F7C 2 048 (2K) WIN Program 00FFC 4 160 (4K) vmm32 Program 01100 320 (0K) COMMAND Data 01114 5 536 (5K) COMMAND Program 0126E 1 440 (1K) COMMAND Environment 012C8 336 (0K) MEM Environment 012DD 90 464 (88K) MEM Program 028F3 483 536 (472K) MSDOS -- Free -- ------------------------------- Со всем остальным, в принципе, согласен. Про второй параметр FCBS не знал. Что касается MODE, то, разумеется, можно выполнять её и в autoexec.bat. Просто мне как-то давным-давно зачем-то потребовалось включить её именно в config.sys. И с тех пор оно так там и осталось. |
Всем спасибо за советы, как доберусь до работы - обязательно все проверю - о результатах сообщу. Насчет параметра files=250 - о его расположении вполне мог ошибиться, а вот о значении - таково требование разработчиков. Сами обалдели, но попытка его уменьшить даже до 200 - приводила к тому, что прога вылетала по ошибке в самый неподходящий момент :( Вот так.
|
В конце концов, даже FILES=250 - это не так страшно. На этом ты теряешь 14 кбайт, которые вполне можно запихнуть в UMB путём использования FILESHIGH:
------------------------------------------- Upper Memory Detail: Segment Region Total Name Type ------- ------ ---------------- ----------- -------- 0D15C 1 17 984 (18K) IO System Data 14 464 (14K) FILES=250 80 (0K) FCBS=1 1 072 (1K) BUFFERS=2 2 288 (2K) LASTDRIVE=Z 0D5C0 1 192 (0K) vmm32 Data 0D5CC 1 4 688 (5K) DOSKEY Program 0D6F1 1 37 104 (36K) vmm32 Data ------------------------------------------- Даже на моём ноутбуке они туда поместились - с учётом того, что даже с ключом highscan emm386 находит у меня только 58 кбайт Upper Memory. Успехов! |
Cursed
Цитата:
А вообще, объясни подробнее: 1) на кой тебе именно 620 кил? Какую прогу ты собираешься запустить? 2) как именно ты хочешь грузить свою супер_пупер_ресурсоёмкую_прогу - из DOC'a до загрузки Виндов или в Виндах в DOC-режиме? |
mazepkstan
Для начала - прога, сделанная под заказ давным-давно, после чего она дорабатывалась. Эти доработки привели к тому, что при выполнении некоторых операций она просто стала вываливаться по ошибке "Мало памяти". Прога эта довольно спокойно работает под ДОС 6.22 и Виндами 2000, а вот под 9X... Естественно, гружу ее по самими виндами. |
А для неё ты сделал файл имя_проги.pif?
Если да, то может в нём поправить параметры какие-нибудь? Например, на вкладке ""Память"-полный объем обычной/EMS/XMS - увеличить? |
В общем - не знаю что делать, но больше чем 610 выжать не удалось :( Даже если избавиться от QEMM, который сам съел 3kb, но все остальное загнал в верхнюю память, больше этого освободить не удалось. Вот отчет mem:
Сведения о распределении обычной памяти: Сегмент Размер Имя Тип ------- ---------------- ----------- -------- 00000 1 024 (1K) Вектор прерываний 00040 256 (0K) Область обмена ПЗУ 00050 512 (1K) Область обмена DOS 00070 1 424 (1K) IO Системные данные CON Драйвер системного устройства AUX Драйвер системного устройства PRN Драйвер системного устройства CLOCK$ Драйвер системного устройства A: - D: Драйвер системного устройства COM1 Драйвер системного устройства LPT1 Драйвер системного устройства LPT2 Драйвер системного устройства LPT3 Драйвер системного устройства CONFIG$ Драйвер системного устройства COM2 Драйвер системного устройства COM3 Драйвер системного устройства COM4 Драйвер системного устройства 000C9 5 184 (5K) MSDOS Системные данные 0020D 3 776 (4K) IO Системные данные 768 (1K) QEMM386$ Device=QEMM386 2 960 (3K) DblBuff$ Device=DBLBUFF 002F9 16 (0K) MSDOS Системная программа 002FA 80 (0K) MSDOS Системная программа 002FF 32 (0K) WIN Данные 00301 288 (0K) WIN Переменные средыДанные 00313 3 552 (3K) WIN Программа 003F1 48 (0K) vmm32 Данные 003F4 4 288 (4K) vmm32 Программа 00500 336 (0K) COMMAND Данные 00515 8 624 (8K) COMMAND Программа 00730 1 440 (1K) COMMAND Переменные средыДанные 0078A 336 (0K) MEM Переменные средыДанные 0079F 90 464 (88K) MEM Программа 01DB5 533 664 (521K) MSDOS -- Свободно -- Сведения о распределении верхней области памяти: Сегмент Область Размер Имя Тип ------- ------ ---------------- ----------- -------- 0B3FF 1 13 312 (13K) FILES Программа 0B73F 1 3 056 (3K) vmm32 Данные 0C101 2 8 320 (8K) IO Системные данные 8 288 (8K) CON Device=DISPLAY 0C309 2 336 (0K) vmm32 Данные 0C31E 2 6 944 (7K) KEYB Программа 0C4D0 2 13 024 (13K) vmm32 Данные 0C901 3 560 (1K) IO Системные данные 0C924 3 624 (1K) IFS Программа 0C94B 3 272 (0K) FCBS Программа 0C95C 3 528 (1K) WKBUFFER Программа 0C97D 3 2 304 (2K) LASTDRIV Программа 0CA0D 3 272 (0K) INSTALL Программа 0CA1E 3 105 984 (104K) vmm32 Данные 0E901 4 10 736 (10K) BUFFERS Программа 0EBA0 4 1 504 (1K) vmm32 Данные 0FC01 5 2 880 (3K) IO Системные данные 2 848 (3K) IFS$HLP$ Device=IFSHLP 0FCB5 5 3 088 (3K) STACKS Программа 0FD76 5 2 176 (2K) vmm32 Данные 0FF01 6 240 (0K) DOS-UP Программа 0FF10 6 2 368 (2K) vmm32 Данные Сведения о памяти: Тип памяти Размер Занято Свободно ---------------- ----------- ----------- ----------- Обычная 655 360 31 232 624 128 Верхняя 178 560 178 560 0 Зарезервировано 0 0 0 Память XMS 32 196 224 341 632 31 854 592 ---------------- ----------- ----------- ----------- Всего памяти: 33 030 144 551 424 32 478 720 Ниже 1 МБ: 833 920 209 792 624 128 Дескриптор Имя EMS Размер ------- -------- ------ 0 09C000 Всего отображаемой памяти (EMS): 32 571 392 (31M) Свободно отображаемой памяти (EMS): 16 777 216 (16M) Память, доступная через прерывание Int 15h: 0 (0K) Максимально допустимый размер программы: 624 112 (609K) Наибольший свободный блок верхней памяти: 0 (0K) Резидентная часть MS-DOS загружена в сегмент HMA. Версия XMS: 3.00; версия драйвера: 3.95 Версия EMS: 4.00 А если значение buffers обнулить - это как повлияет на систему? [s]Исправлено: Cursed, 21:58 5-02-2003[/s] |
Cursed
Цитата:
Как разновидность последствий доработки - в проге где-то может появиться ошибка, которая вылазиет при каких-то условиях, редко. Отследить бывает очень трудно. Хотя, если она нормально работает под DOS - сделай дамп памяти в чистом DOSе - сколько там свободно? Да, и ещё. А ошибку сэмулировать можно? Т.е. известна ли последовательность операций при работе с прогой после которых появляется ошибка нехватки памяти? |
mazepkstan
Цитата:
|
1. Попробуй найти и вписать в autoexec.bat русификатор keyrus. Тогда можно будет выкинуть все mode con, display.sys и keyb.com.
2. У тебя SCSI HDD? Если нет, то зачем DBLBUFF? Впиши в msdos.sys в раздел [Options] следующие строки: DblSpace=0 DoubleBuffer=0 DrvSpace=0 Сначала только сними с него атрибут "только чтение" Кстати, файл drvspace.bin можешь тогда вообще удалить. 3. DOS=HIGH в config.sys присутствует? 4. В config.sys проверь наличие: FCBSHIGH=1,0 Добавлено: Я бы предложил следующее построение конфигурационных файлов. ******** CONFIG.SYS ******** dos=high,umb,noauto device=C:\WINDOWS\himem.sys /testmem:off fileshigh=250 fcbshigh=1,0 buffershigh=12 stackshigh=9,256 lastdrivehigh=Z Country=007,866,C:\WINDOWS\COMMAND\country.sys device=C:\WINDOWS\emm386.exe noems verbose ram device=c:\windows\ifshlp.sys ******** AUTOEXEC.BAT ******** @ECHO OFF set TEMP=C:\TEMP set TMP=C:\TEMP SET PATH=C:\ARC;C:\UTL;C:\VC;C:\NC lh C:\UTL\keyrus.com Какой-то мизерный выигрыш это всё даёт, но он слишком мал, чтобы отвоевать даже 620 свободных килобайт. Боюсь, ты уже достиг предела. Кстати, а программа случайно не умеет работать с EMS? Тогда можно было бы ей выделить, и пусть себе юзает... |
Yozh
Цитата:
|
Цитата:
Добавлено: Она вообще под DOS, без загруженной винды, работать сможет? Тогда загружаемся с config.sys, где есть строка с emm386, но без параметра noems (в этом случае будет эмулироваться некоторое количество EMS-памяти). И проверь, сможет ли программа в этом случае запуститься и нормально работать. То же самое можешь сделать в Windows: создай для программы PIF (как ярлык), разреши в его свойствах EMS и запусти. |
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 Все остальное - Авто [s]Исправлено: Blast, 15:53 21-02-2003[/s] |
Всё зависит от того, сколько памяти отъест драйвер vmm32. Он индивидуален для каждой машины и компонуется при установке Windows.
|
Время: 01:14. |
Время: 01:14.
© OSzone.net 2001-