Процессы и треды

Реализация понятия последовательного процесса в ОС

Чтобы ОС могла управлять процессами, она должна располагать полной информацией о них. Для этого на каждый процесс заводится специальная информационная структура, называемая дескриптором процесса (описателем задач, блоком управления задачей). В общем случае дескриптор процесса содержит следующую информацию:
- идентификатор процесса (PID);
- тип (класс) процесса, по которому супервизор определяет правила обслуживания;
- приоритет процесса, по которому супервизор предоставляет ресурсы;
- переменную состояния (готов к работе, в состоянии выполнения, ожидание устройства ввода/вывода и т.д.);
- защищенную область памяти, в которой хранятся регистры процессора, если процесс прерывается, не закончив работу. Эта область называется контекстом задачи;
- информацию о ресурсах, которыми процесс владеет или имеет право пользоваться;
- место (или адрес) памяти для общения с другими процессами;
- параметры времени запуска;
- в случае отсутствия системы управления файлами – адрес задачи на диске в ее исходном состоянии и адрес на диске, куда она выгружается из оперативной памяти.

Описатели задач, как правило, располагаются в оперативной памяти для ускорения работы супервизора. Для каждого состояния (кроме выполнения) ведется список задач.

Для реализации «мультизадачности» было введено понятие «легковесных» процессов, которые в настоящее время получили названия потоки или треды (нити).
Понятие процесс в плоскости ОС подчеркивает их обособленность:
- у каждого процесса свое виртуальное адресное пространство;
- каждому процессу выделяются свои ресурсы – файлы, семафоры и т.д.

Обособленность процессов нужна для защиты процессов друг от друга, т.к. они, используя общие ресурсы вычислительной системы, постоянно конкурируют друг с другом. Процессы не связаны между собой и могут принадлежать различным пользователям, разделяющим одну вычислительную систему. ОС считает процессы несвязанными и независимыми.
В самих процессах также имеется внутренний параллелизм, использование которого позволяет повысить производительность вычислительной системы. Например, некоторые операции, выполняемые приложением, могут требовать большого количества процессорного времени, в этом случае пользователь долго будет ждать результата. Если программные модули, выполняющие такие длительные операции, оформить в виде самостоятельных «подпроцессов» (легковесных или облегченных потоков, тредов, «задач»), то у пользователя появляется возможность параллельно выполнять несколько операций в рамках одного процесса. Для этих задач ОС не создает полноценной виртуальной машины:
- задачи не имеют собственных ресурсов;
- находятся в том же виртуальном адресном пространстве, что и данный процесс;
- могут пользоваться теми же файлами, виртуальными устройствами и прочими ресурсами.

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