Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 5. Операционные системы, среды и оболочк...docx
Скачиваний:
41
Добавлен:
23.09.2019
Размер:
416.36 Кб
Скачать

5. Понятие процесса и потока(нити). Классификация процессов. Многозначность и многопоточность. Проблемы разработки приложений для многопоточной среды.

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

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

Треды используются для распараллеливания задачи внутри процесса. Новую абстракция внутри понятия “процесс” – нить исполнения или просто нить (в англоязычной литературе используется термин thread). Нити процесса разделяют его программный код, глобальные переменные и системные ресурсы, но каждая нить имеет свой собственный программный счетчик, свое содержимое регистров и свой собственный стек. теперь процесс представляется как совокупность взаимодействующих нитей и выделенных ему ресурсов. Нити, могут порождать нити-потомки, правда только внутри своего процесса, и переходить из состояния в состояние. Из состояния рождение процесс приходит содержащим всего одну нить исполнения. Другие нити процесса будут являться потомками этой нити прародительницы. Мы можем считать, что процесс находится в состоянии готовность, если хотя бы одна из его нитей находится в состоянии готовность и ни одна из нитей не находится в состоянии исполнение. Мы можем считать, что процесс находится в состоянии исполнение, если одна из его нитей находится в состоянии исполнение. Процесс будет находиться в состоянии ожидание, если все его нити находятся в состоянии ожидание.

Классификация процессов.

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

2) По генеалогическому признаку различают порождающие и порожденные процессы.

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

4) По связности: взаимосвязанные, которые имеют какую-то связь (пространственно-временную, управляющую, информационную); изолированные — слабо связанные; информационно-независимые, которые используют совместные ресурсы, но имеют собственные информационные базы; взаимодействующие - имеют информационные связи и разделяют общие структуры данных; взаимосвязанные по ресурсам; конкурирующие.

5) По времени развития: последовательные, параллельные, комбинированные.

6)По месту развития: внутренние ( на ЦП), внешние ( на внешних процессорах).

7)По принадлежности ОС: системные и пользовательские.

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

Многозадачность и многопоточность.

Многозадачность (multitasking) - это способность операционной системы выполнять несколько программ одновременно. В основе этого принципа лежит использование операционной системой аппаратного таймера для выделения отрезков времени (time slices) для каждого из одновременно выполняемых процессов. Если эти отрезки времени достаточно малы, и машина не перегружена слишком большим числом программ, то пользователю кажется, что все эти программы выполняются параллельно

Многопоточность - это возможность программы самой быть многозадачной. Программа может быть разделена на отдельные потоки выполнения (threads), которые, как кажется, выполняются параллельно.

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

Проблемы, возникающие при разработке многозадачных приложений

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

Проблема «гонка за данными» (data race) возникает при попытке доступа к общему ресурсу из разных потоков. При этом система может прервать выполнение потока в процессе взаимодействия с памятью, а потом возобновить его в тот момент, когда другой поток уже изменил содержимое памяти. Так как первый поток ничего не знает о действиях второго, его дальнейшие действия с данными, скорее всего, будут неправильными.. Для ее решения используются различные способы синхронизации потоков.

Проблема «взаимная блокировка» (dead lock) может возникнуть от излишнего или неправильного применения синхронизации. Например, поток 1 приостанавливает свою работу и ожидает каких-то действий от потока 2, а поток 2 приостанавливает свою работу и ожидает действий от потока 1. Для продолжения работы хотя бы один из потоков должен пройти дальше, однако они оба заблокированы. Со стороны это выглядит как зависание потоков. Эта проблема решается путем пересмотра алгоритмов работы с объектами синхронизации.