Внутреннее устройство ядра ОС Windows Vista: Часть 1

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Марк Руссинович
Внутреннее устройство ядра ОС Windows Vista: Часть 1
Журнал TechNet Magazine, февраль 2007 года
http://www.microsoft.com/technet/technetmag/issues/2007/02/VistaKe
rnel
Марк
Руссинович
занимает
должность
технического
специалиста в подразделении Platform and Services корпорации
Майкрософт. Он является одним из авторов книги Microsoft Windows
Internals (Внутренняя структура ОС Microsoft Windows), вышедшей в
издательстве Microsoft Press в 2004 г., и часто выступает на таких
конференциях, как Microsoft Tech•Ed и PDC, предназначенных для
специалистов по информационным технологиям и разработчиков.
Марк Руссинович пришел в корпорацию Майкрософт в результате
приобретения корпорацией компании Winternals Software, одним из
основателей которой он являлся. Он также создал веб-ресурс
Sysinternals, на котором опубликовал многие популярные служебные
программы, такие как Process Explorer, Filemon и Regmon.
Это — первая статья серии, посвященной нововведениям в ядре
ОС Windows Vista В этой работе будут затронуты изменения в
области процессов, потоков и ввода-вывода. Следующие статьи будут
посвящены управлению памятью, запуску и завершению работы,
надежности и восстановлению, а также безопасности.
Данная статья охватывает изменения только ядра ОС Windows
Vista™, в особенности файла Ntoskrnl.exe и связанных с ним
компонентов. Следует помнить, что многие существенные изменения
в ОС Windows Vista не затрагивают собственно ядро системы, и
следовательно, здесь рассмотрены не будут. Это касается
усовершенствований оболочки (например интегрированный поиск на
рабочем столе), работы в сети (например новый стек IPv6 и
двусторонний брандмауэр) и графической модели нового поколения
(Aero™ Glass, платформа Windows® Presentation Foundation,
диспетчер окон рабочего стола и новая модель графических
драйверов). Также не будет рассмотрена новая инфраструктура
драйверов пользовательского режима (UMDF) и режима ядра (KMDF)
ОС Windows, поскольку ее можно устанавливать и на более ранние
версии этой операционной системы.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Счетчик циклов центрального процессора
ОС Windows Vista содержит множество усовершенствований в
области процессов и потоков, включая использование счетчика циклов
центрального процессора для более равномерного выделения
ресурсов, а также новую службу Multimedia Class Scheduler Service
(MMCSS),
способствующую
безошибочному
воспроизведению
содержимого мультимедийными приложениями.
Все версии ОС Windows NT® до Windows Vista включительно
выполняют подпрограммы прерывания интервального таймера
примерно каждые 10 или 15 мс, в зависимости от аппаратной
платформы. Данная подпрограмма обновляет статистику загрузки
центрального процессора (ЦП) потоком, который ею прерван, так как
если бы этот поток выполнялся весь интервал, хотя в
действительности выполнение потока могло начаться перед самым
завершением данного интервала. Далее поток мог формально
получить ресурсы ЦП, но не получить возможности выполняться,
поскольку вместо этого могли быть выполнены подпрограммы
аппаратного или программного прерывания .
Подсчет времени на основе интервалов может подходить
средствам диагностики, сообщающим загрузку ЦП процессами и
потоками, но использование этого способа планировщиком потоков
может приводить к нерациональному распределению ресурсов ЦП. По
умолчанию клиентские версии ОС Windows позволяют выполнение
потоков длительностью до 2 тактов (до 6 тактов на переднем плане).
Однако на самом деле поток может совсем не получить времени ЦП,
или же получить до 6 циклов (до 18 циклов на переднем плане), в
зависимости от его поведения и прочей активности в системе.
Рис. 1 демонстрирует случай нерационального распределения
ресурсов, которое может произойти, если два потока с одинаковым
приоритетом готовы к выполнению одновременно. Поток A
выполняется до завершения следующего временного интервала,
когда планировщик предполагает, что он выполнялся в течение всего
интервала, и поэтому решает, что очередь потока A закончилась.
Более того, потоку A засчитывается еще и прерывание,
произошедшее во время его выполнения. На следующий интервал
планировщик отдает предпочтение потоку B, который выполняется в
течение полного интервала.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 1. Неравномерное выделение ресурсов потокам
В ОС Windows Vista планировщик отслеживает точное
количество циклов ЦП, в течение которых выполняется поток, с
помощью регистра счетчика циклов современных процессоров.
Определив, сколько циклов может выполнить процессор на
протяжении интервала времени, планировщик может точнее
раздавать ресурсы ЦП. К тому же, планировщик ОС Windows Vista не
засчитывает выполнение прерывания во время выполнения потока.
Это означает, что поток в ОС Windows Vista всегда получит, по
крайней мере, свою очередь выполнения, не превышающую один
дополнительный временной интервал, что обеспечивает более
справедливое выделение ресурсов и предсказуемое поведение
приложений. На рис. 2 показана реакция ОС Windows Vista на
ситуацию, изображенную на рис. 1, выделением обоим потокам, по
меньшей мере, по одному временному интервалу выполнения.
Рис. 2. Планирование распределения ресурсов на основе циклов в ОС
Windows Vista
С помощью программы Process Explorer можно наблюдать за
использование процессом циклов ЦП. (рис. 3)
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 3. Просмотр времени ЦП и разницы циклов в программе Process
Explorer)
Запустите программу Process Explorer в системе Windows Vista и
добавьте к просмотру процессов столбец Cycles Delta (Разница
циклов). В этом столбце отображается количество циклов исполнения
потоков каждого процесса в интервале между обновлением данных
программой Process Explorer. Поскольку учет времени ЦП все еще
основан на интервальном таймере, можно добавить также столбец
CPU Time (Время ЦП), в котором будет отображено множество
процессов с потоками, потребляющими миллионы циклов ЦП, но с не
меняющимися и не отображенными в столбце CPU usage значениями
процессорного времени.
Служба Multimedia Class Scheduler Service
Пользователи ожидают от мультимедийных приложений, таких
как проигрыватели аудио и видео, ровного и безошибочного
воспроизведения. Однако из-за занятости ЦП другими параллельно
выполняющимися
приложениями,
например
антивирусными
программами, индексированием содержимого или даже почтовым
клиентом могут возникать неприятные задержки и прерывания. Для
обеспечения более качественного воспроизведения в ОС Windows
Vista вводится служба MMCSS, управляющая приоритетами
мультимедийных потоков для выполнения процессором.
Мультимедийное приложение, например проигрыватель Windows
Media®, регистрируется в службе MMCSS с помощью новых функций
прикладного интерфейса, отображающих его мультимедийные
характеристики, которые должны совпадать с характеристиками,
перечисленными по именам в следующем разделе реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Currentversion\
Multimedia\SystemProfile\Tasks
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Разделы различных задач указывают, какое предпочтение
получают потоки, связанные с разными типами мультимедиа, при
выделении ресурсов ЦП и графического процессора (хотя управление
ресурсами графического процессора в ОС Windows Vista не
реализовано).
На рис. 4 показано содержание одного из разделов задач
реестра сразу после установки ОС Windows Vista, хотя сторонние
разработчики могут добавлять и собственные определения задач.
Рис. 4. Определение аудиозадачи в планировщике классов мультимедиа
Служба
MMCSS,
реализованная
в
файле
%SystemRoot%\System32\Mmcss.dll и запускаемая в процессе работы
узла службы (Svchost.exe), имеет поток управления приоритетами,
который выполняется с приоритетом 27. (Приоритеты потоков в ОС
Windows находятся в диапазоне от 0 до 31). Этот поток повышает
приоритет зарегистрированных потоков мультимедиа до диапазона,
связанного со значением Scheduling Category раздела реестра данной
задачи, как показано в табл. 1.
Таблица 1
Приоритеты потоков службы MMCSS
Категория
планирования
Повышенный
потока
Высокий
23-26
Средний
16-23
приоритет
В системе Windows приоритеты потоков от 16 и выше относятся к
диапазону приоритетов реального времени, что выше приоритета
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
любых потоков в системе (за исключением рабочих потоков
диспетчера памяти, которые выполняются с приоритетом 28 или 29).
Права на увеличение приоритета, необходимые для установки
приоритетов потоков реального времени, есть только у учетных
записей с правами администратора, например у локальной системной
учетной записи, в которой выполняется служба MMCSS.
При проигрывании звукового файла проигрыватель Windows
Media регистрирует потоки задачи аудио, а при проигрывании файла
видео — потоки задачи воспроизведения. Служба MMCSS повышает
приоритет всех потоков, заявивших о доставке потоковых данных,
одновременно, когда они выполняются в процессе, которому
принадлежит окно переднего плана, и если в разделе определения их
задачи значение BackgroundOnly установлено в True.
Но в то время, как служба MMCSS помогает потокам
мультимедиа получить необходимое время ЦП, она также гарантирует
получение, по крайней мере, части процессорного времени другими
процессами для обеспечения реакции системы и других приложений.
Следовательно, служба MMCSS резервирует для других действий
определенную часть процессорного времени , заданную в следующем
разделе реестра:
HKLM\Software\Microsoft\WindowsNT\Currentversion\Multimedia\SystemP
rofile\SystemResponsiveness
По умолчанию это составляет 20 процентов, т.е. служба MMCSS
отслеживает загрузку ЦП и не разрешает выполнение потоков с
повышенным приоритетом в течение времени свыше 8 мс из 10, если
ресурсы ЦП запрашиваются другими потоками. Чтобы потоки
мультимедиа не мешали другим потокам в течение остальных 2 мс,
планировщик понижает их приоритет до диапазона от 1 до 7.
Убедиться в повышении приоритета потоков проигрывателя
Windows Media службой MMCSS можно включив воспроизведение
видео или звукового клипа, запустив системный монитор, установив
масштаб графика равным 31 (наивысший приоритет потока в ОС
Windows) и добавив счетчик Priority Current (Текущий приоритет) для
всех экземпляров объектов потоков проигрывателя Windows Media
(Wmplayer.exe). Один или несколько потоков будут выполняться с
приоритетом, равным 21.
Файловые символические ссылки
Изменения, относящиеся к операциям ввода-вывода в ОС
Windows Vista, включают в себя файловые символические ссылки,
более эффективную обработку завершения операций ввода-вывода,
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
полную поддержку отмены операций ввода-вывода и поддержку
приоритетов операций ввода-вывода.
Одной из функций файловой системы, которой по мнению
многих недоставало в системе NTFS, является поддержка
символических ссылок на файлы (или, как они называются в UNIXсистемах, гибких ссылок), которая появилась в ОС Windows Vista. В
версии NTFS для Windows 2000 были представлены символические
ссылки на каталоги, которые назывались соединениями каталогов, что
позволяло создавать каталоги, указывающие на другие каталоги, но
до выхода ОС Windows Vista файловая система NTFS поддерживала
только жесткие ссылки на файлы.
Основным отличием в том, как в ОС Windows разрешаются
символические ссылки и соединения каталогов, является способ их
обработки. ОС Windows обрабатывает символические ссылки в
локальной системе даже если они ссылаются на место на удаленном
файловом сервере. ОС Windows обрабатывает соединения каталогов,
ссылающиеся на удаленный файловый сервер, на самом сервере.
Символические ссылки на сервере могут, таким образом, ссылаться
на местоположения, доступные только с клиентских компьютеров,
например тома на других клиентских компьютерах, что невозможно
для соединений каталогов. Для решения этой проблемы ОС Windows
Vista поддерживает новый тип символических ссылок как для файлов,
так и для каталогов.
Многие команды файловой системы обновлены для учета
особенностей символических ссылок. Например, команда Delete
(Удалить) не следует по ссылке, что приводило бы к удалению
целевого объекта, а удаляет саму ссылку. Однако в связи с тем, что
некоторые
приложения
могут
неправильно
обрабатывать
символические ссылки, для создания таких ссылок необходимы права
на создание символических ссылок, которые по умолчанию имеются
только у администраторов.
Символическую ссылку можно создать из командной строки с
помощью команды Mklink. Встроенная команда вывода содержимого
каталога командной строки обозначает символические ссылки
пометкой <SYMLINK> и показывает конечный объект в квадратных
скобках, как показано на рис. 5.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 5. Создание символической ссылки с помощью команды Mklink
Проводник Windows также понимает символические ссылки и
отображает их со стрелкой как ярлыки. Конечный объект ссылки
можно видеть в Проводнике, если добавить к окну обзора столбец Link
Target (Цель ссылки).
Завершение и отмена операций ввода-вывода
В систему ввода-вывода введено множество внутренних
изменений, которые могут улучшить производительность серверных
приложений. Как правило, такие приложения используют объект
синхронизации, называемый портом завершения, для ожидания
завершения асинхронных запросов ввода-вывода. До выхода ОС
Windows
Vista
при
завершении
операции
ввода-вывода
инициировавший данную операцию поток выполнял задачу
завершения ввода-вывода, что приводило к переключению в процесс,
к которому принадлежал данный поток, и прерыванию прочих
действий. Затем система ввода-вывода обновляла состояние порта
завершения, что приводило к возобновлению потока, ожидавшего
изменения состояния порта.
В ОС Windows Vista обработка завершения ввода-вывода
выполняется не потоком, инициировавшим операцию ввода-вывода, а
потоком, ожидающим изменения состояния порта завершения. Это
относительно небольшое изменение позволяет избежать ненужного
планирования выполнения потоков и переключения контекста, что
приводило к снижению общей производительности системы и
приложений. Для еще большего повышения производительности
сервер может получать результаты разных операций ввода-вывода от
завершения одним запросом, избегая переходов в режим ядра.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Вероятно, одним из наиболее заметных нововведений в систему
ввода-вывода с точки зрения конечного пользователя является
поддержка в ОС Windows Vista отмены синхронных операций вводавывода. Всем, кто когда-либо выполнял команду net view или пытался
обратиться к общему ресурсу на выключенном удаленном компьютере
под управлением ОС Windows XP или Windows Server® 2003, знакомы
проблемы с операциями ввода-вывода, которые невозможно
отменить: команда или окно проводника не отвечали до истечения
времени ожидания сети. Приложению не оставалось ничего иного,
кроме как ожидать ошибки выполнения операции, поскольку не
существовало способа оповестить драйвер устройства, выполняющий
операцию ввода-вывода, о том, что данную операцию выполнять уже
не нужно.
Большинство операций ввода-вывода в ОС Windows Vista можно
отменить, включая операцию открытия файла, которую используют
команда Net View и Проводник. Однако для того, чтобы приложения
отвечали на запросы пользователя об отмене операции вводавывода, их необходимо обновить, и многие служебные программы ОС
Windows Vista, взаимодействующих с устройствами, имеющими
интервал ожидания, уже поддерживают данную возможность.
Например, в диалоговых окнах открытия и сохранения файлов,
применяющихся практически во всех приложениях ОС Windows,
включая сторонние приложения, теперь во время отображения
содержимого папки доступна кнопка Cancel (Отменить). Синхронные
операции ввода-вывода команды Net также могут быть отменены
нажатием комбинации клавиш Ctrl+C.
В преимуществах возможности отмены операций ввода-вывода
легко убедиться, открыв окно командной строки в ОС Windows Vista и
набрав команду:
net view (\\nonexistentmachine)
Команда не будет отвечать до тех пор, пока ОС Windows будет
пытаться связаться с несуществующей системой, но ее можно будет
прервать, воспользовавшись сочетанием клавиш Ctrl+C. В ОС
Windows XP комбинация клавиш Ctrl+C не действовала и команда не
отвечала до истечения срока ожидания сети.
Еще одной разновидностью проблем с вводом-выводом в
предыдущих версиях ОС Windows было то, что драйверы устройств не
могли быть отменены должным образом, поскольку не существовало
простого способа известить их об этом. Если пользователю
приходилось завершать процесс, а затем видеть, как он остается в
списке процессов, было можно наблюдать, как драйвер устройства не
может ответить на запрос завершения процесса и отмены операции
ввода-вывода, инициированной незавершенным процессом. ОС
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Windows не может окончательно завершить процесс до того, как все
операции ввода-вывода данного процесса не будут либо завершены,
либо отменены. В ОС Windows Vista драйверы устройств без проблем
регистрируют извещения о завершении процесса, так что
большинство проблем, связанных с незавершаемыми процессами,
остались в прошлом.
Приоритет операций ввода-вывода
Несмотря на то, что операционная система Windows всегда
поддерживала приоритеты использования ЦП, в ней отсутствовало
понятие приоритетов операций ввода-вывода. Без поддержки
приоритетов ввода-вывода фоновые операции, например индексация
поиска, поиск вирусов и дефрагментация диска могут существенно
ухудшать скорость ответа операций переднего плана. Пользователь,
запускающий приложение или открывающий документ в то время, как
другой процесс выполняет, например, операцию дискового вводавывода, сталкивается с задержками, поскольку приложению переднего
плана приходится дожидаться доступа к диску. С теми же
препятствиями сталкивается воспроизведение с жесткого диска
потокового мультимедийного содержимого, например песни.
ОС Windows Vista обеспечивает два новых способа
распределения приоритетов для предоставления предпочтения
операциям ввода-вывода переднего плана: приоритеты на отдельные
операции ввода-вывода и резервирование полосы пропускания вводавывода. Система ввода-вывода в ОС Windows Vista обеспечивает
внутреннюю поддержку приоритетов операций ввода-вывода, как
показано в табл. 2, но используются только четыре приоритета
(возможно, следующие версии ОС Windows будут поддерживать
приоритет High (Высокий)).
Таблица 2
Приоритеты ввода-вывода в ОС Windows Vista
Приоритет операций вводавывода
Применение
Критический
Диспетчер памяти
Высокий
Не используется
Нормальный
Приоритет по умолчанию
Низкий
Приоритет
задачи
по
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Приоритет операций вводавывода
Применение
умолчанию
Очень низкий
Фоновые операции
Приоритетом по умолчанию для операций ввода-вывода
является Medium (Средний), а диспетчер памяти использует
приоритет High (Высокий) для записи на диск содержимого памяти в
ситуациях нехватки памяти для освобождения ОЗУ для других данных
и кода. Планировщик задач ОС Windows устанавливает приоритет по
умолчанию для задач ввода-вывода Low (Низкий), а написанные для
ОС Windows Vista приложения, осуществляющие фоновую обработку,
указывают приоритет Very Low (Очень низкий). Все фоновые операции
в ОС Windows Vista, включая сканирование Windows Defender
(Защитник ОС Windows) и индексирование поиска на рабочем столе,
используют приоритет ввода-вывода Very Low (Очень низкий).
Драйвер
устройства
класса
системного
хранения
(%SystemRoot%\System32\Classpnp.sys) обеспечивает приоритеты
ввода-вывода, которые автоматически применяются к операциям
ввода-вывода, ориентированных на большинство устройств хранения.
Этот и другие драйверы хранения помещают в свои очереди операции
ввода-вывода с приоритетом Medium (Средний) до операций с
приоритетами Low (Низкий) и Very Low (Очень низкий), но при этом
выполняют, как минимум, одну операцию с приоритетом Low (Низкий)
или Very Low (Очень низкий) в секунду, чтобы не препятствовать
выполнению фоновых процессов.
Данные, прочитанные операциями с приоритетами Low (Низкий)
и Very Low (Очень низкий), также приводят к тому, что диспетчер кэша
производит запись изменений на диск незамедлительно, не
откладывая, и обходит логику упреждающего чтения для операций
чтения, что в противном случае приводило бы к упреждающему
чтению из файлов, открытых для чтения. Пример операций с
приоритетом Very Low (Очень низкий), выводимых программой
Process Monitor, можно увидеть на рис. 6.
Рис. 6. Просмотр операций ввода-вывода с приоритетом Very Low (Очень
низкий) при помощи программы Proces Monitor
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Служебная программа реального времени Process Monitor от
компании Sysinternals для наблюдения за файловой системой и
реестром собирает подробную информацию об операциях чтения и
записи файловой системы, включая приоритеты ввода-вывода в ОС
Windows Vista. Выделенная строка демонстрирует пример запроса с
очень
низким
приоритетом
ввода-вывода,
инициированного
компонентом SuperFetch (который будет рассмотрен в следующей
статье цикла).
Поддержка резервирования полосы пропускания в ОС Windows
Vista удобна для применения приложениями воспроизведения данных
мультимедиа, и проигрыватель Windows Media пользуется ею наряду
с повышением приоритетов службой MMCSS для почти
безошибочного воспроизведения локального содержимого.
Приложение проигрывателя мультимедиа запрашивает у
системы ввода-вывода гарантии возможности чтения данных на
указанной скорости и если устройство может предоставлять данные с
указанной скоростью, а существующие ограничения резервирования
это позволяют, оно предоставляет приложению данные о допустимой
скорости и объеме операций ввода-вывода. Система ввода-вывода
станет обслуживать другие операции только в том случае, если
возможно
удовлетворить
требования
приложений,
зарезервировавших целевое устройство хранения.
В завершение следует упомянуть о еще одном изменении в
системе ввода-вывода, относящемся к объему операций вводавывода. Со времен первой версии ОС Windows NT диспетчер памяти
и
система
ввода-вывода
ограничивали
объем
данных,
обрабатываемых отдельным запросом ввода-вывода для устройства
хранения, 64 КБ. Таким образом, даже если запрос ввода-вывода
приложения был значительно больше, он разбивался на отдельные
запросы, не превышающие 64 КБ.
Каждая операция ввода-вывода подразумевала дополнительные
затраты ресурсов на переключение в режим ядра и инициирование
передачи ввода-вывода на устройство хранения, поэтому в ОС
Windows Vista объем операций ввода-вывода больше не
ограничивается. Некоторые компоненты пользовательского режима
ОС Windows Vista подверглись модификациям для того, чтобы
воспользоваться преимуществами большего объема операций вводавывода, включая функцию копирования в Проводнике и команду
командной строки Copy (Копировать), которые теперь оперируют
операциями ввода-вывода объемом 1 МБ.
Download