Процесс – целенаправленный акт обработки данных.
Процесс – это выполняемая программа или программа в стадии выполнения.
При выполнении программ на процессоре различают следующие характерные состояния процесса.
Допустимые состояния процесса.
Порождение – подготавливаются условия для первого выполнения на процессоре
Активное состояние – программа выполняется
Ожидание – программа не выполняется на процессоре по причине занятости какого-либо ресурса
Готовность – программа не выполняется, но для ее исполнения представлены все ресурсы, кроме времени процессора
Окончание – нормальное или аварийное завершение программы
С каждым процессом связывается его адресное пространство, содержащее саму программу.
Всё функционирующее на компьютере ПО, включая ОС, можно представить набором процессов.
Наибольшие сложности в управлении ресурсами компьютера возникают в мультипрограмме.
Мультипрограммирование (многозадачность) – такой способ организации
вычислительного процесса, при котором на одном процессоре попеременно
выполняется несколько программ. Для того чтобы поддерживать
мультипрограммирование, ОС должна определить внутренние единицы работы,
которыми будет разделяться процессор и другие ресурсы компьютера.
В настоящее время в большинстве ОС существуют 3 типа единиц работы:
- Крупные (процесс или задача)
- Менее крупные (поток или нить) (процесс выполняется в виде одного или нескольких потоков)
- Более крупные (задание или набор из одного или нескольких процессов, управляемых как единое целое)
С каждым заданием связаны квоты и лимиты ресурсов:
- максимальное количество процессов в задании
- суммарное время центрального процессора для каждого процесса и всего задания
- максимальное количество используемой памяти для каждого процесса и всего задания
Процессорное время наиболее часто распределяется между потоками
(представляют собой последовательности (потоки выполнения) команд).
Каждый процесс начинается с одного потока, но новые потоки могут
выполняться динамически. В простейшем случае процесс состоит из одного
потока. Процесс завершится, когда прекратит существование последний
поток.
Взаимосвязь между заданиями, процессами и потоками.
На переключение потоков в ОС затрачивается достаточно много времени
(из режима пользователя в режим ядра и обратно). Чтобы этого избежать,
используется облегченный параллелизм (применяется без переключения с
использованием так называемых волокон).
Волокна подобны потокам, но планируются в пространстве пользователя,
создавшей их программой.
У каждого потока может быть несколько волокон с той разницей, что когда
волокно блокируется, то оно помещается в очередь блокированных волокон,
после чего выбираются другие волокна в составе того же потока.
При этом ОС не знает ничего о смене волокон, так как всё тот же поток
выполняет работу.
Иерархия рабочих единиц ОС
Задание. Набор процессов с общими квотами и лимитами.
Процесс. Контейнер для ресурсов и потоков.
Поток. Исполнение кода в процессе.
Волокно. Облегченный поток, полностью управляемый в пространстве пользователя.
Работа вычислительной системы заключается в выполнении некоторой
программы, поэтому и с процессом, и с потоком связывается некоторый
программный код. Он оформляется в виде исполнительного модуля.
Процессы общаются между собой через ОС.
Необходимо распараллеливать работу в рамках одного приложения (одной
задачи). Тогда для одного приложения придется создавать несколько
процессов. Однако в этом случае при использовании стандартных средств
ОС не учитывается следующее:
- процессы решают общую задачу
- процессы работают с одними и теми же данными
- процессы используют одно и то же право доступа к ресурсам
Но при этом ОС рассматривает такие связанные процессы, как
обыкновенные, и изолирует их друг от друга. Это затрудняет обмен. На
создание каждого процесса ОС тратит системные ресурсы, которые
неоправданно дублируются. У каждого процесса своя физическая память,
свои устройства ввода-вывода, своё виртуальное пространство.
Вывод: необходимо применять многопоточную обработку. Это механизм
другой по сравнению с многопрограммным. Это механизм учитывает тесные
связи между отдельными ветвями вычислений одного и того же приложения.