Процессы и потоки. Определения. Типы.
Под программой обычно понимают совокупность файлов, будь то набор исходных текстов, объектных файлов или собственно выполняемый файл. Для того чтобы программа могла быть запущена на выполнение, операционная система сначала должна создать окружение или, так называемую, среду выполнения задачи, куда относятся ресурсы памяти, возможность доступа к устройствам ввода/вывода и различным системным ресурсам. Это окружение (среда выполнения задачи) и получило название процесса. Также процессом можно назвать программу в стадии выполнения. Иногда процесс называют задачей.
Поток (иногда называют нить) – независимо планируемая функциональная часть процесса, разделяющая адресное пространство процесса с другими потоками этого процесса. Также можно сказать, что она является единицей планирования (диспетчеризации).
Существует 3 типа процессов:
· Системные - являются частью ядра и расположены в оперативной памяти. Они не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы. Выполняемые инструкции и данные этих процессов находятся в ядре системы, таким образом, они могут вызывать функции и обращаться к данным, недоступным для остальных процессов. Также важно отметить, что ресурсы для системных процессов выделяются изначально и однозначно, следовательно, системные процессы данные ресурсы менять не могут и не конкурируют за них.
· Демоны (фоновые) – это неинтерактивные процессы, которые запускаются обычным образом – путем загрузки в память соответствующих им программ (исполняемых файлов) и выполняются в фоновом режиме. Обычно демоны запускаются при инициализации системы (но после инициализации ядра) и обеспечивают работу различных подсистем: системы печати, системы сетевого доступа и сетевых услуг, системы терминального доступа. Демоны не связаны ни с одним пользовательским сеансом работы и не могут непосредственно управляться пользователем. Большую часть времени демоны ожидают, пока тот или иной процесс запросит определенную услугу, например, доступ к файловому архиву или печать документа.
· Прикладные (пользовательские) - прикладным процессам относятся все остальные процессы, выполняющиеся в системе. Как правило, эти процессы, порожденные в рамках пользовательского сеанса работы. Например, в операционной системе Unix важнейшим пользовательским процессом, обеспечивающим работу в ней, является командный интерпретатор. Он запускается сразу же после регистрации пользователя в системе, а завершение его работы приводит к отключению пользователя от системы. Пользовательские процессы могут выполняться как в интерактивном, так и в фоновом режиме. Эти процессы (через запросы к системным службам) конкурируют за ресурсы системы. Время их жизни (и выполнения) ограничено сеансом работы пользователя или путем специального запроса пользователя к операционной системе. При выходе из системы все пользовательские процессы уничтожаются.
Также важно отметить, что интерактивные процессы монопольно владеют терминалом, и пока такой процесс не завершит свое выполнение, пользователь не сможет работать с другими приложениями. Однако важно отметить, что возможность работать с другими приложениями существует, если в функции интерактивного процесса входит запуск на выполнение других программ. Опять-таки таким примером является командный интерпретатор UNIX, который считывает пользовательский ввод и запускает соответствующие задачи.
Существенными отличиями системных процессов (СП) от процессов пользователя (ПП) можно назвать:
· ПП имеет блок данных для хранения локальных данных
· Невозможность ПП непосредственно породить любой процесс.
· Невозможность ПП непосредственно совершать операции ввода/вывода.
· Невозможность СП выделить себе дополнительные ресурсы в случае необходимости в отличие от ПП.
Все потоки процесса разделяют между собой состояние и ресурсы этого процесса. Они находятся в одном и том же адресном пространстве и имеют доступ к одним и тем же данным. Если один поток изменяет в памяти какие-то данные, то другие потоки во время своего доступа к этим данным имеют возможность отследить эти изменения. Если один поток открывает файл с правом чтения, другие потоки данного процесса тоже могут читать из этого файла.
Ниже представлены основные преимуществами использования потоков с точки зрения производительности:
· Создание нового потока в уже существующем процессе занимает намного меньше времени, чем создание совершенно нового процесса.
· Поток можно завершить намного быстрее, чем процесс.
· Переключение потоков в рамках одного и того же процесса происходит намного быстрее.
· При использовании потоков повышается эффективность обмена информацией между двумя выполняющимися программами. В большинстве операционных систем обмен между независимыми процессами происходит с участием ядра, в функции которого входит обеспечение защиты и механизма, необходимого для осуществления обмена. Однако благодаря тому, что различные потоки одного и того же процесса используют одну и ту же область памяти и одни и те же файлы, они могут обмениваться информацией без участия ядра.


