2. Потоки и процессы
1/52
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     Русский Правила