Контроль использования памяти в Windows
Самый простой способ узнать, сколько оперативной памяти используется в данный момент времени — открыть Диспетчер задач (Task Manager), нажав [Ctrl]+[Shift]+[Esc], и перейти на вкладку «Быстродействие» (Performance) (рис.3.8). Подробное описание информации вкладки «Быстродействие» для Windows XP представлено в табл. 3.1.
Рис. 3.8а. Диспетчер задач Windows XP | Рис. 3.8б. Диспетчер задач Windows 7 |
Таблица 3.1. Расшифровка данных Диспетчера задач
Категория | Значение | Смысл |
Всего (Totals) | Дескрипторов (Handles) | Уникальные идентификаторы, позволяющие программам обращаться к системным ресурсам, таким как файлы, ключи реестра, шрифты и растровые изображения. Теоретически это значение может использоваться для выявления программ, не освобождающих системные ресурсы после завершения работы. На практике оно оказывается полезным в основном для разработчиков, использующих специализированные средства отладки для выявления утечек памяти в приложениях |
Потоков (Threads) | Поток - объект внутри процесса, выполняющий инструкции программы. Многопоточные программы могут делать несколько операций одновременно. Как и предыдущее, это значение полезно в основном для разработчиков программ в процессе тестирования приложений | |
Процессов (Processes) | Общее количество процессов (программ, подсистем и служб), инициированных всеми пользователями данного компьютера | |
Выделение памяти (Commit Charge) | Всего (Total) | Общее количество физической и виртуальной памяти, занимаемой операционной системой и всеми программами в настоящий момент. Это значение также отображается в нижнем правом углу окна Диспетчера задач. Выделение памяти растет по мере открытия программ и файлов данных и должно уменьшаться при их закрытии |
Предел (Limit) | Общее количество физической и виртуальной памяти, доступной операционной системе и всем приложениям, которые о тоже отображается в нижнем правом углу Диспетчера задач. Чтобы увеличить предельное значение, добавьте в компьютер оперативной памяти и/или увеличьте размер файла подкачки | |
Пик (Peak) | Максимальное общее количество памяти, использовавшееся на протяжении текущего сеанса (в килобайтах). Если это значение часто оказывается близким или равным Пределу, в систему нужно нарастить память | |
Физическая память (Physical memory) | Всего (Total) | Полное количество физической памяти данного компьютера (в килобайтах). Поделите на 1024, чтобы перевести это значение в мегабайты |
Доступно (Available) | Общий объем физической памяти (в килобайтах), который будет выделен выполняемым программам прежде, чем начнется обмен данными с файлом подкачки. Windows всегда старается зарезервировать некоторое количество памяти для новых приложений, даже если оно превышает количество установленной физической памяти | |
Системный кэш (System Cache) | Общее количество физической памяти (в килобайтах), используемое для хранения часто вызываемых программ и данных. Windows пытается отвести под системный кэш как можно больше памяти, но при необходимости будет уменьшать объем кэша для предоставления программам и функциям операционной системы свободной памяти | |
Память ядра (Kernel Memory) | Всего (Total) | Полный объем оперативной памяти (в килобайтах), занимаемый основными компонентами операционной системы (включая драйверы) |
Выгружаемая (Paged) | Объем памяти (в килобайтах), используемой основными компонентами Windows и отображенной на страницы в виртуальной памяти | |
Невыгружаемая (Nonpaged) | Объем кода операционной системы и драйверов (в килобайтах), который должен выполняться в физической памяти и не может быть перенесен в виртуальную |
Вкладка «Быстродействие» для Windows 7 имеет значимые нововведения по сравнению с соответствующей вкладкой Диспетчером задач Windows XP.
Число в графе «Всего» (Total) раздела «Физическая память» (Physical Memory) указывает на общий объем оперативной памяти для данной системы. В графе «Кэшировано» (Cached) указано количество физической памяти, которая недавно использовалась системными ресурсами. Она остается в кэше на случай, если снова понадобится системе, но доступна для других процессов. В новой графе «Доступно» (Available) указывается количество неиспользуемой в данный момент физической памяти, а в графе «Свободно» (Free) — количество памяти, которая используется кэшем, но не содержит полезной информации.
В разделе «Память ядра» (Kernel Memory) содержатся две графы — «Выгружаемая» (Paged) и «Невыгружаемая» (Nonpaged). В сумме они указывают, сколько памяти использует ядро. Выгружаемая — это виртуальная память, а невыгружаемая — физическая.
В разделе «Система» (System) появились графы «Дескрипторов» (Handles) и «Потоков» (Threads), связанные с составными компонентами процессов. В графе «Дескрипторов» указывается количество идентификаторов объектов (дескрипторов), которые используются запущенными в данный момент процессами. В графе «Потоков» указано число подпроцессов, запущенных в рамках более крупных процессов. Цифра в графе «Процессов» (Processes), естественно, указывает на общее количество запущенных процессов, которые можно увидеть на вкладке «Процессы».
В графе «Время работы» (Up Time) указано, сколько времени прошло с последнего запуска компьютера. В графе «Выделено» (Commit) содержится информация о файле подкачки. Первая цифра указывает на общий объем используемой в данный момент физической и виртуальной памяти, а вторая — на общий объем памяти для данного компьютера в принципе.
Еще более подробную информацию можно получить, нажав кнопку «Монитор ресурсов» и выбрав вкладку «Память» (рис. 3.9).
Рис. 3.9. Вкладка «Память» окна монитора ресурсов Windows 7
На вкладке «Память» есть таблица «Процессы», в которой перечислены все запущенные процессы, а сведения об используемой памяти для каждого процесса разбиты на несколько категорий (рис.3.10).
Рис. 3.10. Таблица «Процессы»
В колонке «Образ» указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко — например, процесс «Winword.exe» со всей очевидностью принадлежит текстовому редактору Word. Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.
В колонке «ИД процесса» указывается номер процесса — уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.
В столбце «Завершено» указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.
В графе «Рабочий набор» указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.
В колонке «Общий» указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL — Ntdll, Kernel32, Gdi32 и User32 — используют общую память.
В столбце «Частный» указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.
В графе «Ошибок отсутствия страницы в памяти/сек.» указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск — в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.
При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.
В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Это проявляется в неожиданном замедлении работы всех приложений, которое затем также неожиданно прекращается. Замедление связано с активным перераспределением данных между физической памятью и подкачкой.
Отсюда следует вывод: если ошибки отсутствия страницы в памяти для того или иного процесса происходят слишком часто и притом регулярно, компьютеру не хватает физической памяти.
Чтобы было удобнее наблюдать за процессами, вызывающими частые ошибки отсутствия страницы в памяти, можно отметить их флажками. При этом выбранные процессы переместятся наверх списка, а в графике ошибок отсутствия страницы в памяти будут представлены оранжевой кривой.
Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти — не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.
В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» дает общую картину использования RAM. Ее ключевой компонент — уникальная гистограмма, показанная на рис. 3.11.
Рисунок 3.11. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7
Каждая секция гистограммы обозначена собственным цветом и представляет определенную группу страниц памяти. По мере использования системы, диспетчер памяти в фоновом режиме перемещает данные между этими группами, поддерживая тонкий баланс между физической и виртуальной памятью для обеспечения эффективной работы всех приложений. Рассмотрим гистограмму поподробнее.
Слева расположена секция «Зарезервированное оборудование», обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти. Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт.
К компонентам, влияющим на объем зарезервированной памяти, относятся:
• BIOS;
• компоненты материнской платы — например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);
• звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;
• шина PCI Express (PCIe);
• видеокарты;
• различные наборы микросхем;
• флеш-накопители.
Секция «Используется», обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего» за вычетом суммы показателей «Изменено», «Ожидание» и «Свободно». В свою очередь, значение «Всего» — это показатель «Установлено» за вычетом показателя «Зарезервированное оборудование».
Оранжевым цветом выделена секция «Изменено», в которой представлена измененная, но не задействованная память. Фактически она не используется, но может быть в любой момент задействована, если снова понадобится. Если память не используется достаточно давно, данные переносятся в файл подкачки, а память переходит в категорию «Ожидание».
Секция «Ожидание», обозначенная синим цветом, представляет страницы памяти, удаленные из рабочих наборов, но по-прежнему с ними связанные. Другими словами, категория «Ожидание» — это фактически кэш. Страницам памяти в этой категории присваивается приоритет от 0 до 7 (максимум). Страницы, связанные с высокоприоритетными процессами, получают максимальный приоритет. Например, совместно используемые процессы обладают высоким приоритетом, поэтому связанным с ними страницам присваивается наивысший приоритет в категории «Ожидание».
Если процессу требуются данные с ожидающей страницы, диспетчер памяти сразу же возвращает эту страницу в рабочий набор. Тем не менее, все страницы в категории «Ожидание» доступны для записи данных от других процессов. Когда процессу требуется дополнительная память, а свободной памяти недостаточно, диспетчер памяти выбирает ожидающую страницу с наименьшим приоритетом, инициализирует ее и выделяет запросившему процессу.
В категории «Свободно», обозначенной голубым цветом, представлены страницы памяти, еще не выделенные ни одному процессу или освободившиеся после завершения процесса. В этой секции отображается как еще не задействованная, так и уже освобожденная память, но на самом деле, еще не задействованная память относится к другой категории — «Нулевые страницы», которая так называется, потому что эти страницы инициализированы нулевым значением и готовы для использования.
С системой управления памятью в Windows 7 связано одно весьма распространенное заблуждение. Как видно из рис. 3.11, секция свободной памяти — одна из самых маленьких в гистограмме. Тем не менее, ошибочно на этом основании полагать, будто Windows 7 потребляет чересчур много памяти и что система не может нормально работать, если свободной памяти так мало. На самом деле, все совсем наоборот.
В контексте принятого в Windows 7 подхода к управлению памятью, свободная память бесполезна. Чем больше памяти задействовано, тем лучше!!!
Заполняя память до максимума и постоянно перемещая страницы из одной категории в другую с использованием системы приоритетов, Windows 7 повышает эффективность работы и предотвращает попадание данных в файл подкачки, не давая ошибкам отсутствия страницы в памяти замедлить быстродействие.
Порядок выполнения работы
1. Перезагрузите компьютер и сразу же после запуска откройте Монитор ресурсов Windows 7.
2. Перейдите на вкладку «Память» и обратите внимание на соотношение секций в гистограмме физической памяти.
3. Начните запускать приложения. По мере запуска следите за изменением гистограммы. Запустив как можно больше приложений, начните закрывать их по одному и наблюдайте, как изменяется соотношение секций в гистограмме физической памяти.
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
- Гордеев А.В. Операционные системы: Учебник для вузов. 2-е изд. – СПб.: Питер, 2009. – 416 с.
- Х.М. Дейтл, П.Дж. Дейтл, Д.Р. Чофнес Операционные системы. Основы и принципы: Третье издание. Пер. с англ. –М.: ООО «Бином-Пресс», 2006 г. – 1024 с.
- Шоу А. Логическое проектирование операционных систем: Пер. с англ. – М.: Мир, 1981. – 360 с.
- Рихтер Дж. Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows/Пер, англ - 4-е изд. - СПб; Питер; М.: Издательско-торговый дом "Русская Редакция", 2001. - 752 с.; ил.
- Иртегов Д.В. Введение в операционные системы. – 2-е изд., перераб. и доп. – СПБ; БХВ-Петербург, 2008. – 1040 с., ил. - (Учебное пособие)