Операционные системы. Учебное пособие
.pdf3. УПРАВЛЕНИЕ ПРОЦЕССАМИ И ПОТОКАМИ
3.1. Мультипрограммирование. Планирование процессов и потоков
Одной из основных задач ОС является организация рационального использования ресурсов компьютера в интересах наиболее эффективного выполнения прикладных программ пользователя. Для решения этой задачи ОС должна располагать информацией о текущем состоянии каждого ресурса. Ситуация осложняется при управлении ресурсами в мультипрограммных ОС.
Мультипрограммирование, или многозадачность, – это способ организации вычислительного процесса, при котором на одном процессоре попеременновыполняютсясразунесколькопрограмм.Онисовместноиспользуют не только процессор, но и другие ресурсы компьютера. Мультипрограммирование призвано повысить эффективность использования ВС. Наиболее характерными критериями эффективности ВС являются:
1)пропускная способность – количество задач, выполняемых ВС
вединицу времени;
2)удобство работы пользователей, в том числе заключающееся
ввозможности интерактивно работать одновременно с несколькими приложениями на одной машине;
3)реактивность системы – способность выдерживать заранее заданные интервалы времени между запуском программы и получением результата.
В зависимости от выбранного критерия ОС делятся на системы пакетной обработки, системы разделения времени и системы реального времени. Каждый тип ОС имеет специфические внутренние механизмы и особые области применения. Некоторые ОС могут поддерживать одновременно несколько режимов, например часть задач выполняется
впакетном режиме, а часть – в режиме реального времени.
ОсновнойподсистемоймультипрограммнойОС,непосредственно влияющей на функционирование ВС, является подсистема управления процессами и потоками, которая занимается их созданием и уничтожением, поддерживает взаимодействие между ними, а также распределяет
31
3. Управление процессами и потоками
процессорное время между несколькими одновременно существующими в системе процессами и потоками. Она ответственна за обеспечение процессов необходимыми ресурсами. ОС поддерживает в памяти специальные информационные структуры, в которые записывает, какие ресурсы выделены каждому процессу. Ресурсы могут быть назначены процессу в монопольное использование либо совместное использование с другими процессами. Некоторые ресурсы выделяются процессу при создании, а некоторые – динамически по запросам во время выполнения. Ресурсы могут быть приписаны процессу на все время его жизни или на определенный период.
Еще одной функцией данной подсистемы является синхронизация процессов и потоков, т. е. согласование их скоростей во избежание эффекта «гонок», взаимных блокировок и других коллизий, возникающих во время совместного использования ресурсов.
3.1.1. Понятия «процесс» и «поток»
Чтобы поддерживать мультипрограммирование, внутри ОС должны быть определены единицы работы, между которыми будут разделяться ресурсы. В настоящее время в большинстве ОС определены два типа единиц работы. Более крупная единица, обычно носящая название процесса, или задачи, требует для своего выполнения нескольких более мелких работ, для обозначения которых используют термины «поток», или «нить». В таких ОС процесс рассматривается как заявка на потребление всех видов ресурсов, кроме времени процессора. Этот ресурс распределяется ОС между другими единицами работы – потоками, которые получили свое название благодаря тому, что они представляют собой потоки выполнения команд.
Чтобы процессы не вмешивались в распределение ресурсов и не повредили коды и данные друг друга, ОС должна изолировать один процесс от другого. Для этого каждый процесс обеспечивается отдельным виртуальным адресным пространством, так что ни один процесс не может получить прямого доступа к командам и данным другого процесса.
Виртуальное адресное пространство (ВАП) процесса – это со-
вокупность адресов, которыми может манипулировать программный модуль процесса. ОС отображает ВАП процесса на отведенную ему физическую память.
32
3.1. Мультипрограммирование. Планирование процессов и потоков
Потоки возникли в ОС как средство распараллеливания вычислений, хотя эта задача может быть решена и традиционными способами. Ими могут быть, во-первых, организация параллельной работы прикладным программистом, который может выделить в программе некоторую подпрограмму-диспетчер, периодически передающую управление той или иной ветви вычислений. Во-вторых, можно создавать для приложения несколько процессов для каждой из параллельных работ. Однако в таких приложениях процессы решают общую задачу, следовательно, могут работать с одними и теми же данными, областями памяти
инаделяться одинаковыми правами доступа к ресурсам ВС. А ОС будет рассматривать эти процессы наравне с остальными и обеспечивать их изоляцию друг от друга. Кроме того, на создание каждого процесса ОС тратит определенные ресурсы, которые в данном случае неоправданно дублируются.
Для решения подобных проблем и был придуман еще один механизм распараллеливания вычислений, который назвали многопоточной обработкой. Вводится новая единица работы – поток выполнения, а понятие «процесс» меняет смысл. Понятию «поток» соответствует последовательный переход процессора от одной команды программы к другой. ОС распределяет процессорное время между потоками. Процессу ОС назначает адресное пространство и набор ресурсов, которые совместно используются всеми его потоками.
ОС изолирует потоки в гораздо меньшей степени, нежели процессы. Все потоки одного процесса используют общие файлы, таймеры, устройства, одну и ту же область ОП, одно и то же адресное пространство. Это означает, что они разделяют одни и те же глобальные переменные. Поскольку каждый поток может иметь доступ к любому адресу процесса, один поток может использовать стек другого потока.
Мультипрограммирование более эффективно на уровне потоков, а не процессов. Каждый поток имеет собственный счетчик команд
истек. Задача, оформленная в виде нескольких потоков в рамках одного процесса, может быть выполнена быстрее за счет параллельного выполнения ее отдельных частей. Естественно, наибольший эффект многопоточной обработки достигается на мультипроцессорных системах, в которых потоки могут выполняться на разных процессорах действительно параллельно.
33
3.Управление процессами и потоками
3.1.2.Описатели процессов и потоков
Представителем процесса в ОС является его описатель, который называют также блоком управления процессом (БУП). БУП – это одна или несколько информационных структур, содержащих все сведения
опроцессе, необходимые ОС для управления им. В число таких сведений могут входить, например, идентификатор процесса, текущее состояние процесса, данные о расположении в памяти исполняемого модуля, приоритет процесса и его права доступа, указатели выделенных процессу ресурсов, область сохранения регистров и т. п. Примерами БУП являются дескриптор процесса в UNIX, а также объект-процесс в Windows.
Создание БУП знаменует появление в системе еще одного претендента на вычислительные ресурсы, и при их распределении ОС должна принимать во внимание потребности нового процесса.
Вмногопоточной системе при создании процесса ОС создает для каждого процесса как минимум один поток выполнения. При создании потока ОС генерирует специальную информационную структуру – описатель потока, который может содержать идентификатор потока, данные
оправах доступа и приоритете, время выполнения и количество приостановок и т. д.
3.1.3.Состояния процессов и потоков
Впериод своего существования поток (и процесс в системах без многопоточной обработки) проходит через ряд дискретных состояний, их смену вызывают разные события. Поток может находиться в одном из трех основных состояний (рис. 3.1).
1. Поток активен, если в данный момент ему выделен ЦП
иостальные ресурсы.
2.Поток блокирован, если его выполнение может быть продолжено только после наступления некоторого события (например, завершения операции ввода-вывода).
3.Поток готов, если он не является активным или заблокированным, т. е. обладает всеми ресурсами, кроме ЦП, и может начать работу, когда процессор поступит в его распоряжение.
34
3.1. Мультипрограммирование. Планирование процессов и потоков
Ожидает события |
Блокирован |
|
|
|
Истек квант времени |
Событие наступило |
||
|
|
|
|
|
|
|
|
|
|
|
|
Активный |
Готов |
|
|||
|
|
Выбран для активизации |
|
||
|
|
|
|||
|
|
|
|
|
|
|
|
Рис. 3.1. Состояния потока |
|
||
В активном состоянии в однопроцессорной системе может находиться не более одного потока; количество заблокированных и готовых неограниченно. Эти потоки образуют очереди соответственно ожидающих и готовых потоков. Очереди потоков образуются путем объединения в списки описателей отдельных потоков (или БУПов). Таким образом, каждый описатель, кроме всего прочего, должен содержать по крайней мере один указатель на другой описатель, соседствующий с ним в очереди. Такая организация позволяет легко их переупорядочивать, включать и исключать потоки, переводить их из одного состояния в другое.
3.1.4. Планирование и диспетчеризация
На протяжении существования процесса выполнение его потоков может быть многократно прервано и продолжено. Переход от выполнения одного потока к другому осуществляется в результате планирования и диспетчеризации.
Работа по определению того, в какой момент времени необходимо прервать выполнение текущего активного потока и какому потоку предоставить возможность выполняться, называется планированием, а программа, выполняющая его, называется планировщиком. Планирование осуществляется на основе информации из описателей и включает решение двух задач:
1)определение момента времени для смены текущего потока;
2)выбор для активизации потока из очереди готовых потоков.
35
3.Управление процессами и потоками
Вбольшинстве ОС планирование осуществляется динамически, т. е. решения принимаются во время работы системы на основе анализа текущей ситуации. Для поиска оптимального порядка выполнения задача ОС должна затрачивать значительные усилия.
Другой тип планирования – статический – может быть использован в специализированных системах, в которых весь набор одновременно выполняемых задач определен заранее, например в системах реального времени. Планировщик называется статическим (или предварительным), если он принимает решения о планировании не во время работы системы, а заранее.
Результатом работы статического планировщика является таблица, называемая расписанием, в которой указывается, какому потоку (процессу) и на какое время должен быть предоставлен процессор. После того, как расписание готово, оно может использоваться ОС для переключения потоков и процессов. При этом накладные расходы ОС на исполнение расписания значительно меньше, чем при динамическом планировании, и сводятся к диспетчеризации потоков и процессов.
Диспетчеризация заключается в реализации найденного в результате динамического или статического планирования решения, т. е.
впереключении процессора с одного потока на другой. Перед приостановкой потока ОС запоминает его контекст, чтобы впоследствии использовать эту информацию для возобновления выполнения данного потока. Системная программа, занимающаяся диспетчеризацией, называется диспетчером.
Контекст потока содержит менее оперативную и более объемную часть информации о потоке и отражает:
1) состояние аппаратуры в момент прерывания потока (значение счетчика команд, содержимое регистров общего назначения, режим работы процессора, флаги, маски прерываний и др.);
2) параметры операционной среды (ссылки на открытые файлы, данные о незавершенных операциях ввода-вывода, коды ошибок, выполняемых потоком системных вызовов, и т. д.);
Контекст, как и БУП, доступен только программам ядра, т. е. находится в ВАП ОС, но хранится не в области ядра, а может быть выгружен из ОП на диск.
36
3.1. Мультипрограммирование. Планирование процессов и потоков
Диспетчеризация проходит в три этапа:
1) сохранение контекста текущего потока, который требуется сме-
нить;
2)загрузка контекста нового потока, выбранного в результате планирования;
3)запуск нового потока на выполнение.
ПосколькуоперацияпереключенияконтекстовсущественновлияетнапроизводительностьВС,диспетчерывыполняютдиспетчеризацию потоков совместно с аппаратными средствами процессора, обеспечивающими быструю загрузку контекстов и их быстрое восстановление.
3.1.5. Операции над потоками
Системы, управляющие потоками, должны иметь возможность выполнять определенные операции над ними:
1)создание потока;
2)уничтожение потока;
3)возобновление потока;
4)изменение приоритета потока;
5)блокирование потока;
6)запуск потока и т. д.
Создание состоит из многих операций: присвоение имени; включение этого имени в список имен потоков, известных системе; определение начального приоритета процесса; формирование описателя потока; выделение потоку начальных ресурсов.
Поток может породить новый поток. В этом случае порождающий поток называется родительским, а созданный – дочерним. В иерархической структуре потоков у каждого дочернего потока может быть только один родительский, но у каждого родительского может быть много дочерних потоков.
Уничтожение потока обозначает его удаление из системы. Ресурсы, выделенные этому потоку, возвращаются в систему; имя потока в любых системных списках и таблицах стирается; описатель освобождается. Уничтожение потока усложняется, если это родительский поток. В некоторых системах дочерний поток уничтожается автоматически при уничтожении родительского, в других – дочерние потоки начинают
37
3. Управление процессами и потоками
существовать независимо от родительских. И таким образом удаление родительского потока не оказывает влияния на его потомков.
Возобновление потока – операция подготовки потока к повторному запуску с той точки, в которой он был приостановлен.
Изменение приоритета означает модификацию значения приоритета в описателе.
3.2.Алгоритмы планирования
Ссамыхобщихпозицийвсемножествоалгоритмовпланирования можно разделить на два класса: вытесняющие и невытесняющие алгоритмы планирования.
1. Невытесняющие алгоритмы основаны на том, что активному потоку позволяется выполняться, пока он сам, по собственной инициативе, не отдаст управление ОС для того, чтобы та выбрала из очереди другой готовый к активизации поток.
2. Вытесняющие алгоритмы планирования – это такие способы планирования потоков, в которых решение о переключении процессора
свыполнения одного потока на выполнение другого принимается ОС, а не активной задачей.
Основным различием между этими классами является степень централизации механизма планирования потоков. При вытесняющем мультипрограммировании функции планирования потоков целиком сосредоточены в ОС и программист пишет свое приложение, не заботясь о том, что оно будет выполняться одновременно с другими задачами. При этом ОС выполняет следующие функции: определяет момент снятия с выполнения активного потока, запоминает его контекст, выбирает из очереди готовых потоков следующий, активизирует новый поток, загружая его контекст.
При невытесняющем мультипрограммировании механизм планирования распределен между ОС и прикладными программами. Прикладная программа, получив управление от ОС, сама определяет момент завершения очередного цикла своего выполнения и только затем передает управление ОС с помощью какого-либо системного вызова. ОС формирует очереди потоков и выбирает в соответствии с некоторой
38
3.2. Алгоритмы планирования
стратегией следующий поток для активизации. Такой механизм создает проблемы как для пользователей, так и для разработчиков приложений. Во избежание их появления программист должен сам предусмотреть в своем приложении частые передачи управления ОС.
Распределение функций планирования потоков между системой и приложениями не всегда является недостатком, а при определенных условиях может быть преимуществом, потому что дает возможность разработчику самому проектировать алгоритм планирования, наиболее подходящий для данного фиксированного набора задач. Существенным преимуществом невытесняющего планирования является более высокая скорость переключения потоков.
Почти во всех современных ОС, ориентированных на высокопроизводительное выполнение приложений (UNIX, Windows NT/2000, OpenVMS) и настольных систем (OS/2, Windows 9x/Me), реализованы вытесняющие алгоритмы планирования потоков и процессов. Примером эффективного использования невытесняющего планирования являются файл-серверы NetWare 3 и 4, в которых в значительной степени благодаря такому планированию достигнута высокая скорость выполнения файловых операций.
Алгоритмы планирования, основанные на квантовании
Воснове многих вытесняющих алгоритмов планирования лежит концепция квантования, в соответствии с которой каждому потоку поочередно для выполнения предоставляется ограниченный непрерывный период процессорного времени – квант. Смена активного потока происходит вследствие выполнения одного из четырех условий:
1) поток завершился и покинул систему;
2) произошла ошибка;
3) поток перешел в блокированное состояние;
4) исчерпан квант процессорного времени, отведенный данному потоку.
Значения квантов могут быть различными для разных потоков. Типичное значение кванта в системах разделения времени составляет десятки миллисекунд.
Принцип FIFO
Всоответствии с этим способом ЦП предоставляется потокам
впорядке их поступления в очередь готовности. Получив ЦП в свое
39
3. Управление процессами и потоками
распоряжение, поток выполняется до завершения. Более длинные потоки заставляют ждать короткие потоки, а менее важные потоки могут выполняться раньше более важных. Этот принцип характеризуется относительно небольшими колебаниями времени ответа, и поэтому большей предсказуемостью, чем большинство других. Его не рекомендуется использовать при планировании заданий пользователей, работающих в интерактивном режиме, так как не гарантируется хорошее время ответа.
Циклическое планирование, или планирование по принципу «вертушки»
Похоже на FIFO-планирование, но каждый раз потоку предоставляется ЦП на ограниченное время. Если поток не закончился до истечения кванта времени, он освобождает ЦП и переходит в конец списка готовых потоков, а ЦП предоставляется следующему ожидающему потоку. Этот метод эффективен для работы с разделением времени, когда система должна гарантировать приемлемое время ответа для всех интерактивных пользователей.
Принцип «кратчайшее задание – первым»
Для выполнения выбирается ожидающий поток с минимальным оценочным рабочим временем, остающимся до завершения. Таким образом оказывается предпочтение коротким потокам за счет более длинных, чтобы очередное задание завершалось и покидало систему как можно быстрее. Благодаря этому уменьшается количество ожидающих заданий.
Принцип «наименьшего остающегося времени»
Аналог предыдущего, но каждый раз потоку предоставляется ЦП на ограниченное время. Этот принцип можно использовать в системах с разделением времени. Поступающие в систему небольшие процессы будут выполняться почти немедленно, более длительные будут иметь большое время ожидания.
Планирование по сроку завершения
В этом случае принимаются все меры для того, чтобы выполнение определенных потоков заканчивалось к заранее обусловленному времени. Результаты работы этих потоков могут иметь важное значение, если они будут получены вовремя, и бесполезными – после назначенного срока. Такое планирование сложно организовать по многим причинам
40
