Процессы и потоки управления (thread). Состояния процессов и потоков (выполнение, готовность, блокировка, приостановка). Статические и динамические приоритеты потоков.


В ОС Windows 9x, NT, UNIX и др. реализована приоритетная (вытесняющая) многозадачность. Это означает, что ОС имеет право временно прекратить выполнение одной программы и переключить процессор на выполнение другой программы. Переключение происходит вне зависимости от желания каждой из программ, благодаря чему зависание одной программы не приводит к зависанию всей системы.

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

Не вытесняющая многозадачность (кооперативная), пример – Windows 3.1, Novell Netware. Инициатором в данном случае выступает сам процесс. Достоинства: сокращение затрат на планирование, переключение производится синхронно, а следовательно, происходит упрощение обмена данными между процессами. Недостатки: сложность программирования, зависание всей системы при зависании одного процесса.

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

Термин ПРОЦЕСС (синоним - ЗАДАЧА) появился в 60-х годах, в настоящее время под процессом понимается программа, запущенная на выполнение под управлением операционной системы (ОС). В общем случае в вычислительной системе одновременно существуют несколько процессов. В некоторых многопоточных ОС (UNIX, WINDOWS) каждый процесс состоит из одного или нескольких параллельно выполняющихся потоков (thread), и применительно к этим ОС далее по тексту термин "процесс" следует заменять на термин "поток".

 Запуская на выполнение какую-нибудь программу, вы создаёте новый процесс Процесс – это экземпляр программы, загруженный в память и запущенный на выполнение.

Процесс обычно определяют как “экземпляр” (иногда говорят, копию) вы­полняемого приложения. Для управления процессом система создаёт объект ядра “процесс”. Каждому объекту ядра выделяется в системе блок памяти, инициализируемый той или иной управляющей информацией, сопоставляется счетчик числа пользователей и описатель — идентификатор объекта (дескриптор). Сам по себе процесс ничего не исполняет — он просто “владеет” четырехгигабайтным адресным пространством, содержащим код и данные для ехе-файла программы. Помимо адресного пространства, процессу принадлежат такие ресурсы, как файлы, динамические области памяти и потоки. Ресурсы, создаваемые при жиз­ни процесса, обязательно уничтожаются при его завершении.  Процесс – это «оболочка» над потоками.

Чтобы процесс что-нибудь выполнил, в нем нужно создать поток. Поток (thread) описывает последовательность исполнения кода внутри процесса. Первичный поток процесса создаётся системой автоматически во время создания процесса. Именно он отвечает за исполнение кода ехе-файла, помещенного в адресное пространство процесса. Потоку в системе сопоставляется объект ядра “поток”, используемый для управления потоком. Соответственно, этому объекту также выделяется в системе блок памяти, инициализируемый некоторой управляющей информацией, счетчиком числа пользователей и дескриптор.

Использование нескольких  потоков в одном процессе очень важно по нескольким причинам. Во-первых, это позволяет добиться минимального простоя процессора, а значит – работать более эффективно. Во-вторых, потоки могут выполнять какие-либо дей­ствия в фоновом режиме относительно основной программы. В-третьих, потоки удобно использовать также в случае, если блокирование или подвисание какой-либо процедуры не должно стать причиной нарушений функционирования основной программы. Контекст потока – текущее состояние прерванного процесса (точнее область памяти, где хранится состояние). После выделения потока из процесса появилась идея о создании многопоточности в одном процессе (идея впервые появилась в Unix в 80-х годах). Поток – последовательность машинных команд, выполняющих определенные действия или текущее состояние процесса. Потоки как правило асинхронные. Потоки – «алгоритмы». Планировщик – распределяет процессорное время между потоками, часть ОС.

 Состояния процессов и потоков.

Поток находится в состоянии выполнения, если ему в данных момент времени выделен центральный процессор, если ему предоставлен квант процессорного времени. Поток находится в состоянии блокировки, если он ожидает появление некоторого события для продолжения его деятельности. Поток находится в состоянии готовности, если он мог бы сразу использовать процессор (квант процессорного времени - ), если ему была бы предоставлена возможность. Диспетчер управления переключает между 1, 2, 3 состояниями процессов. На более высоком уровне - переходом в состояния 4 или  5. Способ упорядочивания: по приоритету. Планировщик, который выбирает поток, которому дать , действует так: очередь потоков с разными приоритетами (обслуживание по приоритету). Приоритет влияет на очередность выделения потоку кванта времени для его выполнения. Пока в очереди готовых потоков есть более высокоприоритетные, потокам с низким уровнем кванты не выделяются. Количество процессорного времени, выделяемое конкретному потоку, определяется многими факторами. Во-первых, каждый процесс обладает собственным базовым уровнем приоритета, который присваивается всем принадлежащим ему потокам. Во-вторых, каждый из потоков обладает собственным приоритетом, который добавляется к базовому значению. ОС Windows поддерживает 4 класса приоритетов процессов: idle (простаивающий), normal (нормальный), high (высокий) и realtime (реального времени). Программы, запускаемые пользователем, в основном относятся к приложениям с классом приоритета normal. Приоритет idle идеален для приложений, занимающихся мониторингом системы или хранителя экрана (screen saver). Класс приоритета high следует использовать только при необ­ходимости. Класс приоритета realtime используют только: 1) в программе, напрямую “общающейся” с оборудованием, и 2) если приложение выполняет быстротечную операцию, которую нельзя прерывать ни в коем случае. Потоки, проводящие большую часть времени в состоянии блокировки, называются интерактивными, им присваивается наивысший приоритет.   выделяется маленьким, большую часть жизни они проводят в состоянии блокировки; после наступления события попадают в состояние готовности, сразу же переходят на выполнение, затем возвращаются на блокировку. Есть чисто вычислительные потоки – малый приоритет ,  выделяют больше. Они выполняются, когда все интерактивные потоки сидят в блокировке.

Сам себя поток возобновить не может!!! Может это сделать, например таймер, ОС и т.д.