2. Потоки и процессы
2.1. Поток управления
Определение потока управления
Контекст потока
Пример программы
Пример потока
Пример потока
Граф потока
Многопоточные и однопоточные программы
2.2. Состояния потока
Определение потока как пары
Условия готовности программы к исполнению
Состояния процессора и программы
Возможные состояния процессора
Возможные состояния программы
Краткие обозначения состояний процессора и программы
Состояния потока
Возможные состояния потока
Краткие обозначения состояний потока
Начальное и конечное состояния потока
Диаграмма состояний потока
Диаграмма состояний потока
Операции над потоками, которые выполняются самими потоками
Операции над потоками, которые выполняются операционной системой
Операции над потоками, которые выполняются операционной системой
2.3. Процессы
Определение процесса
Контекст процесса
Необходимые ресурсы процесса
Адресное пространство процесса
Взаимодействие потоков процесса
Взаимодействие потоков процесса
2.4. Потоки в Windows
Определение в Windows
Идентификация потока в Windows
Контекст потока в Windows
Типы потоков в Windows
Типы потоков в приложении
Первичный поток приложения
Функции управления потоками в Windows
2.5. Процессы в Windows
Определение процесса в Windows
Идентификация процесса в Windows
Ресурсы процесса в Windows
Начало и завершение процесса в Windows
Функции для управления процессами в Windows
Дочерние процессы
2.6. Наследование дескрипторов объектов в ОС Windows
Определение наследуемого объекта в Windows
Установка свойства наследования дескриптора объекта
Решение проблемы уникального именования объектов
182.00K

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

1. 2. Потоки и процессы

2. 2.1. Поток управления

3. Определение потока управления

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

4. Контекст потока

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

5. Пример программы

• Например, рассмотрим следующую программу:
int a, b, с;
cin >> a >> b;
if (a < b)
с = b - a;
else
c = a - b;
cout << c << endl;

6. Пример потока

• Предположим, что пользователь ввел следующие данные:
1 2.
• Тогда при работе программы будут выполняться
следующие инструкции:
cin >> a >> b;
if (a < b)
с = b - a;
cout << c << endl;

7. Пример потока

• Теперь предположим, что пользователь ввел следующие
данные: 2 1.
• Тогда при работе программы будут исполняться
следующие инструкции:
cin >> a >> b;
if (a < b)
else
c = a - b;
cout << c << endl;

8. Граф потока

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

9.

cin>>a
cin>>b
no
yes
a<b
?
c=b-a
c=a-b
cout<<c

10. Многопоточные и однопоточные программы

• Если в программе могут одновременно
существовать несколько потоков управления, то
программа называется многопоточной.
• А сами потоки в этом случае называются
параллельными.
• Если в программе одновременно может
существовать только один поток, то такая
программа называется однопоточной.

11. 2.2. Состояния потока

12. Определение потока как пары

• Потоки управления определяют динамическое
поведение программы.
• Для простоты изложения предположим, что
программа является однопоточной.
• Программы исполняются процессором.
• Поэтому поток можно рассматривать как пару
поток = (процессор, программа)

13. Условия готовности программы к исполнению

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

14. Состояния процессора и программы

• Для формального описания условий
готовности программы к исполнению
вводятся понятия:
– состояние процессора,
– состояние программы.

15. Возможные состояния процессора

• Предполагают, что процессор может
находиться в следующих состояниях:
• процессор не выделен для исполнения
программы;
• процессор выделен для исполнения
программы.

16. Возможные состояния программы

• Предполагают, что программа может
находиться в следующих состояниях:
• программа не готова к исполнению
процессором;
• программа готова к исполнению
процессором.

17. Краткие обозначения состояний процессора и программы

• Для краткости записи, введем для этих
состояний следующие названия:
– состояния процессора:
• «не выделен»;
• «выделен»;
– состояния программы:
• «не готова»;
• «готова».

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

• Тогда состояние потока можно определить как
пару состояний:
состояние потока = (состояние процессора, состояние
программы)
• Перечислив различные комбинации состояний
процессора и программы, можно описать
всевозможные состояния потока.

19. Возможные состояния потока

• Введем для состояний потока следующие
названия:
– поток блокирован = (не выделен, не готова);
– поток готов к выполнению = (не выделен, готова);
– поток выполняется = (выделен, готова).
• Будем считать, что состояние (выделен, не готова)
является недостижимым для потока.
• Т. е. процессор не выделяется программе, не
готовой к исполнению.

20. Краткие обозначения состояний потока

• Более кратко эти состояния потока будем
обозначать словами:
– «блокирован»,
– «готов»,
– «выполняется».

21. Начальное и конечное состояния потока

• Кроме того, введем для потоков состояния,
которые обозначают:
– существование программного кода для
создания потока;
– завершение исполнения потока.
• Назовем эти состояния соответственно:
– «новый»;
– «завершен».

22. Диаграмма состояний потока

stm Thread state
Завершен
Новый
Run
Create
Готов
Unblock
Exit
Выполняется
Interrupt
Блокирован
Block

23. Диаграмма состояний потока

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

24. Операции над потоками, которые выполняются самими потоками

• Create – создание нового потока.
– Выполняется потоком, который создает новый поток из
функции.
• Exit – завершение исполнения потока.
– Выполняется самим исполняемым потоком и
завершает его.

25. Операции над потоками, которые выполняются операционной системой

• Run – запускает готовый поток на выполнение, то
есть потоку выделяется процессорное время.
– Выполняется над потоком только в том случае, если
подошла его очередь к процессору на обслуживание.
• Interrupt – прерывает исполнение потока.
– Выполняется над потоком только в том случае, если
истекло процессорное время, выделенное потоку на
исполнение.

26. Операции над потоками, которые выполняются операционной системой

• Block – блокирует исполнение потока.
– Выполняется над потоком в том случае, если он ждет
наступления некоторого события, например,
завершения операции ввода-вывода или
освобождения ресурса.
• Unblock – разблокирует поток.
– Выполняется над потоком в том случае, если событие,
ожидаемое потоком, наступило.

27. 2.3. Процессы

28. Определение процесса

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

29. Контекст процесса

• Все ресурсы, необходимые для исполнения
процесса, называются контекстом
процесса.

30. Необходимые ресурсы процесса

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

31. Адресное пространство процесса

• Адресное пространство – это виртуальная память,
выделенная процессу для запуска программ.
• Адресные пространства разных процессов не
пересекаются.
• Процесс не имеет непосредственного доступа в адресное
пространство другого процесса.
• Это позволяет избежать влияния ошибок, произошедших в
каком-либо процессе, на исполнение других процессов,
что повышает надежность системы в целом.

32. Взаимодействие потоков процесса

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

33. Взаимодействие потоков процесса

• В принципе основной причиной, вызвавшей введение в
системное программирование понятия потока, и было
разделении адресных пространств процессов, используя
виртуальную память.
• Дело в том, что взаимодействие между параллельными
процессами, адресные пространства которых не
пересекаются, требует больших затрат на пересылку
данных, так как выполняется посредством вызова функций
ядра ОС.
• А это сильно замедляет работу приложений.

34. 2.4. Потоки в Windows

35. Определение в Windows

• Потоком в Windows называется объект
ядра, которому операционная система
выделяет процессорное время для
выполнения приложения.

36. Идентификация потока в Windows

• С каждым потоком в Windows связаны:
– уникальный дескриптор (HANDLE);
– уникальный идентификатор.
• Дескрипторы используются программами
пользователя для управления потоками.
• Идентификаторы используются служебными
программами, которые позволяют пользователям
системы отслеживать работу потоков.

37. Контекст потока в Windows

• Каждому потоку в Windows принадлежат
следующие ресурсы:
– код исполняемой функции;




набор регистров процессора;
стек для работы приложения;
стек для работы операционной системы;
маркер доступа, который содержит информацию для
системы безопасности.
• Все эти ресурсы образуют контекст потока в
Windows.

38. Типы потоков в Windows

• В Windows различаются потоки двух типов:
– системные потоки;
– пользовательские потоки.
• Системные потоки выполняют различные сервисы
операционной системы и запускаются ядром
операционной системы.
• Пользовательские потоки служат для решения
задач пользователя и запускаются приложением.

39. Типы потоков в приложении

• В приложении различаются потоки двух типов:
– рабочие потоки (working threads);
– потоки интерфейса пользователя (user interface
threads).
• Рабочие потоки выполняют различные задачи в
приложении.
• Потоки интерфейса пользователя выполняют
обработку сообщений к окнам, с которыми они
связаны.

40. Первичный поток приложения

• Каждое приложение имеет, по крайней мере,
один поток, который называется первичным
(primary) или главным (main) потоком.
• В консольных приложениях это поток, который
исполняет функцию main.
• В приложениях с графическим интерфейсом это
поток, который исполняет функцию WinMain.

41. Функции управления потоками в Windows


CreateThread – один поток создает другой поток;
ExitThread – поток завершает свою работу;
GetExitCodeThread – получить код завершения потока;
TerminateThread – один поток завершает работу другого потока;
SuspendThread – один поток приостанавливает исполнение другого
потока;
• ResumeThread – один поток возобновляет исполнение другого потока;
• Sleep – поток приостанавливает свое исполнение на заданный
интервал времени.

42. 2.5. Процессы в Windows

43. Определение процесса в Windows

• В Windows под процессом понимается
объект ядра, которому принадлежат
системные ресурсы, используемые
исполняемым приложением.
• Поэтому можно сказать, что в Windows
процессом является исполняемое
приложение.

44. Идентификация процесса в Windows

• С каждым процессом в Windows связаны:
– уникальный дескриптор (HANDLE);
– уникальный идентификатор.
• Дескрипторы используются программами
пользователя для управления процессами.
• Идентификаторы используются служебными
программами, которые позволяют пользователям
системы отслеживать работу процессов.

45. Ресурсы процесса в Windows

• Каждый процесс в Windows владеет следующими
ресурсами:




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

46. Начало и завершение процесса в Windows

• Выполнение каждого процесса начинается
с первичного потока.
• В процессе своего исполнения процесс
может создавать другие потоки.
• Исполнение процесса заканчивается при
завершении работы всех его потоков.

47. Функции для управления процессами в Windows

• CreateProcess – один процесс создает
другой процесс;
• ExitProcess – процесс завершает свою
работу;
• GetExitCodeProcess – получить код
завершения процесса;
• TerminateProcess – один процесс завершает
работу другого процесса.

48. Дочерние процессы

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

49. 2.6. Наследование дескрипторов объектов в ОС Windows

50. Определение наследуемого объекта в Windows

• Объект называется наследуемым, если дочерний процесс
имеет доступ к этому объекту через дескриптор, который
получен в родительском процессе при создании этого
объекта.
• Для того чтобы сделать объект наследуемым дочерними
процессами, нужно в родительском процессе установить
свойство наследования в дескрипторе этого объекта.
• Причем это свойство должно быть установлено до
создания дочернего процесса, который должен получить
доступ к наследуемому объекту.

51. Установка свойства наследования дескриптора объекта

• В Windows свойство наследования объекта
устанавливается двумя способами:
– функцией Create при создании объекта;
– функцией SetHandleInformation.
• Для того чтобы узнать, является ли дескриптор
наследуемым, нужно использовать:
– функцию GetHandleInformation.

52. Решение проблемы уникального именования объектов

• Использование свойства наследования
дескрипторов объектов позволяет избежать
решения задачи уникального именования
объектов, используемых в родительских и
дочерних процессах.
English     Русский Правила