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