Информационные технологииStfw.Ru 🔍

Освобождение памяти, занятой приложениями в стиле Metro

🕛 01.06.2012, 16:05
Современные операционные системы по-новому воспринимают ресурсы системы. Независимо от форм-фактора для операционной системы важно более эффективно управлять использованием ресурсов, чем прежде. В настоящее время одному процессу слишком просто занимать доступные ресурсы (память, ЦП, дисковые операции ввода-вывода), даже если это не приводит к улучшению общей производительности для пользователей. Основная задача операционной системы заключается в поддержании баланса ресурсов и создании условий для выполнения всего, что вы хотите сделать на своем компьютере. Большая часть возможностей ручного управления, имеющихся в большинстве операционных систем, предназначена для обхода ошибочного ПО — программного обеспечения, переходящего в состояние неограниченного использования ресурсов. Даже если это программное обеспечение не является вредоносным, что часто бывает, возможности создания "правильного" программного обеспечения были ограничены из-за сложной структуры API-интерфейсов выделения ресурсов. Современный набор API в WinRT разработан для того, чтобы программистам стало проще создавать программное обеспечение, выполняющее свои задачи, не "захватывая" ваш компьютер. Это приводит к повышению качества работы как компьютеров всех форм-факторов, так и всего программного обеспечения.
В этой статье Билл Карагунис (Bill Karagounis), руководитель группы программ в нашей группе Fundamentals, подробно рассказывает об усилиях, предпринятых разработчиками Windows для освобождения памяти даже в тех случаях, когда приложения приостановлены. Причем разработчикам приложений не нужно беспокоиться о том, как все это происходит. -- Стивен
В предыдущих записях блога обсуждалась модель приложения в стиле Metro с использованием среды выполнения Windows. Важной особенностью этой модели приложений является то, что работа приложений, которые не видны пользователю, приостанавливается. Приостановка выполнения приложений в стиле Metro в фоновом режиме — правильная мера, поскольку это освобождает ЦП для других приложений и гарантирует, что фоновые приложения не будут занимать ресурсы, а значит увеличится время работы батареи и повысится скорость отклика. Это подробно описано в статье Шарифа Фарага (Sharif Farag) и Бена Сроура (Ben Srour) Повышение эффективности энергопотребления для приложений.
А что можно сказать о памяти, занимаемой этими приложениями в приостановленном состоянии? Как мы отмечали ранее, на практике этот аспект будет обрабатываться операционной системой, и другие процессы не "почувствуют" нехватки памяти из-за приостановленных процессов. Это было важным принципом разработки. Однако мы знаем, что некоторым из вас пока неясно, как все это будет работать.
Начиная с Windows 8 Consumer Preview, если Windows обнаруживает нехватку памяти в системе, она перераспределяет почти всю память, занимаемую приостановленными приложениями в стиле Metro. Windows 8 может освободить эту память, не завершая работу приложения.
Ваш браузер не поддерживает HTML5-видео. Загрузите это видео, чтобы просмотреть его в предпочитаемом проигрывателе мультимедиа: MP4, высокое качество | MP4, низкое качество Память, скорость отклика и приложения в стиле Metro
Для приложений любого типа (классических или в стиле Metro) Windows старается регулировать выделение физической памяти от имени приложения независимо от отправленных им запросов памяти. Windows всегда действовала таким образом, чтобы обеспечить достаточно памяти для последующих приложений. Windows выделяет приложению физическую память только тогда, когда приложение пытается ею воспользоваться, даже если приложение "забронировало" память заранее. Кроме того, Windows будет выгружать страницы памяти или перераспределять части памяти, занимаемой приложением, если страницы памяти долгое время не использовались.
Важно понимать, что цель заключается не в том, чтобы отказать в памяти запрашивающему процессу, а в том, чтобы отложить выделение физической памяти насколько это возможно (до того момента, когда пользователь действительно начинает использовать приложение), поскольку, как и в случае большинства ресурсов, у программного обеспечения существует тенденция к закладыванию в бюджет завышенных потребностей. Операционная система является тем центром, куда поступают все эти запросы, и у нее есть информация, позволяющая судить о том, что удовлетворение всех запросов с закладыванием в бюджет всех потребностей в конечном итоге приведет к нехватке ресурсов для каждого процесса. Это может привести не только к невыполнению задач, но и к существенной блокировке системы. Это происходит, даже если память — виртуальная: вместо нехватки места в ОЗУ, компьютер может просто записывать страницы на диск и считывать их с диска.
Физическую память, выделяемую процессу в любой момент времени, называют "рабочим набором" процесса. Частный рабочий набор представляет собой физическую память, являющуюся уникальной для процесса. Процессы затрагивают также другие страницы физической памяти, относящиеся к "общим" — на них могут ссылаться несколько процессов. Память, отображаемая для конкретного процесса в представлении "Процессы" в диспетчере задач, фактически является его текущим частным рабочим набором. ПРИМЕЧАНИЕ. Для простоты, в этом блоге "частный рабочий набор" я буду называть "рабочим набором".
В случае нехватки доступной памяти операционная система просматривает все процессы в поисках страниц физической памяти, которые можно переориентировать для удовлетворения других потребностей системы, при необходимости даже за счет удаления страниц памяти. Для классических приложений Windows будет стараться сохранить наиболее важные (часто используемые) страницы памяти в рабочем наборе приложения. Это связано с тем, что классическим приложениям нужно иметь возможность запускать код в любой момент, даже когда они выполняются в фоновом режиме. Однако это хрупкий баланс: если удалить слишком много страниц памяти у классического приложения, это может повлиять на скорость отклика приложения из-за выполнения дополнительных дисковых операций ввода-вывода (поскольку приложение пытается использовать память, которая была незаметно выгружена на диск).
Чтобы глубже проникнуть в стратегию управления памятью в Windows, посмотрите выступления Марка Руссиновича (Mark Russinovich) "Разгадка тайны управления памятью в Windows": часть 1 и часть 2.
Однако приложения в стиле Metro отличаются от классических приложений тем, что они обычно находятся в приостановленном состоянии, если не находятся на переднем плане. Когда они приостановлены, они не используют НИКАКУЮ свою память.
Чтобы проиллюстрировать свои слова, я выделил несколько приостановленных приложений в стиле Metro и память, относящуюся к их рабочим наборам, на следующем снимке экрана.

Приостановленные приложения, удерживающие память
ПРИМЕЧАНИЕ. По умолчанию в версии Consumer Preview состояние "Приостановлено" не отображается в представлении "Процессы" диспетчера задач; необходимо выбрать отображение этого состояния через параметр в меню "Вид".
Если в системе достаточно памяти, правильным (наиболее эффективным) будет просто оставить память в рабочих наборах приостановленных приложений. Но если наблюдается некоторая нехватка памяти, то можно получить почти всю память из рабочих наборов приостановленных приложений в стиле Metro обратно для других приложений, не завершая работу приостановленных приложений. Освобождение памяти, занятой приостановленными приложениями в стиле Metro
В Windows 8 Consumer Preview мы можем эффективно записать весь (частный) рабочий набор приостановленного приложения в стиле Metro на диск, чтобы получить дополнительную память, когда система обнаружила ее нехватку.
Этот процесс аналогичен переводу приложения в режим гибернации с последующим возобновлением его работы, когда пользователь возвращается к данному приложению. Мы используем преимущества механизма приостановки и возобновления работы приложений в стиле Metro, чтобы освободить или повторно заполнить рабочий набор приложения.
Далее описывается последовательность событий: Диспетчер жизненного цикла процессов (Process Lifetime Manager — PLM) обнаруживает нехватку памяти в системе и запрашивает диспетчер памяти (Memory Manager — MM) об освобождении рабочего набора определенного процесса, относящегося к приостановленному приложению в стиле Metro.
Диспетчер памяти перемещает страницы памяти из рабочего набора приложения в список измененных страниц памяти операционной системы (это список памяти, содержимое которой должно быть записано на диск до повторного использования).
Страницы рабочего набора в списке измененных страниц памяти записываются асинхронно, как предписано обычными политиками диспетчера памяти (записываются рациональным образом в фоновом режиме, запись включается при нехватке памяти).
Даже после записи рабочего набора приостановленного приложения на диск, страницы памяти, удаленные из процесса, остаются нетронутыми в списке ожидания операционной системы. Это кэш полезных страниц памяти, которую при необходимости можно переназначить для других приложений. Если эти страницы вдруг снова понадобятся их исходному процессу, они будут быстро возвращены.

Если пользователь возвращается к приложению, пока страницы его рабочего набора еще находятся в физической памяти (в списке измененных страниц памяти или списке ожидания), результат однозначен: эти страницы будут немедленно добавлены обратно в процесс приложения. Если они больше не доступны, Windows оптимальным образом прочитает рабочий набор приложения с диска. "Освобождение памяти" в действии
Чтобы почувствовать, как это работает, давайте рассмотрим пример с настоящим исполняемым кодом.
Начальное состояние представлено на снимке экрана, приведенном выше. У меня было запущено несколько приложений в стиле Metro на компьютере с 2 ГБ ОЗУ. Приложения в стиле Metro находились в фоновом режиме, поэтому Windows приостановила их работу. Затем я начал открывать больше приложений, чтобы интенсифицировать использование памяти в системе и запустить новую функцию.
На следующем снимке экрана, ниже, вы увидите, что я открыл несколько приложений, чтобы создать дополнительную нагрузку на память и спровоцировать поведение, описанное выше. Как можно убедиться, система Windows очистила рабочие наборы приостановленных приложений в стиле Metro (выделены).

Рабочие наборы приложений в стиле Metro очищены
Давайте сравним рабочие наборы оригинальных приложений в стиле Metro "до" и "после" (часть статистики "после" не видна, поскольку диспетчеру задач не хватает места отобразить все 27 запущенных приложений):
Приложение в стиле Metro
Рабочий набор "до" (МБ)
Рабочий набор "после" (МБ)
Flixster
23.5
0.5
Flow
15.2
0.6
Kindle
23.1
0.5
LiveComm
3.8
0.3
Lyrics
65.3
0.9
Карты
28.1
0.8
Удаленный рабочий стол
21.0
0.5
SkyDrive
23.1
0.5
Магазин
26.9
0.6
Погода
42.0
0.8
Средство просмотра для Windows
9.2
0.4

Windows 8   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉