Similar presentations:
Потоки и процессы
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>>acin>>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. Решение проблемы уникального именования объектов
• Использование свойства наследованиядескрипторов объектов позволяет избежать
решения задачи уникального именования
объектов, используемых в родительских и
дочерних процессах.