Seymour
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Kirill666 Цитата: Много памяти - нынче не проблемма для 98, если знать матчасть, и руки не из Ж... | Не знаю откуда у меня растут руки, но когда я начал разбираться с этой проблемой реально голова пошла кругом. Я то думал, что все уже давно решено, а тут оказывается полная неразбериха. В общем, давайте определимся все таки с чем мы имеем дело и как с этим бороться. Начнем с того, что глюки с памятью в Windows 98 бывают трех видов: 1. Система не грузится с сообщением о нехватке памяти или без оного (KB184447). Виноват драйвер VMM.VXD, тупо не умеющий работать с большими объемами оперативки. Лечится ограничением в System.ini значения параметра MaxPhysPage 2. Система грузится, но не запускаются DOS приложения (KB253912). Виноват драйвер VCACHE.VXD, выделяющий больше пространства под кэш, чем нужно. Лечится ограничением в System.ini значения параметра MaxFileCache 3. Систему не по детски плющит при объеме памяти более 1.5 Гб (KB304943). Виноват драйвер VCACHE.VXD, неправильно распределяющий кэш между адресами памяти. В деле также замешан драйвер HIMEM.SYS, т.к. именно он сообщает Windows при загрузке информацию о кол-ве установленной памяти. -> в топку! Читайте матчасть, люди, чтоб не повторять моих ошибок! (хотя без ста грамм там сразу разобраться сложно) Итак, начнем с того, что память в винде делится на две части: физическую и виртуальную. Физическая это та, что установлена в системном блоке, а виртуальная это грубо говоря физическая память + файл подкачки общим объемом в 4 Гб. Первые 2 Гб виртуальной памяти отводятся под программы, третий гигабайт под программы и системные файлы, а четвертый (C0000000-FFFFFFFF), из-за которого и весь сыр бор под программы, системные файлы и самое важное дисковый кэш, железяки, работающие с памятью напрямую (видеокарты, тв-тюнеры и прочее) и DOS. Код: Схема распределения адресного пространства в 4-ом гигабайте виртуальной памяти: 3Gb 3.5Gb 4Gb |----------------------------------------------|----------------------------------------------| <--------------------------------------------><---------------------------------><-------> VCACHE 500Mb (RAM 512Mb) HARDWARE+DOS НЕ СУТЬ <---------------------------------------------------------------------------> 800Mb (RAM 1Gb < ) | Для дискового кэша выделяется адресное пространство, примерно равное объему физической памяти в зоне от 3 до 3.5 Гб. Зона от 3.5 до 4 Гб (в стандартных конфигурациях) отдается железякам и всему остальному, поэтому при объеме физической памяти в 512 Мб конфликтов не происходит. А вот когда в системе установлено больше 512 Мб, менеджер виртуальной памяти (VMM) при загрузке резервирует слишком большое адресное пространство для дискового кэша, которому разработчики отвели лимит в 800 Мб, и эти 800 Мб кэша (или чуть меньше при объемах памяти < 768 Мб) занимают почти весь 4-ый гигабайт виртуальной памяти, практически не оставляя места для железяк, драйверов и подсистемы DOS. Проблема осложняется тем, что кэш плюс ко всему занимает адресное пространство, закрепленное на аппаратном уровне за видеокартами и другими устройствами, вызывая конфликты. Это происходит потому, что инициализация памяти и распределение адресного пространства драйвером VMM выполняются до загрузки графической подсистемы. Кроме того, несмотря на то, что формально Windows 98 поддерживает объемы памяти до 2 Гб, реальный объем памяти с которым она может работать ограничен 1164 мегабайтами, поэтому на системах с большим количеством памяти, без дополнительной настройки нормальная работа Windows невозможна. В результате Windows: 1. Не загружается совсем 2. Загружается, но при попытке запуска DOS программ или других программ, находящихся в 4-ом гигабайте выдает сообщение о нехватке памяти 3. Зависает или ведет себя странным образом из-за конфликтов с аппаратурой Решение: 1. Первый метод заключается в ограничении памяти и кэша с помощью параметров MaxPhysPage/MaxFileCache в файле System.ini по официальной рекомендации от Microsoft. Зачем это нужно? Кэш ограничивается для того, чтобы исключить возможные конфликты с аппаратурой и освободить память для DOS приложений. Адресного пространства при этом он будет занимать столько же, сколько и раньше, поскольку VMM драйвер не учитывает при резервировании адресного пространства под кэш параметр MaxFileCache, но реально использоваться будет только та часть кэша, до которой мы его ограничим, а неиспользуемая (хоть и зарезервированная под кэш) часть адресного пространства отойдет в распоряжение ее законным владельцам - аппаратуре, DOS приложениям и другим системным компонентам, на нее претендующим. На системах с памятью до 1 Гб (а если быть точнее до 1164 Мб) этого параметра может оказаться вполне достаточно, но вот когда памяти больше 1 Гб, необходимо также использовать параметр MaxPhysPage, в противном случае система просто не сможет загрузиться. Практические рекомендации по установке этих параметров можно найти в статьях базы знаний Microsoft, в конце матчасти и в следующем посте этой темы, здесь отмечу только несколько моментов: во-первых максимальный размер памяти который можно выставить для параметра MaxPhysPage - 1164 Мб (48C00); вместо ручной правки этого параметра через System.ini можно использовать программу msconfig.exe (вкладка "Дополнительно", пункт "Ограничить память до"); параметр MaxFileCache нужно устанавливать не от балды, а в строгом соответствии с конфигурацией оборудования, но не более 512 Мб и только после установки всех драйверов (до установки можно ограничиться стандартным значением в 256 Мб); перед установкой параметра MaxFileCache можно попытаться освободить немного адресов, занимаемых аппаратурой, уменьшив значение параметра "AGP Aperture Size" в BIOS (но не более чем до 32 Мб). Также есть информация, что этот метод не работает в SafeMode, т.к. в нем игнорируются настройки из System.ini, соответственно, если нужен SafeMode нужно искать другое решение. Вместо изменения параметра MaxFileCache можно использовать Unofficial Windows 98 SE Out Of Memory Errors VCACHE.VXD 4.10.2223 Fix aka VCACHE Fix Attempt by Xeno86. Этот патч заставляет драйвер VCACHE.VXD самостоятельно ограничивать размер кэша до 384 Мб, избавляя от необходимости правки файла System.ini, но на некоторых нестандартных конфигурациях он может оказаться неэффективным. В связке с модифицированными himem драйверами (о которых ниже) патч может использоваться для обеспечения нормальной работы в SafeMode. Оригинальный файл VCACHE.VXD можно пропатчить до нужного ограничения и самостоятельно, используя таблицу из 5-го пункта в следующем посте (подробнее) Необходимо отметить, что даже после выполнения всех рекомендуемых настроек по ограничению памяти и кэша с помощью этого метода, стабильная работа системы не гарантируется, поскольку драйвером VMM, несмотря на видимые ограничения, все равно производятся периодические обращения в скрытую часть памяти (так называемый "глюк VMM"). Особенно это касается систем с памятью больше 1 Гб, причем количество глюков возрастает пропорционально приросту памяти. Можно попытаться это исправить, экспериментируя с различными значениями параметра MaxPhysPage (хотя какой-то определенной логики в подборе этого параметра нет), но как правило полностью устранить все глюки не удается, поэтому для систем с большими объемами памяти рекомендуется использовать альтернативные методы. 2. Второй метод (самый перспективный, но и самый радикальный) состоит в пропатчивании файлов VMM.VXD и VCACHE.VXD, т.е. в данном случае делается попытка устранить проблему на корню. Собственно таких патчей на данный момент существует всего один - WINDOWS 98/SE/ME RAM LIMITATION PATCH by Rudolph R. Loew. Он решает проблему сразу и полностью - не нужно делать никаких исправлений в System.ini и максимальное кол-во доступной памяти составляет целых 3 гигабайта, что для Windows 98 более чем предостаточно. С проблемой нестабильной работы на системах с памятью больше 1 Гб ("глюком VMM") патч также справляется, но не всегда, есть довольно много отзывов от людей у которых все равно возникают те или иные глюки при его использовании, так что тут уже как повезет. Обязательным условием при использовании патча является удаление из файла System.ini параметра MaxPhysPage (см. пункт 2 в след. посте). Также не будет лишним подправить версии патченных файлов на единичку вверх, чтобы при установке пакетов обновлений, наподобие MDCU, эти файлы не затирались их оригинальными непатченными копиями (см. пункт 8 в след. посте, подробнее) Недостатком этого патча является во-первых то, что он платный, а во-вторых изменения, которые были внесены автором в эти файлы потенциально могут негативно сказаться на работе системы в целом. 3. Третий метод заключается в ограничении кол-ва памяти, сообщаемого Windows драйвером HIMEM.SYS. Его можно назвать самым надежным, т.к. он позволяет "спрятать" от Windows лишнюю память, как если бы вы вынули лишние планки из системного блока и соответственно исключить все возможные конфликты и глюки. Собственно сам драйвер HIMEM.SYS модифицировать нельзя или пока никто этого не сделал, поэтому вместо него используются альтернативные драйвера похожей функциональности. Мне известны драйвера Win9x Memory Burn Driver aka BURNMEM от SweetLow (отличается от остальных тем, что выполняет нужные твики на уровне BIOS, еще до загрузки HIMEM.SYS), XMGR Special Build 512 Mb Limit aka LIMEM от MERCURY127 (уже есть новая версия) и HimemX by Japheth (with IO.SYS Patch for SafeMode by xrayer). Они позволяют задать любой объем памяти, что может помочь при работе с памятью больше 1 Гб. Этот метод также рекомендуется использовать при первичной установке Windows (см. пункт 3 в след. посте) Недостатков у этого метода два: во-первых меньшее кол-во доступной памяти, чем при использовании других методов и во-вторых потеря функциональности стандартного драйвера HIMEM.SYS (кроме варианта с использованием драйвера BURNMEM), на чем это может отразиться на практике неизвестно. P.S. Спасибо Kirill666 за помощь при подготовке инструкции. P.P.S. Оффлайн вариант инструкции со всеми указанными патчами берем в варезнике. То же, но без RAM LIMITATION PATCH качаем отсюда или отсюда. Сводный топик по проблеме на msfn.org | Всего записей: 1089 | Зарегистр. 07-12-2006 | Отправлено: 01:09 02-04-2009 | Исправлено: Seymour, 16:41 11-08-2009 |
|