Задания по планированию потоков
Задание 1. Определить величину интервала системного таймера на виртуальной машине.
Указания к выполнению.
1. Откройте отладчик ядра WinDbg.
2. Запустите виртуальную машину Windows Server 2003 SP1 в режиме отладки.
3. Остановите выполнение виртуальной машины в отладчике, нажав Ctrl+Break.
4. Определим значение переменной KeMaximumIncrement, в которой содержится длительность интервала системного таймера.
В командной строке отладчика введите команду:
dd KeMaximumIncrement
В окне команд должно быть выведено содержимое памяти:
Команда dd (Display Double word) отображает содержимое памяти как набор 4 байтовых значений.
Значение 4 байтовой переменной KeMaximumIncrement в данном примере равно 0x18730 = 100 144 в десятичном виде. В этой переменной хранится длительность интервала системного таймера в сотнях наносекунд (1 нс = 10–9 с). Переведем полученное значение в миллисекунды (1 мс = 10–3 с):
100 144 сотен нс = 100 144 * 100 * 10–9 с = 0, 0100144 с = 10, 0144 мс.
Проверить полученное значение длительности интервала системного таймера можно при помощи утилиты clockres от Sysinternals (http://technet.microsoft.com/ru-ru/sysinternals). Запустите эту утилиту на виртуальной машине из командной строки:
Задание 2. Определить величину кванта, предоставляемого потокам.
Указания к выполнению.
1. Узнайте адрес структуры EPROCESS какого-либо процесса в системе, например, explorer.exe (см. Лабораторную работу 2 "Процессы и потоки").
Для этого в отладчике ядра введите команду:
!process 0 0
и найдите адрес структуры EPROCESS для процесса explorer.exe:
В данном примере адрес равен 0x81EBCBD8.
2. Величина кванта для потоков процесса хранится в поле QuantumReset структуры KPROCESS. Структура KPROCESS содержится в поле Pcb структуры EPROCESS, причем это поле находится в самом начале структуры (смещение равно нулю). Поэтому можно отобразить структуру KPROCESS с того же адреса, по которому располагается EPROCESS:
dt kprocess 81EBCBD8
Значение поля QuantumReset равно 36 единицам, что составляет 12 интервалов системного таймера (см. лекцию 9 "Планирование потоков") – значение кванта по умолчанию для серверных операционных систем Windows.