ОС / 5. ОС - Управление процессами - 2
.pdfОперационные системы.
Управление процессами – 2: Windows и UNIX
лектор: Дроздов Сергей Николаевич
доцент кафедры МОП ЭВМ ЮФУ
dr@pochtamt.ru _dr@mail.ru
Таганрог 2012 г.
2
Процессы в Windows
Процесс всегда связан с выполнением некоторой программы (обычно EXE-файла).
Функция CreateProcess; ее параметры:
имя файла запускаемой программы;
атрибуты защиты;
флаги режима создания процесса:
класс приоритета;
отладочный режим;
приостановка после создания;
адрес блока среды (environment) процесса;
текущий каталог процесса;
параметры первого создаваемого процессом окна;
адрес блока информации, куда будут записаны хэндлы и идентификаторы процесса и его первой нити.
Операционные системы. Управление процессами - 2
3
Нити (threads) в Windows
Первая нить создается одновременно с процессом.
Дополнительные нити могут быть соданы функцией CreateThread. Ее параметры:
атрибуты защиты;
размер стека нити;
стартовый адрес нити (обычно имя функции);
параметр-указатель, позволяющий передать нити значения аргументов;
флаг приостановки после создания;
указатель на переменную, куда будет записан идентификатор нити;
функция возвращает хэндл созданной нити.
Операционные системы. Управление процессами - 2
4
Завершение процессов инитей
Завершение нити: ExitThread(код_завершения).
Завершения процесса: ExitProcess(код_завершения).
При завершении процесса завершаются и все его нити.
При завершении последней нити завершается весь процесс.
Завершение процесса приводит к освобождению всех ресурсов, которыми владел процесс: памяти, открытых файлов и т.п.
Операционные системы. Управление процессами - 2
5
Классы приоритетов процессов в Windows
Низкий (Idle) : от 2 до 6.
экранные заставки, мониторы производительности, индексирование для поиска и т.п..
Ниже среднего (Below normal) : от 4 до 8. Средний (Normal) : от 6 до 11.
по умолчанию, для большинства обычных приложений.
Выше среднего (Above normal) : от 8 до 12. Высокий (High): от 11 до 15.
допускается для процессов, имеющих очень короткие интервалы активности.
Реального времени (Realtime): от 16 до 31.
крайне опасно, может заблокировать все реакции системы на клавиатуру, мышь и т.п.;
Операционные системы. Управление процессами - 2
6
Приоритеты нитей в Windows
При запуске устанавливаются в соответствии с классом приоритета процесса.
Могут быть программно увеличены или уменьшены установкой уровня приоритета нити.
Увеличиваются системой (если нить не относится к процессу реального времени):
когда нить владеет окном переднего плана;
когда нить (или ее окно) получает сообщения от клавиатуры, мыши или таймера;
когда нить пробуждается из состояния сна;
если низкоприоритетная нить слишком долго не получала квантов процессорного времени.
Уменьшаются системой на 1 (но не ниже базового приоритета) всякий раз, когда нить получает и полностью использует квант времени процессора.
Операционные системы. Управление процессами - 2
7
Приоритеты нитей в Windows
|
Процесс имеет класс |
|
Realtime |
24 |
|
приоритета, с |
|
High |
13 |
|
которым связан |
|
Above Normal |
10 |
|
|
Normal |
8 |
|
|
базовый уровень: |
|
Below Normal |
6 |
|
|
|
Idle |
4 |
|
Нить может иметь |
|
Time Critical 15 или 31 |
|
|
отклонение |
|
Highhest |
+2 |
|
|
Above Normal |
+1 |
|
|
относительно базового |
|
Normal |
0 |
|
уровня: |
|
Below Normal |
-1 |
|
|
Lowest |
-2 |
|
|
|
|
Idle |
1 или 16 |
Для нитей класса Realtime система не может динамически изменять приоритеты.
31
16
15
Такие нити, если они занимают много |
1 |
времени, напрочь затыкают систему.
Операционные системы. Управление процессами - 2
8
Процесс и нить как объекты
Функция OpenProcess позволяет одному процессу получить хэндл любого другого процесса (если это допускается атрибутами защиты). Ее параметры:
идентификатор интересующего процесса;
маска запрашиваемых прав доступа.
Аналогично, OpenThread получает хэндл нити.
Кроме того, процесс-родитель получает хэндлы создаваемых им процессов и нитей.
Операционные системы. Управление процессами - 2
9
Процесс и нить как объекты
Получив хэндл процесса или нити, можно использовать его в API-функциях, выполняющих различные операции над этим объектом, например:
запускать новую нить процесса;
запрашивать и изменять класс приоритета процесса или приоритет нити;
читать и записывать данные в памяти процесса;
использовать процесс или нить в качестве объекта синхронизации;
принудительно прекращать выполнение процесса или нити;
запрашивать код завершения процесса или нити.
Операционные системы. Управление процессами - 2
10
Способы синхронизации нитей
Обмен сообщениями (функции SendMessage, PostMessage, GetMessage и др.)
Предназначены в основном для управления пользовательским интерфейсом.
Недостаток: не годятся для реального времени. Время обработки сообщения, включая время ожидания в очереди, значительно и малопредсказуемо.
Объекты синхронизации и функции ожидания (будут рассмотрены ниже).
Переменные типа CRITICAL_SECTION – частный случай ожидания, применимый только между потоками одного процесса, но зато более быстрый, чем использование объектов.
Операционные системы. Управление процессами - 2