Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемДиана Серебрянникова
1 Управление процессами и потоками в Microsoft Windows Представление процессов Диспетчеризация процессов и потоков Планирование процессов и потоков
2 Характеристики процесса Процесс как самостоятельная сущность рассматривается на уровне архитектуры ЭВМ и на уровне ОС. На уровне архитектуры ЭВМ процесс характеризуется: - контекстом; - адресным пространством. На уровне ОС процесс описывается специальной структурой уровня ядра – PCB (Process Control Block)
3 Представление процесса в защищенном режиме процессора Intel GDTR LDTR TR CS GDT LDT Оперативная память TSS Сегмент кода Доп. сегмент основной сегменты кода, данных, стека Дескриптор TSS активного процесса Дескриптор сегмента кода активного процесса Дескриптор доп. сегмента Селектор сегмента кода Копия дескриптора TSS Селектор TSS
4 Адресное пространство процесса в защищенном режиме процессора Intel - Через дескрипторы в таблице LDT - Селекторы дополнительных сегментов хранятся в сегментных регистрах DS, ES, FS, GS, SS Могут содержать код и данные, в т.ч. собственные стеки процесса (задачи) Другие сегменты - Через дескриптор в таблице LDT - Селектор дескриптора всегда хранится в регистре CS Каждая задача обязательно должна иметь хотя бы один сегмент кода Сегмент кода - Через специальный системный дескриптор, который хранится в таблице GDT - Селектор дескриптора и копия самого дескриптора хранятся в регистре TR Task Status Segment – сегмент состояния задачи Хранит полное описание контекста задачи TSS АдресацияОписаниеСегмент
5 Контекст процесса в защищенном режиме процессора Intel - Регистры общего назначения (EAX, EBX, ECX, EDX, EDI, ESI, ESP, EBP); - Регистры состояния (EIP, EFLAGS); - Регистры состояния процессора (CR0-CR4); - Сегментные регистры (CS, DS, ES, FS, GS, SS); - Регистры управления памятью (LDTR, TR); - Значение поля селектора TSS из регистра TR для процесса, который запустил данный процесс; - Содержимое таблицы LDT; - Содержимое каталогов и таблиц страниц; - Адрес битовой карты ввода/вывода.
6 Представление процесса на уровне ОС В общем случае – информация о процессе (контекст процесса) ОС хранят в структурах PCB – Process Control Block (блок управления процессом) Структура PCB и состав контекста процесса различен для каждой конкретной ОС
7 Представление процессов в ОС Windows XP Процесс – абстрактная структура, определяющая единое адресное пространство и контекст одного или нескольких взаимосвязанных потоков Поток – системный объект операционной системы, реально выполняющийся в процессоре. При создании любого процесса всегда создается первичный поток Потоки могут порождать новые потоки Процесс Основной поток Порожденный поток
8 Структуры Windows для управления процессами и потоками (обобщенная схема)
9 Структура EPROCESS
10 Блок процесса ядра (PCB)
11 Блок переменных окружения процесса (PEB)
12 Структура ETHREAD
13 Структура KTHREAD
14 Блок переменных окружения потока (TEB)
15 Уровни управления процессами Аппаратный уровеньРеализуются примитивные операции по управлению процессами: -прерывания; -переключение контекстов задач. Диспетчеризация процессов (уровень ядра) Реализуются примитивы перевода процессов из одного состояния в другое – запуск, приостановка, возобновление, остановка (завершение) Планирование процессов (уровень менеджера процессов) Реализуется строгий и сложный алгоритм управления состояниями процессов с учетом различных факторов, условий функционирования процессов, особенностей аппаратной части и операционной системы
16 Механизмы управления процессами, реализуемые аппаратно Базовые аппаратные механизмы Прерывания Переключение задач Все механизмы, реализуемые аппаратно, в ОС Microsoft Windows замаскированы уровнем HAL
17 Представление процесса на аппаратном уровне (CPU Intel) GDTR LDTR TR CS LDT Оперативная память TSS Сегмент кода Доп. сегмент основной сегменты кода, данных, стека Дескриптор TSS активного процесса Дескриптор сегмента кода активного процесса Дескриптор доп. сегмента Селектор сегмента кода Селектор TSS Копия дескриптора TSS
18 Реализация переключения задач в защищенном режиме CPU Intel Для команд CALL и JMP проверяет привилегии (CPL текущей задачи и RPL селектора новой задачи не могут быть больше, чем DPL шлюза или TSS, на который передается управление). Проверяется дескриптор TSS (его бит присутствия и лимит). Проверяется, что новый TSS, старый TSS и все дескрипторы сегментов находятся в страницах, отмеченных как присутствующие. Сохраняется состояние задачи. Загружается регистр TR. Если на следующих шагах происходит исключение, его обработчику придется доделывать переключение задач, вместо того чтобы повторять ошибочную команду. Тип новой задачи в дескрипторе изменяется на занятый и устанавливается флаг TS в CR0. Загружается состояние задачи из нового TSS: LDTR, CR3, EFLAGS, EIP, регистры общего назначения и сегментные регистры.
19 Механизмы диспетчеризации процессов уровня ядра Windows Создание процесса Создание потока Приостановка процесса Приостановка потока Активизация процесса Активизация потока Завершение процесса Завершение потока
20 Создание процесса в Windows и функция CreateProcess Открытие файла-образа процесса (имя.exe или имя.com) Создание объекта процесс исполнительной системы (PCB) Создание первичного потока Уведомление о создании процесса и первичного потока Начать выполнение первичного потока Инициализировать адресное пространство процесса в контексте нового процесса и потока, подгрузить динамические библиотеки (*.dll) Начать выполнение программы
21 Предварительные действия при запуске процесса Перед запуском процесса CreateProcess проверяет параметр CreationFlags, который указывается при запуске нового процесса и задает приоритеты процесса. Если задано несколько приоритетов, Windows выберет самый низкий из них Если приоритеты процесса не заданы, то Windows установит приоритет Normal Если приоритет процесса-создателя Idle или Bellow Normal, а приоритет нового процесса не указан, то Windows установит приоритет нового процесса равный приоритету процесса создателя Если создается процесс с приоритетом Real-Time, а создатель не имеет привилегий на создание таких процессов и/или привилегии Increase Scheduling Priority, то новый процесс будет создан с приоритетом High, что ниже приоритета Real-Time Происходит сопоставление окна процесса с объектом «рабочий стол»
22 Этап 1. Открытие файла-образа Поиск Windows-образа, который будет выполнять указанный процесс, и создание объекта «раздел» для последующего проецирования его на адресное пространство нового процесса В качестве имени Windows-образа выбирается первый параметр командной строки Проверка политики безопасности (не запрещает ли она запуск данного процесса) Если запускается программа Windows, то она используется напрямую Если запускается не-Windows приложение, то ОС ищет специальный образ поддержки (support image) для запуска данной программы
23 Этап 1. Открытие файла-образа
24 Этап 1. Открытие файла-образа: завершение Запускаемый файл успешно открыт Для него создан объект «раздел», но этот раздел еще не спроецирован в память Если в процессе открытия файла возникают проблемы, то Windows находит в реестре информацию об отладчике для данного типа приложений и повторно запускает CreateProcess
25 Этап 2. Создание объекта «процесс» Формируется блок EPROCESS Создается начальное адресное пространство процесса Инициализируется блок процесса ядра (KPROCESS) Инициализируется адресное пространство процесса, в т.ч. список рабочего набора и дескрипторы виртуального адресного пространства Образ процесса проецируется на адресное пространство Формируется блок PEB Завершается инициализация объекта «процесс» исполнительной системы Windows
26 Этап 2а: Формирование блока EPROCESS Создание блока EPROCESS От родительского процесса наследуется привязка к процессорам Устанавливаются минимальное и максимальное значения рабочего набора Настраивается блок квот нового процесса (устанавливается ссылка на блок квот родительского процесса и увеличивается счетчик ссылок последнего) Наследуется пространство имен устройств Windows Для нового процесса сохраняется идентификатор родительского процесса Настраивается маркер доступа Наследуется от родителей Если используется функция CreateProcessAsUser создается новый маркер Инициализируется таблица описателей Статус нового процесса заменяется на STATUS_PENDING
27 Этап 2b: создание начального адресного пространства процесса В соответствующих таблицах страниц формируются записи, позволяющие подкачивать начальные страницы процесса Значение максимально доступного количества резидентных страниц процесса уменьшается на значение количества страниц в рабочем наборе по умолчанию На адресное пространство проецируются страницы таблицы страниц для неподкачиваемого системного адресного пространства и системного кэша
28 Этап 2c: создание блока процесса ядра (KPROCESS) Инициализация блока KPROCESS Устанавливаются ссылки на блоки потоков ядра (KTHREAD) Устанавливаются ссылки на таблицы страниц процесса Инициализируются поля блока KPROCESS, хранящие информацию о времени выполнения процесса Устанавливается базовый приоритет процесса Устанавливается привязка процесса к процессорам Определяется базовое значение кванта времени для данного процесса
29 Этап 2d: инициализация адресного пространства процесса Диспетчер виртуальной памяти присваивает времени последнего усечения рабочего набора процесса текущее время Инициализируется список страниц рабочего набора Раздел проецируется на адресное пространство процесса, и базовый адрес раздела процесса приравнивается базовому адресу образа На адресное пространство процесса проецируется ntdll.dll На адресное пространство процесса проецируются таблицы NLS (National Language Support)
30 Этап 2е: инициализация блока PEB Формируется блок PEB Заполняются поля блока PEB
31 Этап 2f: завершение инициализации блока «процесс» исполнительной системы Если разрешен аудит, то факт создания процесса фиксируется в журнале безопасности Если родительский процесс входил в задание, то и новый процесс включается в задание Если для процесса был указан флаг создания, отмечающий, что данный процесс может выполняться только в однопроцессорной системе, то для выполнения всех потоков процесса выбирается один процессор Привязка процесса к процессору копируется в PEB и в дальнейшем используется как привязка по умолчанию Блок процесса помещается в конец списка активных процессов Устанавливается время создания процесса Возвращается дескриптор созданного процесса
32 Этап 3. Создание первичного потока К началу этого этапа процесс полностью создан, но не может ничего делать, т.к. у него нет ни одного потока Для создания потока необходимо создать стек и контекст, в котором он будет выполняться Первичный поток создается системным вызовом NtCreateThread с параметром PEB Поток будет создан в приостановленном состоянии и не будет ничего делать до окончания инициализации процесса
33 Этап 3. Создание первичного потока: NtCreateThread Увеличивает счетчик потоков для данного процесса Создает и инициализирует блок потока ETHREAD Генерирует идентификатор нового потока В пользовательском адресном пространстве формируется TEB Стартовый адрес потока пользовательского режима сохраняется в блоке ETHREAD Для Windows-потоков это адрес системной стартовой функции потока в kernel32.dll Стартовый адрес, указанный пользователем, также сохраняется в ETHREAD, но в другом месте, что позволяет системной функции вызвать пользовательскую стартовую функцию
34 Этап 3. Создание первичного потока: NtCreateThread (продолжение) Инициализируется блок KTHREAD, в который заносятся параметры, необходимые для диспетчеризации и планирования потоков Вызываются общесистемные функции для уведомления о создании потока Настраиваются маркеры доступа потока Поток готов к выполнению
35 Этап 4. Уведомление подсистемы Windows о новом процессе К данному моменту созданы и процесс, и его первичный поток Kernel32.dll отправляет подсистеме Windows уведомление: Описатели процесса и потока Флаги создания Идентификатор родительского процесса Флаг принадлежности процесса к Windows- приложениям Получив уведомление Windows должна подготовиться к выполнению нового процесса и потока
36 Этап 4. Уведомление подсистемы Windows о новом процессе CreateProcess дублирует описатели процесса и потока, в результате чего количество пользователей процесса становится равным 2 Устанавливается класс приоритета процесса Создается и инициализируется блок процесса Csrss Настраивается порт исключений процесса как общий порт функций для подсистемы Windows. Таким образом, она сможет получать сообщения о возникновении исключений Если процесс в данный момент отлаживается, то в качестве порта функций выбирается отладочный порт Создается и инициализируется блок потока Csrss
37 Этап 4. Уведомление подсистемы Windows о новом процессе (продолжение) CreateProcess включает поток в список потоков процесса Увеличивается счетчик процессов в данном сеансе Устанавливается уровень завершения процесса по умолчанию 0х280 Блок нового процесса включается в список общесистемных процессов Windows Создается и инициализируется структура W32PROCESS, индивидуальная для каждого процесса и используемся той частью процесса, которая выполняется в режиме ядра Выводится курсор в виде стрелки с песочными часами – система ждет от процесса GUI-вызова
38 Этап 5. Запуск первичного потока Для завершения инициализации процесса необходимо возобновить его первичный поток (который был создан, как приостановленный), если при этом не указан флаг CREATE_SUSPENDED
39 Этап 6. Инициализация в контексте нового процесса Начинается выполнение первичного потока нового процесса Происходит системный вызов KiThreadStartup, который понижает уровень IRQL с DPC/dispatch до APC Вызывается системная функция PspUserThreadStartup, параметром которой являтся стартовый адрес потока Функция PspUserThreadStartup проверяет, разрешена ли в системе предвыборка и, если да, то производит предвыборку страниц процесса, которые он запускал в течении первых 10 сек при предыдущем запуске Затем функция PspUserThreadStartup ставит APC пользовательского режима в очередь для запуска процедуры инициализации потока
40 Этап 6. Инициализация в контексте нового процесса (продолжение) Когда поток вернется в пользовательский режим, APC будет доставлен После завершения PspUserThreadStartup управление передается KiThreadStartup, которая возвращается из режима ядра, доставляет APC, инициализирует загрузчик, кучи, таблицы NLS, массивы локальной памяти потока и структуры критической секции Функция KiThreadStartup загружает необходимые dll и вызывает их точки входа Управление возвращается диспетчеру APC пользовательского режима Начинается выполнение образа в пользовательском режиме
41 Создание потока в Windows и функция CreateThread Создание стека пользовательского режима в адресном пространстве процесса Инициализация аппаратного контекста потока Создать объект потока исполнительной системы (в приостановленном состоянии) Уведомление Windows о создании нового потока Вернуть порождающему процессу (потоку) идентификатор и дескриптор (HANDLE) созданного потока Начать выполнение потока
42 Планирование потоков в Windows Дисциплина планирования Windows реализована на основе вытесняющего планирования В системе используются приоритеты Всегда первым вытесняется готовый к выполнению поток, обладающий наибольшим приоритетом На выбор потоков к выполнению также влияет привязка потоков (а точнее – процессов) к процессору Для управления временем выполнения потока используется система квантования времени Величина кванта не постоянна и зависит от Конфигурационных параметров системы Статуса процесса (активный или фоновый) Использованием объекта «задание»
43 Диспетчеризация на уровне ядра – диспетчер ядра Диспетчеризация может быть вызвана одним из следующих событий: Поток готов к выполнению – только что создан или вышел из состояния ожидания Поток вышел из состояния Running (истек квант времени или поток переходит в состояние ожидания) Изменяется приоритет процесса из-за системного вызова или самой Windows Изменена привязка к процессорам, из-за чего процесс не может больше выполняться на данном процессоре
44 Уровни приоритета
45 Назначение приоритетов с точки зрения WindowsAPI По приоритету процесса Real-time High Above normal Normal Bellow normal Idle По относительному приоритету потоков в рамках процесса Time-critical Highest Above normal Normal Bellow normal Lowest Idle
46 Связь между приоритетами WindowsAPI и ядра Windows
47 Установка базового приоритета процессов и потоков Базовый приоритет процесса устанавливается при его создании (параметром CreationFlags функции CreateProcess) Если базовый приоритет процесса не указан, то он наследуются от родительского процесса (как правило, он устанавливается в Normal) Базовый приоритет потока устанавливается в соответствии с унаследованным приоритетом процесса и собственным относительным приоритетом Кроме базового приоритета, каждый поток имеет текущий приоритет, на основании которого принимаются все решения относительно планирования потока
48 Состояния потоков в ОС Windows 2000/XP
49 Состояния потоков в OC Windows Server 2003
50 База данных диспетчера ядра Для каждого уровня приоритетов – своя очередь 32-битна маска Бит устанавливается в 1, если в соответствующей очереди есть поток
51 Квант Квант – интервал процессорного времени, отводимый Windows для выполнения потока По истечении кванта Windows пытается передать управление потоку с тем же приоритетом. Если такого нет, очередной квант отводится тому же потоку, что и выполнялся В Windows 2000/XP величина кванта по умолчанию составляет 2 интервала таймера В Windows Server 2003 – 12 интервалов (увеличен, чтобы минимизировать переключения контекста) Длительность интервала таймера определяется HAL, а не ядром
52 Учет квантов Величина кванта для каждого процесса хранится в блоке процесса ядра в виде количество_интервалов * 3 Это значение кванта используется при запуске потоков Во время выполнения потока величина кванта уменьшается по таймеру, каждый раз на 3 Если поток прерывается, квант выполнения потока все равно уменьшается на 3 при каждом прерывании таймера Для ожидающих потоков (WaitForSingleObject или WaitForMultileObjects) величина кванта уменьшается всегда, даже если они сразу получили доступ к ожидаемому объекту (при этом квант уменьшается на 1)
53 Изменение величины кванта Пользователь может изменить величину кванта, указав одно из двух значений – короткий (2) или длинный (12) в оснастке Performance Options Начиная с Windows NT 4.0 Workstation система использует алгоритм динамического изменения квантов для активных процессов (со статусом выше Idle). Если хотя бы один поток процесса использует активное окно, то его квант времени увеличивается в 3 раза Управление квантами возможно через реестр Windows
54 Сценарии планирования Самостоятельное переключение Вытеснение Завершение кванта Завершение потока
55 Самостоятельное переключение Поток самостоятельно переходит в состояние ожидания (WaitForSingleObject или WaitForMultipleObjects) Система запускает первый готовый поток с наивысшим приоритетом
56 Вытеснение Поток с высоким приоритетом вышел из состояния ожидания или приоритет для данного потока повысился Поток вытесняется. Причиной вытеснения этого потока может быть то, что его приоритет понизился
57 Завершение кванта Для данного потока Windows не понизила приоритет – он остался в конце своей очереди При завершении кванта Windows может понизить приоритет приостановленного потока. Тогда она будет искать для выполнения новый поток с приоритетом, не ниже нового приоритета приостановленного потока
58 Динамическое повышение приоритета После завершения операций ввода-вывода По окончании ожидания на семафоре или событии исполнительной системы По окончании операции ожидания потоками активного процесса При пробуждении GUI-процессов в связи с операциями с окнами Если поток, готовый к выполнению, задерживается из-за нехватки процессорного времени
59 Повышение приоритета после завершения операций ввода-вывода Windows считает, что ожидавшие потоки имеют больше шансов немедленно начать выполнение Потоки не получают неоправданных привилегий, т.к. пока они ожидали их квант времени был уменьшен на 1 Величина приращения всегда зависит от устройства, завершения ввода/вывода на котором ожидал поток Приоритет потока всегда повышается относительно базового, а не текущего приоритета Приращение приоритета всегда применяется в области динамических приоритетов Приоритет не может стать больше 15
60 Изменение приоритета после завершения операций ввода-вывода
61 Повышение приоритета после завершения ожидания на семафорах и событиях Приоритет потока повышается на 1, если он ожидал семафора или события (функции WaitForSingleObject или WaitForMultipleObjects), после выполнения функций SetEvent, PulseEvent, ReleaseSemaphore Правила повышения приоритета аналогичны рассмотренным ранее
62 Повышение приоритетов потоков активного процесса после завершения ожидания Текущий приоритет потока в активном процессе всегда повышается на величину PsPrioritySeparation, если он завершил ожидание на объекте ядра Фактически PsPrioritySeparation – индекс в таблице квантов и используется для выбора величины квантов для потоков активного процесса Но в данном случае эта величина (величина кванта) используется как величина изменения приоритета Используется для повышения отзывчивости интерактивных приложений
63 Повышение приоритетов при пробуждении GUI-процессов в связи с операциями с окнами Приоритет потоков, владеющих окнами, повышается на 2 после их пробуждения из-за активности системы управления окнами Используется для повышения отзывчивости интерактивных приложений
64 Повышение приоритетов при нехватке процессорного времени Применяется при блокировке потоков с низким приоритетом потоками с высокими приоритетами (тупики) Диспетчер настройки баланса раз в 1 сек сканирует очереди, чтобы обнаружить тупиковые ситуации При обнаружении блокированных потоков, которые в свою очередь блокируют другие потоки, Windows повышает их приоритет до 15 В Windows 2000/XP квант времени таких потоков удваивается В Windows Server 2003 квант времени для таких потоков устанавливается равным 4
65 Планирование потоков в многопроцессорных системах База данных диспетчера ядра включает в себя несколько стеков очередей – по одной для каждого процессора В БД включается маска активных процессоров, позволяющая определить количество доступных процессоров В системах с HyperThreading Количество логических процессоров не попадает под лицензионные ограничения на количество поддерживаемых процессоров При выборе логического процессора для запуска потока система учитывает, на каком физическом процессоре он реализуется Нагрузка на процессоры рассчитывается на основании физической привязки логических процессоров
66 Планирование потоков в многопроцессорных системах: привязка к процессору Каждый поток имеет маску привязки к процессору Привязка к процессору наследуется от процесса, запустившего поток Привязка потоков к процессору может быть изменена с целью оптимизации производительности и пропускной способности системы Привязка потока к процессору может быть изменена индивидуально или для всех потоков процесса На выбор процессора для выполнения потока влияет не только привязка, но и особенности создания процесса (например, процесс может быть создан для запуска только в однопроцессорных системах)
67 Выбор процессора для потока при наличии простаивающих процессоров При наличии простаивающих процессоров Windows пытается подключить поток к ним в следующем порядке: Идеальный Предыдущий Текущий В Windows 2000 выбирается первый простаивающий В Windows XP и Windows Server 2003 Анализируется маска привязки потока Если система с Hyperthreading и имеется простаивающий физический процессор, то список доступных процессоров сокращается для набора его логических Из полученного списка исключаются спящие процессоры Из списка выбирается процессор с наименьшим номером
68 Выбор процессора для потока при отсутствии простаивающих процессоров Если на идеальном процессоре выполняется поток с приоритетом меньше, чем у запускаемого потока, то запускаемый поток вытеснит выполняющийся поток со своего идеального процессора Если при выборе процессора нельзя выбрать идеальный (только в Windows 2000), то выбирается процессор с наибольшим номером После выбора процессора формируется межпроцессорное прерывание
69 Задания Задание – объект ядра, обеспечивающий управление одним или несколькими процессами, как группой Задание позволяет определить: Максимальное число процессов в группе Общий лимит на процессорное время (для всех процессов задания) в пользовательском режиме Индивидуальные лимиты процессов на процессорное время в пользовательском режиме Класс планирования задания (размер кванта для потоков процессов, входящих в задание) Привязку к процессорам Приоритет всех процессов задания Максимальный и минимальный размеры рабочего набора Лимит на виртуальную память
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.