Мегаобучалка Главная | О нас | Обратная связь


Процессы и потоки в Windows



2015-12-13 799 Обсуждений (0)
Процессы и потоки в Windows 0.00 из 5.00 0 оценок




ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 1

1. Понятие ресурса. Редакторы и трансляторы ресурсов.

2. Состояния потока.

Состояния потоков

На рис. 7.4, взятом из [9] (см. также [38], версию, обновленную Соломоном (Solomon) и Руссиновичем (Russinovych)), представлена схема планирования потоков и показаны их возможные состояния. Кроме того, этот рисунок иллюстрирует результаты работы программы. Такие диаграммы состояния являются общими для всех многозадачных ОС и помогают выяснить, каким образом планируется выполнение потоков и как они переходят из одного состояния в другое.

Рис. 7.4. Состояния потоков и переходы между состояниями (Источник: Inside Windows NT,Copyright © 1993, by Helen Custer. Copyright Microsoft Press. Воспроизводится с разрешения Microsoft Press. Все права сохранены.)

 

Ниже приводится краткая сводка основных положений. Для получения более подробной информации по этому вопросу обратитесь в [38] или к руководству по ОС.

• Поток находится в состоянии выполнения (running state), если она фактически выполняется процессором. В SMP-системах в состоянии выполнения могут находиться одновременно несколько потоков.

• Планировщик переводит поток в состояние ожидания (wait state), если он выполняет функцию ожидания несигнализирующих объектов, например, потоков или процессов, или перехода в сигнальное состояние объектов синхронизации, о чем говорится в главе 8. Операции ввода/вывода также будут ожидать завершения передачи дисковых или иных данных, но ожидание может быть вызвано и другими многочисленными функциями. О потоках, находящихся в состоянии ожидания, нередко говорят как о блокированных (blocked) или спящих (sleeping).

• Поток находится в состоянии готовности (ready state), если она может выполняться. Планировщик в любой момент может перевести такой поток в состояние выполнения. Когда процессор станет доступным, планировщик запустит тот из потоков, находящихся в состоянии готовности, который обладает наивысшим приоритетом, а при наличии нескольких потоков с одинаковым высшим приоритетом запущен будет та, который пребывал в состоянии готовности дольше всех. При этом поток проходит через состояние простоя (standby state), или резервное состояние.

• Обычно, в соответствии с приведенным описанием, планировщик помещает поток, находящийся в состоянии готовности, на любой доступный процессор. Программист может указать маску родства процессоров (processor affinity mask) для потока (см. главу 9), предоставляя потоку процессоры, на которых он может выполняться. Используя этот способ, программист может распределять процессоры между потоками. Соответствующими функциями являются SetProcessorAffinityMask и GetProcessorAffinityMask. Функция SetThreadIdealProcessor позволяет указать предпочтительный процессор, подлежащий использованию планировщиком при первой же возможности.

• После истечения кванта времени, отведенного выполняющемуся потоку, планировщик без ожидания переводит его в состояние готовности. В результате выполнения функции Sleep(0) поток также будет переведен из состояния выполнения в состояние готовности.

• Планировщик переводит ожидающий поток в состояние готовности сразу же, как только соответствующие дескрипторы оказываются в сигнальном состоянии, хотя при этом поток фактически проходит через промежуточное переходное состояние (transition state). В подобных случаях принято говорить о том, что поток пробуждается (wakes).

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

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

• Поток переходит в состояние завершения (terminated state) тогда, когда его выполнение завершается, и остается в этом состоянии до тех пор, пока остается открытым хотя бы один из ее дескрипторов. Это позволяет другим потокам запрашивать состояние данного потока и его код завершения.

 

Поток описывает динамическое поведение всей программы или какой-

либо функции в программе. Для удобства обозначений предположим, что

программа является однопоточной. Тогда поток можно рассматривать как пару:

поток = (процессор, программа).

Программа может исполняться процессором только в случае, если она

готова к исполнению. Кроме того необходимо, чтобы и сам процессор был

свободен и готов к исполнению этой программы.

Для записи состояний процессора и программы введем следующие

названия: для процессора - "не выделен", "выделен", а для программы - "не

готова", "готова".

Тогда состояние потока можно определить как пару состояний:

состояние потока = (состояние процессора, состояние программы).

Введем для состояний потока следующие названия: “блокирован” ("не

выделен", "не готова"), “готов” ("не выделен", "готова") и “выполняется”

("выделен", "готова").

Диаграмма возможных переходов потока из состояния в состояние может

быть изображена, как это показано на рис.2.1

Сами переходы потока из состояния в состояние, которые на диаграмме

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

На диаграмме показаны следующие состояния:

"новый" - поток, еще не начавший свою работу,

"завершен" - поток, завершивший свою работу,

"спит" - поток в сонном состоянии, т.е. приостановил свое исполнение на

некоторый интервал времени,

Сами переходы потока из состояния в состояние, которые на диаграмме

обозначаются дугами, описывают некоторые операции над потоком. Названия

этих операций указаны рядом со стрелками. Кратко опишем эти операции.

- Операция create выполняется потоком, который создает новый поток и

переводит поток из состояния "новый" в состояние "готов".

- Операция Exit выполняется самим потоком в случае его завершения и

переводит поток из состояния "выполняется" в состояние "завершен".

- Операция Run выделяет ему процессорное время и переводит поток из

состояния "готов" в состояние "выполняется".

- Операция interrupt задерживает исполнение потока и переводит его из

состояния "выполняется" в состояние "готов". Эта операция выполняется, если

истекло процессорное время, или исполнение потока прервано по каким-либо

другим причинам.

- Операция Block переводит поток из состояния "выполняется" в

состояние "блокирован". Эта операция выполняется в случае, если он ждет

наступления некоторого события, например, завершения операции ввода-

вывода или освобождения ресурса.

- Операция unblock переводит поток из состояния "блокирован" в

состояние "готов". Эта операция выполняется над потоком в том случае, если

событие, ожидаемое потоком, наступило.

- Операция suspend приостанавливает исполнение потока.

- Операция Resume возобновляет исполнение потока.

- Операция sleep переводит поток в состояние "спит".

- Операция wakeup позволяет операционной системе разбудить поток.

 

3. Управление процессами. Процессы и потоки в Windows.

Процесс содержит собственное независимое виртуальное адресное

пространство с кодом и данными, защищенными от других процессов. Каждый

процесс, в свою очередь, включает в себя один или более независимо

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

и новые независимые процессы, а также управлять сообщением и

синхронизацией объектов.

Создавая процессы и управляя ими, приложения могут одновременно

выполнять задачи по обработке файлов, производить вычисления и

взаимодействовать с другими системами в сети. Возможно даже использование

нескольких процессоров для ускорения обработки.

Процессы и потоки в Windows

Каждый процесс содержит один или более потоков. Поток в Windows—

основная единица выполнения.

С точки зрения программиста, каждый процесс в Win32 включает

компоненты, перечисленные ниже.

• Один или несколько потоков.

• Виртуальное адресное пространство, отличное от адресных пространств

других процессов, за исключением случаев явного разделения памяти.

Отметим, что отображаемые в память файлы разделяют физическую память,

но разные процессы для доступа к отображенному файлу будут

использовать разные виртуальные адреса.

• Один или более сегментов кода, включая код DLL.

• Один или более сегментов данных, содержащих глобальные переменные.

• Строки окружения с информацией о переменных окружения, таких как

текущий путь поиска.

• Память кучи процесса.

• Такие ресурсы, как открытые дескрипторы и другие кучи.

Процесс

Блок окружения

Код

Глобальные переменные

Память кучи процесса

Ресурсы процесса

Открытые файлы

Кучи

Поток 1

Локальная область памяти потока

Стек

Поток N

Локальная область памяти потока

Стек

 



2015-12-13 799 Обсуждений (0)
Процессы и потоки в Windows 0.00 из 5.00 0 оценок









Обсуждение в статье: Процессы и потоки в Windows

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (799)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)