
- •Определение, структура программного обеспечения
- •Вычислительной системы
- •Определение, функции операционной системы (ос)
- •Определение, основные принципы построения ос
- •Понятие вычислительного процесса
- •Понятие ресурса
- •Понятие активного процесса. Динамика состояний процесса
- •Понятие потока, мультипрограммирования
- •Идентификация процесса
- •Взаимодействие потоков
- •Классификация процессов
- •Классификация ресурсов
- •Понятие критических секций, основные требования к ним
- •Понятие тупика, условия его возникновения
- •14. Методы борьбы с тупиками. Описание каждого метода
- •15. Виды межпроцессных коммуникаций. Очереди сообщений. Сигналы
- •16. Виды межпроцессных коммуникаций. Конвейер. Сокеты
- •17. Понятие системных часов, таймера
- •18. Планирование выполнения процессов в системах реального времени
- •19. Отображение пространства имен на физическую память компьютера
- •20. Сегментный способ организации виртуальной памяти
- •21. Страничный способ организации виртуальной памяти
- •22. Сегментно-страничный способ организации виртуальной памяти
- •23. Управление памятью вычислительной системы
- •24. Понятие файловой системы
- •25. Особенности файловой системы fat
- •26. Особенности файловой системы ntfs
- •27. Понятие ввода/вывода. Основные задачи супервизора ввода/вывода
- •28. Режимы ввода/вывода, их характеристика
- •29. Процесс управления вводом/выводом
- •30. Понятие микроядерной операционной системы
- •В пользовательское пространство
- •31. Понятие монолитной операционной системы
- •32. Классификация операционных систем
- •33. Особенности сетевых и распределенных операционных систем
- •34. Понятие прерывания. Механизм обработки прерываний
- •35. Синхронные и асинхронные прерывания
- •36. Дисциплины диспетчеризации
- •37. Понятие утилиты. Виды утилит
- •38. Понятие компилятора, интерпретатора, отладчика, компоновщика, байт-кода
- •39. Виды систем защиты программного обеспечения
- •40. Показатели применимости и критерии оценки систем защиты программного обеспечения
Понятие потока, мультипрограммирования
Мультипрограммный режим работы вычислительной системы заключается в том, что пока одна программа (процесс, задача) ожидает завершения очередной операции ввода/вывода, другая программа (задача) может быть поставлена на выполнение. При мультипрограммировании повышается пропускная способность системы, но отдельный процесс никогда не может быть выполнен быстрее, чем, если бы он выполнялся в однопрограммном режиме.
ОС поддерживает мультипрограммирование (многопроцессность) и старается эффективно использовать ресурсы путем организации очередей запросов. При необходимости использовать какой-либо ресурс процесс обращается к супервизору ОС и сообщает ему свои требования (вид ресурса, объем и т.д.). Эта директива переводит процессор в привилегированный режим, если он есть.
Ресурс будет выделен обратившемуся за ним процессу, если:
он свободен и нет задач с более высоким приоритетом, обратившимся за этим ресурсом;
текущий запрос и ранее выданные запросы допускают совместное использование ресурсов;
ресурс используется задачей с более низким приоритетом и может быть временно отобран.
Если ресурс занят, ОС ставит задачу в очередь к ресурсу, переводя ее в состояние ожидания. Очередь к ресурсу может быть организована различными способами, но обычно с помощью списковой структуры.
После завершения работы с ресурсом задача с помощью системного вызова супервизора сообщает ОС об отказе от ресурса. Супервизор ОС, получив управление, освобождает ресурс и проверяет, есть ли очередь к этому ресурсу. Если очередь есть, то в зависимости от дисциплины обслуживания и приоритетов задач, ожидающих данный ресурс, супервизор выбирает задачу и переводит ее в состояние готовности к выполнению. Управление будет передано либо этой выбранной задаче, либо той, которая только что освободила ресурс.
При выдаче запроса задача может указать, хочет ли она владеть ресурсом монопольно или совместно с другими задачами (файл).
При организации управления ресурсами требуется принять решение о том, что в данной ситуации выгоднее:
быстро обслуживать отдельные наиболее важные запросы;
предоставлять всем процессам равные возможности;
обслуживать максимально возможное количество процессов;
наиболее полно использовать ресурсы.
Когда говорят о процессах, то тем самым хотят отметить, что ОС поддерживает их обособленность: у каждого процесса имеется свое виртуальное адресное пространство, каждому процессу назначаются свои ресурсы (файлы, окна, семафоры и т.д.). Такая обособленность нужна для того, чтобы защитить один процесс от другого, поскольку они, совместно используя все ресурсы вычислительной системы, конкурируют друг с другом. В общем случае процессы никак не связаны между собой и могут принадлежать даже разным пользователям, разделяющим одну вычислительную систему. Другими словами, ОС считает процессы совершенно несвязанными и независимыми. При этом именно ОС регулирует конкуренцию между процессами по поводу ресурсов.
Однако желательно иметь возможность задействовать внутренний параллелизм, который может быть в самих процессах. Такой внутренний параллелизм встречается достаточно часто и его использование позволяет ускорить их решение. Например, некоторые операции, выполняемые приложением, могут требовать для своего исполнения достаточно длительного использования центрального процессора. В этом случае при интерактивной работе с приложением пользователь вынужден долго ожидать завершения заказанной операции и не может управлять приложением до тех пор, пока операция не выполнится до самого конца. Такие ситуации встречаются достаточно часто, например, при обработке больших изображений в графических редакторах.
Если же программные модули, исполняющие длительные операции, оформлять в виде самостоятельных «подпроцессов», которые будут выполняться параллельно с другими «подпроцессами», то у пользователя появляется возможность параллельно выполнять несколько операций в рамках одного приложения (процесса). «Подпроцессы» это и есть нити или, как встречается в литературе, треды (thread). Еще одним синонимом, встречающимся в литературе, является поток. Легковесными их называют потому, что ОС не должна для них организовывать полноценную виртуальную машину. Эти задачи:
не имеют своих собственных ресурсов;
они развиваются в том же виртуальном адресном пространстве;
могут пользоваться теми же файлами, виртуальными устройствами и иными ресурсами, что и данный процесс.
Единственное, что им необходимо иметь, – это процессорный ресурс. В однопроцессорной системе нити (треды) разделяют между собой процессорное время так же, как это делают обычные процессы, а в мультипроцессорной системе могут выполняться одновременно, если не встречают конкуренции из-за обращения к иным ресурсам.
Главное, что обеспечивает многопоточность, – это возможность параллельно выполнять несколько видов операций в одной прикладной программе. Параллельные вычисления (а, следовательно, и более эффективное использование ресурсов центрального процессора, и меньшее суммарное время выполнения задач) часто реализуется на уровне нитей (тредов), и программа, оформленная в виде нескольких таких нитей (тредов) в рамках одного процесса, может быть выполнена быстрее за счёт параллельного выполнения её отдельных частей. Например, если электронная таблица или текстовый процессор были разработаны с учётом возможностей многопоточной обработки, то пользователь может запросить пересчёт своего рабочего листа или слияние нескольких документов и одновременно продолжать заполнять таблицу или открывать для редактирования следующий документ.
Особенно эффективно можно использовать многопоточность для выполнения распределённых приложений; например, многопоточный сервер может параллельно выполнять запросы сразу нескольких клиентов.
Заметим, что желательно уменьшение взаимодействия нитей (тредов) между собой, т.к. ускорение от одновременного выполнения параллельных потоков может быть сведено к минимуму из-за задержек синхронизации и обмена данными.
Каждый тред выполняется строго последовательно и имеет свой собственный программный счётчик и стек. Треды, как и процессы, могут порождать нити-потомки. Подобно процессам, состоящим из одного треда, каждый тред может находится в одном из активных состояний. Пока один тред заблокирован (или просто находится в очерёди готовых к исполнению задач), другой тред того же процесса может выполняться. Треды разделяют процессорное время так же, как это делают обычные процессы, в соответствии с различными вариантами диспетчеризации.
Как мы уже знаем, все треды имеют одно и то же виртуальное адресное пространство своего процесса. Это означает, что они разделяют одни и те же глобальные переменные. Поскольку каждый тред может иметь доступ к каждому виртуальному адресу, один тред может использовать стек другого треда. Между потоками нет полной защиты. Все потоки одного процесса всегда решают общую задачу одного пользователя, и механизм потоков используется здесь для более быстрого решения задачи путем её распараллеливания. Собственными являются программный счетчик, стек, рабочие регистры процессора, потоки-потомки, состояние.
Вследствие того, что треды, относящиеся к одному процессу, выполняются в одном и том же виртуальном адресном пространстве, между ними легко организовать тесное взаимодействие, в отличие от процессов, для которых нужны специальные механизмы обмена сообщениями и данными. Более того, программист, создающий многопоточное приложение, может заранее продумать работу множества тредов процесса таким образом, чтобы они могли взаимодействовать наиболее выгодным способом, а не участвовать в конкуренции за предоставление ресурсов тогда, когда этого можно избежать.
Итак, к достоинствам многопоточности в программировании можно отнести следующее:
упрощение программы в некоторых случаях, за счет использования общего адресного пространства;
меньшие относительно процесса временные затраты на создание потока;
повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода/вывода.
Рассмотрим типы реализации потоков.
Типы реализации потоков:
Поток в пространстве пользователя. Каждый процесс имеет таблицу потоков, аналогичную таблице процессов ядра.
Достоинства:
возможность реализации на ядре не поддерживающем многопоточность;
более быстрое переключение, создание и завершение потоков;
процесс может иметь собственный алгоритм планирования.
Недостатки:
отсутствие прерывания по таймеру внутри одного процесса;
при использовании блокирующего системного запроса для процесса все его потоки блокируются;
сложность реализации.
Поток в пространстве ядра. Наряду с таблицей процессов в пространстве ядра имеется таблица потоков.
«Волокна» (fibers). Несколько потоков режима пользователя, исполняющихся в одном потоке режима ядра. Поток пространства ядра потребляет заметные ресурсы, в первую очередь физическую память и диапазон адресов режима ядра для стека режима ядра. Поэтому было введено понятие «волокна» – облегчённого потока, выполняемого исключительно в режиме пользователя. У каждого потока может быть несколько «волокон».