Задания по планированию потоков
Задание 3. Изменить величину кванта.
Указания к выполнению.
1. В виртуальной машине с операционной системой Windows Server 2003 SP1 щелкните правой кнопкой мыши на ярлыке My Computer – выберите пункт Properties – перейдите на вкладку Advanced – щелкните на кнопку Settings в разделе Performance:
В появившемся окне Performance Options перейдите на вкладку Advanced и в разделе Processor scheduling выберите пункт Programs:
2. Проверьте значение поля QuantumReset для процесса explorer.exe. Оно должно быть равно 6:
Задание 4. Определить значения класса приоритета и базового приоритета процесса.
Указания к выполнению.
1. В отладчике WinDbg определите адрес процесса explorer.exe.
2. Для процесса explorer.exe выведите на экран значения полей структуры EPROCESS. Класс приоритета процесса хранится в поле PriorityClass.
3. Определите символьное значение класса приоритета – воспользуйтесь проектом Visual Studio для WRK и найдите там структуру _PROCESS_PRIORITY_CLASS. В том же файле выше описания этой структуры содержатся определения констант для классов приоритета. Установите соответствие полученного числового значения и класса приоритета для процесса explorer.exe.
4. Для процесса explorer.exe выведите на экран значения полей структуры KPROCESS. Базовый приоритет процесса хранится в поле BasePriority. Значение базового приоритета должно соответствовать классу приоритета процесса (см. рис. 3 в лекции 9 "Планирование потоков").
Задание 5. Изменить базовый приоритет процесса.
Указания к выполнению.
1. В виртуальной машине запустите утилиту Process Explorer.
2. Найдите процесс explorer.exe, щелкните на нем правой кнопкой мыши, выберите пункт Set Priority и установите значение приоритета High: 13:
3. Проверьте в отладчике, что значения полей PriorityClass и BasePriority для процесса explorer.exe изменились.
Задание 6. Исследовать структуру KPRCB (Kernel Processor Control Block).
Указания к выполнению.
1. Выведите описание полей структуры KPRCB при помощи команды:
dt nt!_kprcb
Обратите внимание, что в команде нужно указать модуль – nt (ядро), иначе выведется информация из ntdll.dll, а также указать знак подчеркивания, иначе информация будет неполной.
Часть вывода данной команды приведена на рисунке:
2. Определите адрес структуры KPRCB.
В отладчике введите команду:
!prcb
В данном примере адрес структуры KPRCB равен FFDFF120.
3. Выведите значение полей структуры KPRCB.
В отладчике введите команду:
dt nt!_kprcb FFDFF120
Часть вывода для этой команды приведена на рисунке:
Обратите внимание на указатели текущего потока (CurrentThread), следующего потока (NextThread) и потока простоя (IdleThread). В примере на рисунке видно, что указатели текущего потока и потока простоя совпадают, т. е. в настоящий момент времени процессор занят потоком простоя.