computery.ru

flashback

 на главную

 заложить
 подписка
 editorial

hardware

 железо
 ликбез
 support

software

 программы
 support

connect

 интернет
 телефония

history

 как это было
 market history
 письма
 случаи
 mustdie
 о журнале
 архив журнала

сервис

 комиссионка
 конференция
 драйверы
 гостевая книга
 отзывы
 почта

реклама

поиск



PageRank

 


система

 

Сбрось память на диск

Игорь Лейко
ipl@redline.ru

   страница 1  2

Можно без преувеличения сказать, что оптимальная настройка виртуальной памяти и дискового кэша - одна из наиболее непонятных для пользователя областей. Множество рекомендаций кочует из одной журнальной статьи в другую, оттуда в книги, из книг - на страницы интернета, а из Сети - снова в журналы.

Если как следует проштудировать русскую часть интернета, то окажется, что ошибочные рекомендации и неточная информация на эту тему составляют не менее 95% от общего количества публикаций. А некоторые из рекомендаций остаются неизменными чуть ли не со времен Windows 3.0.

В чем заключается выигрыш от их применения, или не объясняется вовсе, или объясняется поверхностно, исходя из общих соображений и без учета того, как данное изменение параметров скажется на системе в целом.

К числу таких рекомендаций относятся: установление фиксированного размера подкачки, кратного размеру ОЗУ компьютера; перемещение файла подкачки на отдельный раздел того же диска, на который установлена Windows; установка параметра ConservativeSwapFileUsage=1 для более эффективного использования памяти; уменьшение размеров дискового кэша вплоть до двух мегабайт и прочее.

Чтобы вам стало ясно, почему следование этим советам снижает эффективность работы Windows 98 / Me, расскажу об особенностях использования виртуальной памяти и дискового кэша в этих ОС. Затем дам рекомендации, справедливые для подавляющего большинства пользователей. Существуют некоторые очевидные исключения, например, редактирование графических или видеофайлов размером во многие десятки и сотни мегабайт.

Или, наоборот, выполнение на компьютере задач расчетного характера, произведение больших объемов вычислений с не очень большим количеством исходных данных (большинство игр типа "убей все, что движется" относится именно к этому классу задач). В этих случаях оптимальные настройки могут оказаться другими, но если вы поймете, как Windows использует виртуальную память, то легко сможете сделать необходимые изменения сами.

Для начала рекомендую ознакомиться с перепиской разработчиков Windows 98 с пользователями, состоявшейся весной 1998 года (см. врезку). Ну и, конечно, разберемся с самыми общими принципами работы виртуальной памяти.

Виртуальная память

Итак, принципы работы виртуальной памяти в общем. Когда запускается какое-либо приложение, ему выделяется некоторое количество оперативной памяти. Эта память выделяется блоками (обычно их называют страницами), и в специальной области памяти ведется таблица, учитывающая все выделенные страницы. Размер страницы памяти определяется аппаратной реализацией процессора. В процессорах семейства х86 этот размер равен четырем килобайтам.

Когда для загрузки очередного приложения физической памяти уже не хватает, страницы, которые выделены приложениям, имеющим меньший приоритет - простаивающим в данный момент или менее важным, чем текущее, записываются на диск, о чем делается пометка в таблице распределения страниц.

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

При этом задачи, ожидающие загрузки страниц в память, приостанавливаются в ожидании этой загрузки, а процессорное время передается другим программам. В однопользовательской же операционной системе, которой является Windows 9x / Me, такой алгоритм работы оказывается далеко не оптимальным.

Цель, стоящая перед Windows, совсем иная: не обеспечение максимальной загрузки процессора для наиболее полного использования его вычислительной мощности, а создание максимального удобства для пользователя, то есть в первую очередь минимизация времени, требующегося на переключение между задачами. Естественно, не за счет существенного замедления работы задач.

Если вы работаете в Windows 3.x и переключаетесь на задачу, которая в данный момент выгружена на диск, вам приходится ждать, пока операционная система высвободит оперативную память, выгрузив часть страниц на диск, и затем загрузит необходимые страницы с диска. При запуске нового приложения перед выгрузкой еще необходимо увеличить файл подкачки (если он временный, а не постоянный), чтобы в нем появилось место для выгрузки.

Для ускорения процесса переключения между приложениями и запуска новых, в Windows 9х используются следующие приемы.

Размер файла подкачки динамически увеличивается и уменьшается (в то время, когда компьютер не загружен работой), чтобы в любой момент в нем было достаточно места для выгрузки всех страниц, находящихся в оперативной памяти и не являющихся невыгружаемыми.

Страницы с измененными данными переписываются в файл подкачки (не выгружаются, а переписываются, оставаясь в памяти) во время, когда компьютер не загружен другой работой. Это обеспечивает возможность мгновенного освобождения таких страниц для использования другими задачами в случае необходимости.

Учтите при этом еще одну особенность Windows 9х / Me (и Windows NT / 2000 / XP тоже), неизвестную подавляющему большинству пользователей: программы и программные модули, имеющие формат PE (Portable Executable) и хранящиеся на локальном диске с несменяемым носителем, запускаются особым образом. Их запуск начинается не с загрузки программного кода в память, а с распределения памяти и сопоставления страниц виртуальной памяти участкам файла программы.

То есть с точки зрения Windows непосредственно перед запуском программа оказывается выгруженной на диск, причем не в файл подкачки, а в свой собственный файл, который становится как бы частью файла подкачки. Затем начинается исполнение кода из первой страницы, и остальные страницы подгружаются в память только при необходимости. Участки программы, которые в данный момент не используются, в память не загружаются.

Тем самым достигается минимально необходимый расход оперативной памяти и существенная ее экономия по сравнению с обычной процедурой считывания в память всей программы и последующего ее запуска. К тому же программа начинает выполняться раньше на время, почти равное требующемуся на ее загрузку в память. К типу PE относится подавляющее большинство программ, написанных для 32-разрядных операционных систем 9х- и NT-семейств Windows.

Запуск программ как бы из файла подкачки дает особенно заметный выигрыш в случае размещения программного кода на диске в соответствии с порядком его загрузки в память. Такое размещение обеспечивает программа дефрагментации диска Windows 98 / Me. Еще одним преимуществом такого подхода является уменьшение потребности в файле подкачки. Программный код уже хранится на диске, и, поскольку он не изменяется, нет необходимости выгружать его на диск.

Можно сразу отдать эту страницу оперативки под другую страницу виртуальной памяти, а затем при необходимости заново считать программный код с диска. Но, в отличие от файла подкачки, загрузка программного кода в память происходит через дисковый кэш, что при малых размерах дискового кэша может привести к его перегрузке и резкому снижению эффективности. Как следствие, Windows станет работать медленнее.

Стоит заметить, что здесь имеется одно существенное различие между Windows 95 и Windows 98 / Me. Первая передает копии страниц из дискового кэша в память, распределяемую диспетчером виртуальных машин, из-за чего в памяти фактически имеется два экземпляра таких страниц. Однако не спешите возмущаться - так поступают почти все ОС. Системы Windows 98 и Windows Me могут выполнять программный код непосредственно из кэша. Это означает, что та часть кэша, которая занята отображенными в память участками программ, одновременно оказывается обычной оперативной памятью, выделенной этим программам.

Системный монитор может показать количество таких двояко используемых страниц и тем самым помочь определить, какая часть дискового кэша занята программами. На моем компьютере этот показатель колеблется от 500 до 1500 страниц, обычное значение - 800 страниц (т. е. 2 Мб, 6 Мб и 3,2 Мб соответственно). В ваших условиях количество таких страниц может быть другим. Но очевидно, что искусственное уменьшение размера дискового кэша до нескольких мегабайт почти наверняка сделает кэш неэффективным.

В результате совокупности мер, принятых при разработке Windows 95 и, особенно, Windows 98, в большинстве случаев запись в файл подкачки выполняется довольно редко и небольшими порциями. К тому же выполняется она преимущественно в то время, когда диск не загружен другой работой.

Интенсивность чтения данных из файла подкачки, как правило, также невысока и редко превышает несколько сотен килобайт в секунду, а размер считываемого за один прием блока обычно не превышает несколько десятков килобайт.

Многие ОС, разработанные в семидесятых-восьмидесятых годах, при нехватке памяти выгружали на диск программы целиком. Так поступала даже Windows 3.х при работе в стандартном режиме.

Такое поведение обуславливалось организацией управления оперативной памятью в процессоре. Обладая некоторыми преимуществами (размещение выгруженной на диск программы, как правило, в одном непрерывном блоке), такое решение имеет и существенный недостаток - увеличение интенсивности обмена с диском.

При нехватке даже нескольких килобайт физической памяти одна из программ выгружается на диск целиком, а позже снова загружается целиком же.


 



При перепечатке материалов сайта ссылка на UPGRADE обязательна. 
Имена и фамилии авторов изменять не рекомендуется.

  programmer: 
  Илья Васильев
новые поступления: 
vano@veneto.ru
PR-менеджер: 
Екатерина Кожанова
  newswriters:
  Николай Барсуков
  Александр Савицкий
тех. поддержка по софту:
stnvidnoye@mail.ru;
problem@veneto.ru
менеджер тестовой лаборатории:
testlab@veneto.ru
(495) 246-7468
  content: egor_be 
 
тех. поддержка по железу:
problem@veneto.ru
отдел рекламы: (495) 745-6898, 510 58 31
Виноградов Павел, Илья Саньков
директор отдела распространения Ирина Агронова agronova@veneto.ru: (495) 681-7837, 684-5285

© © 2000-2006 Upgrade