> man operating_systems
Настройка параметров виртуальной памяти и дискового кэша
Сбрось память на диск!
на Среда, 07 Июль 2004, 17:03
добавил: Игорь Лейко список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи > Windows
комментарии: 0
просмотров: 8874


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

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

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

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

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

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

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

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

Учтите при этом еще одну особенность Windows 95/98/Me (и Windows NT 4/2000/XP тоже), неизвестную подавляющему большинству пользователей. Программы и программные модули, имеющие формат PE (Portable Executable) и хранящиеся на локальном диске с несменяемым носителем, запускаются особым образом. Их запуск начинается не с загрузки программного кода в память, а с распределения памяти и сопоставления страниц виртуальной памяти участкам файла программы. То есть с точки зрения Windows непосредственноперед запуском программа оказывается выгруженной на диск, причем не в файл подкачки, а в свой собственный файл, который становится как бы частью файла подкачки. Затем начинается исполнение кода из первой страницы, и остальные страницы подгружаются в память только при необходимости. Участки программы, которые в данный момент не используются, в память не загружаются. Тем самым достигается минимально необходимый расход оперативной памяти (ОП) и существенная ее экономия по сравнению с обычной процедурой считывания в память всей программы и последующего ее запуска. К тому же программа начинает выполняться раньше на время, почти равное требующемуся на ее загрузку в память. К типу PE относится подавляющее большинство программ, написанных для 32-разрядных ОС семейства Windows (NT, 2000, XP, 95, 98, Me).

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

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

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

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

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



© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.