Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ_спо.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
1.5 Mб
Скачать
  1. Понятие потока, мультипрограммирования

Мультипрограммный режим работы вычислительной системы заключается в том, что пока одна программа (процесс, задача) ожидает завершения очередной операции ввода/вывода, другая программа (задача) может быть поставлена на выполнение. При мультипрограммировании повышается пропускная способность системы, но отдельный процесс никогда не может быть выполнен быстрее, чем, если бы он выполнялся в однопрограммном режиме.

ОС поддерживает мультипрограммирование (многопроцессность) и старается эффективно использовать ресурсы путем организации очередей запросов. При необходимости использовать какой-либо ресурс процесс обращается к супервизору ОС и сообщает ему свои требования (вид ресурса, объем и т.д.). Эта директива переводит процессор в привилегированный режим, если он есть.

Ресурс будет выделен обратившемуся за ним процессу, если:

  • он свободен и нет задач с более высоким приоритетом, обратившимся за этим ресурсом;

  • текущий запрос и ранее выданные запросы допускают совместное использование ресурсов;

  • ресурс используется задачей с более низким приоритетом и может быть временно отобран.

Если ресурс занят, ОС ставит задачу в очередь к ресурсу, переводя ее в состояние ожидания. Очередь к ресурсу может быть организована различными способами, но обычно с помощью списковой структуры.

После завершения работы с ресурсом задача с помощью системного вызова супервизора сообщает ОС об отказе от ресурса. Супервизор ОС, получив управление, освобождает ресурс и проверяет, есть ли очередь к этому ресурсу. Если очередь есть, то в зависимости от дисциплины обслуживания и приоритетов задач, ожидающих данный ресурс, супервизор выбирает задачу и переводит ее в состояние готовности к выполнению. Управление будет передано либо этой выбранной задаче, либо той, которая только что освободила ресурс.

При выдаче запроса задача может указать, хочет ли она владеть ресурсом монопольно или совместно с другими задачами (файл).

При организации управления ресурсами требуется принять решение о том, что в данной ситуации выгоднее:

  • быстро обслуживать отдельные наиболее важные запросы;

  • предоставлять всем процессам равные возможности;

  • обслуживать максимально возможное количество процессов;

  • наиболее полно использовать ресурсы.

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

Однако желательно иметь возможность задействовать внутренний параллелизм, который может быть в самих процессах. Такой внутренний параллелизм встречается достаточно часто и его использование позволяет ускорить их решение. Например, некоторые операции, выполняемые приложением, могут требовать для своего исполнения достаточно длительного использования центрального процессора. В этом случае при интерактивной работе с приложением пользователь вынужден долго ожидать завершения заказанной операции и не может управлять приложением до тех пор, пока операция не выполнится до самого конца. Такие ситуации встречаются достаточно часто, например, при обработке больших изображений в графических редакторах.

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

  • не имеют своих собственных ресурсов;

  • они развиваются в том же виртуальном адресном пространстве;

  • могут пользоваться теми же файлами, виртуальными устройствами и иными ресурсами, что и данный процесс.

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

Главное, что обеспечивает многопоточность, – это возможность параллельно выполнять несколько видов операций в одной прикладной программе. Параллельные вычисления (а, следовательно, и более эффективное использование ресурсов центрального процессора, и меньшее суммарное время выполнения задач) часто реализуется на уровне нитей (тредов), и программа, оформленная в виде нескольких таких нитей (тредов) в рамках одного процесса, может быть выполнена быстрее за счёт параллельного выполнения её отдельных частей. Например, если электронная таблица или текстовый процессор были разработаны с учётом возможностей многопоточной обработки, то пользователь может запросить пересчёт своего рабочего листа или слияние нескольких документов и одновременно продолжать заполнять таблицу или открывать для редактирования следующий документ.

Особенно эффективно можно использовать многопоточность для выполнения распределённых приложений; например, многопоточный сервер может параллельно выполнять запросы сразу нескольких клиентов.

Заметим, что желательно уменьшение взаимодействия нитей (тредов) между собой, т.к. ускорение от одновременного выполнения параллельных потоков может быть сведено к минимуму из-за задержек синхронизации и обмена данными.

Каждый тред выполняется строго последовательно и имеет свой собственный программный счётчик и стек. Треды, как и процессы, могут порождать нити-потомки. Подобно процессам, состоящим из одного треда, каждый тред может находится в одном из активных состояний. Пока один тред заблокирован (или просто находится в очерёди готовых к исполнению задач), другой тред того же процесса может выполняться. Треды разделяют процессорное время так же, как это делают обычные процессы, в соответствии с различными вариантами диспетчеризации.

Как мы уже знаем, все треды имеют одно и то же виртуальное адресное пространство своего процесса. Это означает, что они разделяют одни и те же глобальные переменные. Поскольку каждый тред может иметь доступ к каждому виртуальному адресу, один тред может использовать стек другого треда. Между потоками нет полной защиты. Все потоки одного процесса всегда решают общую задачу одного пользователя, и механизм потоков используется здесь для более быстрого решения задачи путем её распараллеливания. Собственными являются программный счетчик, стек, рабочие регистры процессора, потоки-потомки, состояние.

Вследствие того, что треды, относящиеся к одному процессу, выполняются в одном и том же виртуальном адресном пространстве, между ними легко организовать тесное взаимодействие, в отличие от процессов, для которых нужны специальные механизмы обмена сообщениями и данными. Более того, программист, создающий многопоточное приложение, может заранее продумать работу множества тредов процесса таким образом, чтобы они могли взаимодействовать наиболее выгодным способом, а не участвовать в конкуренции за предоставление ресурсов тогда, когда этого можно избежать.

Итак, к достоинствам многопоточности в программировании можно отнести следующее:

  • упрощение программы в некоторых случаях, за счет использования общего адресного пространства;

  • меньшие относительно процесса временные затраты на создание потока;

  • повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода/вывода.

Рассмотрим типы реализации потоков.

Типы реализации потоков:

  1. Поток в пространстве пользователя. Каждый процесс имеет таблицу потоков, аналогичную таблице процессов ядра.

Достоинства:

  • возможность реализации на ядре не поддерживающем многопоточность;

  • более быстрое переключение, создание и завершение потоков;

  • процесс может иметь собственный алгоритм планирования.

Недостатки:

  • отсутствие прерывания по таймеру внутри одного процесса;

  • при использовании блокирующего системного запроса для процесса все его потоки блокируются;

  • сложность реализации.

  1. Поток в пространстве ядра. Наряду с таблицей процессов в пространстве ядра имеется таблица потоков.

  2. «Волокна» (fibers). Несколько потоков режима пользователя, исполняющихся в одном потоке режима ядра. Поток пространства ядра потребляет заметные ресурсы, в первую очередь физическую память и диапазон адресов режима ядра для стека режима ядра. Поэтому было введено понятие «волокна» – облегчённого потока, выполняемого исключительно в режиме пользователя. У каждого потока может быть несколько «волокон».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]