Понятие процесса. Создание процесса.



Понятие процесса                                                                                Процесс - динамический объект, описывающим выполнение программы. Процессу выделяются системные ресурсы: закрытое адресное пространство, семафоры, коммуникационные порты, файлы и т.д. Процесс характеризуется текущим состоянием (выполнение, ожидание, готовность и т.д.).                                                                                        Процесс описывается структурой «блок управления процессом» (PCB, Process control block). PCB включает состояние процесса, программный счетчик, содержимое регистров процессора, данные для планирования, учетные данные и управление памятью (приоритет: адрес начала адресного пространства и его размер).                                                      Учётные данные процесса (индетификационный номер процесса, общее время процессора). Инфа об устройстве ввода/вывода, связанная с процессом PCB, является моделью для ОС. Псевдопараллельное выполнение предполагает периодическую перестановку процесса путём сохранения контекста.

Создание процесса                                                                                        Процесс создается другим процессом Win32-функцей CreateProcess. Создание процесса осуществляется в несколько этапов.                                   - kernel32.dll на основе нужного файла-образа на диске создает объект "раздел" памяти для его проецирования на АП нового процесса.              - Сист-м сервисом NtCreateProcess создается объекта "процесс". Формируются блоки EPROCESS, KPROCESS и блок переменных окружения PEB. Инициализируется маркер доступа, идентификатор и другие поля в блоке процесса.

- библиотека kernel32.dll с помощью NtCreateThread создать первичный поток в объекте «процесс».

- kernel32.dll посылает подсистеме Win32 информацию, необходимую для выполнения нового процесса.

- устанавливается приоритет процесса

Наконец, запускается первичный поток, для чего формируются его начальный контекст и стек, и выполняется запуск стартовой процедуры потока режима ядра KiThreadStartup. После этого стартовый код из библиотеки C/C++ передает управление функции main() запускаемой программы.

Понятие потока. Состояние потока.

Классический процесс содержит в своем адресном пространстве 1 программу (1 поток). Однако целесообразно поддерживать в едином адресном пространстве процесса несколько выполняющихся программ (потоков команд), работающих с общими данными и ресурсами. В этом случае процесс рассматривается в качестве контейнера ресурсов, а все проблемы исполнения решаются на уровне потоков.                             Потоки описываются структурой TCB(thread control block). Процесс создаётся с помощью функций Create Process AsUser и Create Process. Поскольку потоки являются единицами планирования, то они не могут находиться в одном состоянии.                                                                           В состоянии "Готовности" имеется очередь готовых к выполнению потоков. «Готовность» имеет три составляющих: состояние "Готовности (Ready)"- поток получил все ресурсы процессора; состояние "Готов. Отложен (Deferred Ready)" - поток выбран для выполнения на конкретном процессоре, но не запланирован; состояние "Простоя (Ready Standby)" – поток запланирован для выполнения на конкретном процессе. В таком состоянии могут находиться по одному потоку для каждого процесса.     В состоянии "Ожидания (Block Wait)" поток блокирован и ждет какого-либо события, при наступлении которого поток переходит в состояние "Готовности".                                                                                                                 Код ядра выполняется в контексте текущего потока: при прерывании, системном вызове и т д.

Планирование. Основные положения.

Выбор текущего потока из нескольких активных потоков, пытающихся получить доступ к процессору называется планированием. Поскольку единицей планирования является именно поток, то их принадлежность к процессам не учитывается.                                                                                                            События, связанные с освобождением процессора:                                       завершение потока;                                                                                                    переход потока в состояние готовности в связи с истечением кванта времени;            переход потока в состояние ожидания.                                                                 События, в результате которых пополняется или может пополниться очередь потоков в состоянии готовности:                                                                             поток вышел из состояния ожидания;                                                                       поток только что создан;                                                                                              поток может вывести другой поток из состояния ожидания;                         изменяется приоритет потока.                                                                           Переключение из пользовательского режима в режим ядра (и обратно) не влияет на планирование потока, так как контекст в этом случае не меняется.

Планирование. Приоритеты.

Выбор текущего потока из нескольких активных потоков, пытающихся получить доступ к процессору называется планированием. Поскольку единицей планирования является именно поток, то их принадлежность к процессам не учитывается. 

Выбранный поток работает в течение кванта, после которого процесс передается другому потоку. Предполагается, что поток не знает, в какой момент он будет вытеснен. Поток также м. б. вытеснен, если его квант еще не истек, когда к выполнению готов поток с более высоким приоритетом.

Приоритеты

В ОС Windows реализовано вытесняющее приоритетное планирование, когда каждому потоку присваивается числовой приоритет, в соответствии с которым ему выделяется процессор. Потоки с одинаковыми приоритетами планируются по алгоритму Round Robin (карусель). Достоинство системы - возможность вытеснения потоков в режиме ядра. Не вытесняются лишь потоки, удерживающие спин-блокировку.

В системе предусмотрено 32 уровня приоритетов. Приоритеты (16-31)- группа приоритетов реального времени, (1-15) - обычные потоки, (0) - системный поток обнуления страниц.

Существует система абстрагирования приоритетов. Приоритет можно задать с помощью набора констант-параметров функции SetPriorityClass.

Относительный приоритет потока устанавливается аналогичными параметрами функции SetThreadPriority.

По умолчанию приоритет равен значению из середины диапазонов приоритетов процессов.

Приоритеты с 16 по 31 в действительности приоритетами реального времени не являются. Это просто более высокие приоритеты, которые зарезервированы для системных потоков. Системный поток с нулевым приоритетом занимается обнулением страниц памяти. Обычные пользовательские потоки могут иметь приоритеты от 1 до 15.

Планирование. Динамическое изменение приоритета.

Выбор текущего потока из нескольких активных потоков, пытающихся получить доступ к процессору называется планированием. Поскольку единицей планирования является именно поток, то их принадлежность к процессам не учитывается

Динамическое повышение приоритета

Планировщик принимает решения на основе текущего приоритета потока, который может быть выше базового. Есть несколько ситуаций, когда имеет смысл повысить приоритет потока.

Например, после завершения операции ввода-вывода увеличивают приоритет потока, чтобы дать ему возможность быстрее начать выполнение и, может быть, вновь инициировать операцию ввода-вывода. Таким способом система поощряет интерактивные потоки и поддерживает занятость устройств ввода-вывода. Величина повышения приоритета зависит от устройства. В дальнейшем в течение нескольких квантов времени приоритет плавно снижается до базового.

Также решается задача голодания потоков, долго получающих доступ к процессу. Побочным следствием м.б. решение проблемы инверсии приоритетов

Динамическое повышение приоритетов призвано оптимизировать общую пропускную способность системы, однако от него выигрывают далеко не все приложения. Отключение динамического повышения приоритета можно осуществить при помощи функций SetProcessPriorityBoost и SetThreadPriorityBoost.

Планирование. Планирование в условиях ногопроцессорности.

Выбор текущего потока из нескольких активных потоков, пытающихся получить доступ к процессору называется планированием. Поскольку единицей планирования является именно поток, то их принадлежность к процессам не учитывается

Планирование в условиях многопроцессорности.

Введение отдельных очередей потоков для каждого процессора м.б. следствием неравномерной их загрузки, поэтому используются общие очереди. Любой поток может планироваться на любом процессоре. Поскольку в системе нет главного процессора, каждый из них занимается самопланированием.

Чтобы 2 процессора не выбрали один и тот же поток, для каждого из них организован эксклюзивный доступ к очереди с использованием спин-блокировки. У каждого потока имеется маска привязки к процессорам, указывающая на каких процессорах, его можно выполнять. В ОС Windows используется нежёсткая привязка, т.е. некоторые преимущества имеет последний процессор, на который выполнялся поток, для повторного использования данных из его КЭШа. Также используется номер идеального процессора. Он является предпочтительным для выполнения идеального потока и выбирается случайным образом при создании потока.


Дата добавления: 2018-05-31; просмотров: 425; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!