Этот раздел вряд ли станет частым
гостем в рассылке. В него я собираюсь помещать диалоги, состоявшиеся между
пользователями и разработчиками Windows и Office. Это не стенограммы,
наоборот, как правило, вы будете читать обработанную мной компиляцию
нескольких бесед (заочных). Однако, отсебятины не будет и выдергивать
цитаты из контекста я себе не позволю. В качестве ответов будут
использоваться только информация, непосредственно переданная
разработчиками (отнюдь не службой поддержки).
Итак, беседа первая (1998
год).
Файл подкачки
Пользователь Windows 98: -
многих пользователей смущает необычное поведение файла подкачки по
сравнению с Windows 95. Например, его увеличенный размер и повышенная
активность. Не мог бы кто-нибудь дать квалифицированные разъяснения?
Разработчик: - чтобы уменьшить количество случаев, когда во время
активной работы системы необходимо изменить размер файла подкачки, мы
внесли два изменения по сравнению с Windows 95.
1. Файл подкачки
увеличивается ступенями не по 512 КБ, а по 4 МБ. Размер приложений за
последние годы сильно вырос, и мы не однажды наблюдали, как во время
загрузки всего лишь одного приложения файл подкачки увеличивался
неоднократно. Приращение файла подкачки ступенями по 4 МБ также уменьшает
фрагментированность файла подкачки (система старается сделать непрерывным
каждый 4 МБ кусок, а не 512 КБ, как раньше). А это способствует и
повышению быстродействия.
2. Если после закрытия одного или нескольких приложений размер файла
подкачки оказывается больше необходимого в данный момент, система ждет 2
минуты, а не 45 секунд, прежде чем приступить к уменьшению размера файла.
Ведь весьма возможно, что пользователь закрыл приложение только потому,
что хочет работать в другом и запустит его.
Сердитый пользователь: - не обижайтесь, но Ваше утверждение о двух
изменениях не совсем правильно. Windows 98 выделяет под файл подкачки
больше места, чем требуется в данный момент. Windows 95 же этого не
делает.
Я не испытываю проблем с увеличением файла подкачки блоками
увеличенного размера. И двухминутный интервал ожидания - тоже не проблема.
Проблема в том, что Windows 98 выделяет файлу подкачки на 20-50 мегабайт
больше, чем нужно. И эти мегабайты не используются!
В моей машине - 96 МБ ОЗУ, а диспетчер памяти все равно при загрузке
системы создает двадцатимегабайтный файл подкачки. А потом еще начинает
увеличивать и снова уменьшать его в процессе работы.
ЗАЧЕМ??? В моем случае файл подкачки не нужен вообще! Я абсолютно точно
знаю это, поскольку система прекрасно работает и при отключенной
виртуальной памяти.
Все запросы на выделение памяти делаются программами, работающими в данный
момент. И делаются либо явным образом, либо косвенно, путем обращения к
другим файлам, таким как DLL, DAT и пр. Лишь очень немногие приложения
действительно требуют наличия файла подкачки.
Я слышал, что в процессе разработки Windows 98 были сложности в
организации управления памятью. Но я думаю, что только из-за того, что
некто решил заново изобрести колесо, на этот раз некруглое. А теперь никто
не может объяснить, почему оно плохо катится.
Когда я разрешаю Windows управлять виртуальной памятью, я ожидаю, что
диспетчер памяти будет создавать файл подкачки только тогда, когда _вся_
оперативная память будет использована. Именно так должен работать
_динамический_ файл подкачки. Он должен быть резервом на тот случай, когда
системе не хватит оперативной памяти и не должен создаваться до тех пор,
пока не возникнет такая нехватка.
Второй разработчик: - Windows 98 не рассчитана на работу с
отключенной виртуальной памятью и последствия такого отключения
непредсказуемы. Это вовсе не означает, что система сразу перестанет
работать. Работать она будет, но до некоторого момента. Невозможно
предсказать, где и как проявит себя отключение виртуальной памяти.
(Замечание автора рассылки: известны случаи, когда, например, на некоторых
компьютерах после отключения виртуальной памяти пропадал звук. После
создания файла подкачки фиксированного размера в один мегабайт все
приходило в норму).
Разработчик: - к сказанному ранее добавлю, что при завершении
работы Windows 98 мы не уменьшаем файл подкачки до минимально необходимого
значения, а оставляем его таким, как есть. А теперь давайте обсудим
некоторые нюансы поведения системы, касающиеся отключения виртуальной
памяти и логики работы диспетчера памяти.
Если виртуальная память включена, то значительная доля выделяемой
памяти (в частности, вся память, выделяемая приложениям, в том числе и
программный код, и данные) помечается как выгружаемая. Это означает, что в
некоторый момент (который невозможно определить заранее) мы можем
выгрузить содержимое этой памяти в файл подкачки.
Если у вас 96 МБ ОЗУ и вы используете лишь одно или два приложения,
тогда необходимость такой выгрузки вряд ли когда-нибудь возникнет. Но в
какой момент следует резервировать место в файле подкачки на случай
возникновения такой необходимости? После ее возникновения? А вдруг к этому
моменту на диске не останется свободного места? Тогда единственным выходом
будет аварийное завершение работы приложения.
Поэтому мы резервируем место в файле подкачки в тот момент, когда
приложению выделяется оперативная память. В этом случае мы можем получить
отказ в распределении памяти, если не удается увеличить размер файла
подкачки. То есть нам либо не удастся запустить приложение, либо
приложение, обратившись к системе с запросом о выделении памяти, получит
отказ. Любой из этих вариантов намного более приемлем, чем аварийное
завершение работы приложения. А если мы разрешим диспетчеру памяти
выделять место под файл подкачки только после того, как вся память будет
использована, то столкнемся с описанной выше проблемой.
Второй разработчик: - предыдущий ответ не совсем полон. Главный его
недостаток - ничего не говорится о дисковом кэше. Приложениям, которые
запускает пользователь, вполне хватает 96 МБ памяти, раз система работает
с отключенной виртуальной памятью. И если количество распределенной
виртуальной памяти меньше, чем физической, то, конечно, прямой
необходимости в файле подкачки нет. И единственная причина, по которой
система в этих условиях все же использует файл подкачки - то, что, как мы
обнаружили, система работает лучше, если часть виртуальной памяти (не
используемая в данный момент) выгружена в файл подкачки, чтобы освободить
физическую память для дискового кэша, повышая его эффективность.
Даже если с технической точки зрения системе нет необходимости выгружать
данные в файл подкачки и она прекрасно может работать без этого, она будет
работать лучше, если неиспользуемые данные все же выгружены. Нет никакого
смысла занимать физическую память невостребованными блоками виртуальной
памяти.
Дополнение автора рассылки.
Приведенное выше обсуждение состоялось, когда разработка Windows 98 еще не
была завершена. Вероятно, поэтому никто не упомянул параметр
ConservativeSwapfileUsage. Но рассказ о нем отложим до следующего выпуска.
А сейчас попробую кратко пояснить проблему, о которых упоминал
разработчик.
При эксплуатации Win95 в случае исчерпания свободного места на диске
появлялась вероятность зависания системы (я сам с этим сталкивался) из-за
необходимости подгрузить какой-либо модуль в условиях невозможности
выделения дополнительной виртуальной памяти. Чтобы предотвратить
возникновение подобных ситуаций, и было принято решение о резервировании
места в файле подкачки в момент запуска программы, а не тогда, когда это
место становилось востребованным.
Двадцать седьмая буква диска
Про описанную ниже ситуацию мне
рассказывал один из знающих людей.
Конфигурация: Windows 3.11 для рабочих групп подключена
к сети Netware. При установке Win3.11 добавили параметр lastdrive=Z. При
подключении к сети модуль Netx должен назначить сетевому диску букву,
следующую за той, что определена в lastdrive. После Z в таблице символов
идет открывающая квадратная скобка. В результате в системе появился диск
[:. Можно было набрать [:, нажать клавишу Enter и получить в ответ запрос
авторизации для входа в сеть Novell.