Как называется технология потоков
Содержание
- Современные операционные системы, Э. Таненбаум, 2002, СПб, Питер, 1040 стр., (в djvu 10.1Мбайт) подробнее>>
- Сетевые операционные системы Н. А. Олифер, В. Г. Олифер (в zip архиве 1.1Мбайт)
- Сетевые операционные системы Н. А. Олифер, В. Г. Олифер, 2001, СПб, Питер, 544 стр., (в djvu 6.3Мбайт) подробнее>>
4.1.1 Понятие процесса
Процесс (задача) — программа, находящаяся в режиме выполнения.
С каждым процессом связывается его адресное пространство, из которого он может читать и в которое он может писать данные.
Адресное пространство содержит:
данные к программе
С каждым процессом связывается набор регистров, например:
счетчика команд (в процессоре) — регистр в котором содержится адрес следующей, стоящей в очереди на выполнение команды. После того как команда выбрана из памяти, счетчик команд корректируется и указатель переходит к следующей команде.
Во многих операционных системах вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в таблице процессов операционной системы.
Некоторые поля таблицы:
Время начала процесса
Использованное процессорное время
Указатель на текстовый сегмент
Указатель на сегмент данных
Указатель на сегмент стека
4.1.2 Модель процесса
В многозадачной системе реальный процессор переключается с процесса на процесс, но для упрощения модели рассматривается набор процессов, идущих параллельно (псевдопараллельно).
Рассмотрим схему с четырьмя работающими программами.
В каждый момент времени активен только один процесс
С права представлены параллельно работающие процессы, каждый со своим счетчиком команд. Разумеется, на самом деле существует только один физический счетчик команд, в который загружается логический счетчик команд текущего процесса. Когда время, отведенное текущему процессу, заканчивается, физический счетчик команд сохраняется в памяти, в логическом счетчике команд процесса.
4.1.3 Создание процесса
Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):
Работающий процесс подает системный вызов на создание процесса
Запрос пользователя на создание процесса
Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.
В UNIX каждому процессу присваивается идентификатор процесса ( PID — Process IDentifier)
4.1.4 Завершение процесса
Четыре события, приводящие к остановке процесса (вызов exit или ExitProcess):
Плановое завершение (окончание выполнения)
Плановый выход по известной ошибке (например, отсутствие файла)
Выход по неисправимой ошибке (ошибка в программе)
Уничтожение другим процессом
Таким образом, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (core image), и компонентов таблицы процессов (в числе компонентов и его регистры).
4.1.5 Иерархия процессов
В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского переменные, регистры и т.п. После вызова fork, как только родительские данные скопированы, последующие изменения в одном из процессов не влияют на другой, но процессы помнят о том, кто является родительским.
В таком случае в UNIX существует и прародитель всех процессов — процесс init.
Дерево процессов для систем UNIX
4.1.6 Состояние процессов
Три состояния процесса:
Выполнение (занимает процессор)
Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу)
Ожидание (процесс не может быть запущен по своим внутренним причинам, например, ожидая операции ввода/вывода)
Возможные переходы между состояниями.
1. Процесс блокируется, ожидая входных данных
2. Планировщик выбирает другой процесс
3. Планировщик выбирает этот процесс
4. Поступили входные данные
Переходы 2 и 3 вызываются планировщиком процессов операционной системы, так что сами процессы даже не знают о этих переходах. С точки зрения самих процессов есть два состояния выполнения и ожидания.
На серверах для ускорения ответа на запрос клиента, часто загружают несколько процессов в режим ожидания, и как только сервер получит запрос, процесс переходит из "ожидания" в "выполнение". Этот переход выполняется намного быстрее, чем запуск нового процесса.
4.2 Потоки (нити, облегченный процесс)
4.2.1 Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
Сравнение многопоточной системы с однопоточной
Доброго времени суток.
Вы в курсе, что центральные процессоры для компьютера с большим количеством ядер могут уступать в производительности тем, у которых их меньше? Если вы хотите взять мощный CPU, следует учитывать и число потоков в нем. Не знаете, что такое потоки в процессоре? В этой статье вы получите информацию, которая поможет вам в выборе ЦП.
Разберемся в терминологии
Чтобы ни у кого не возникало путаницы в голове, предлагаю разобраться с ключевыми терминами, играющими роль в нашей теме.
Ядро процессора — часть микросхемы, отвечающая за выполнение одного потока команд.
В современных процах, как правило, несколько ядер, каждое из которых имеет собственный кэш первого уровня и общий — второго и третьего. Такое решение позволяет данным быстрее перемещаться между ядрами, когда они работают над одним процессом.
Не путайте с ядром операционной системы, которое координирует доступ программ к ресурсам компьютера.
Поток выполнения — самая малая единица обработки, назначенная ядром ОС, которая разделяет код и контекст процесса. В одном процессе могут действовать сразу несколько потоков и совместно использовать ресурсы CPU.
Технология Hyper-threading
Вы наверняка слышали или догадались из вышесказанного, что чем больше в процессоре ядер и гигагерц, тем он быстрее обрабатывает задачи, которые вы ему даете. Это правда. Но не только ядра влияют на производительность, если речь идет о продуктах бренда Intel.
Компания изобрела технологию под названием «Hyper-threading» (полное — hyper-threading technology, HT либо HTT), которое переводится на русский язык как гиперточность. Она разработана для процев, основанных на микроархитектуре NetBurst.
HT отсутствует в устройствах линейки Core 2, в том числе «Duo» и «Quad». Схожая технология с таким же наименованием внедрена в продуктах Core i3, «i7» и нескольких «i5», а также в некоторые модели серий Itanium и Atom.
Суть «Hyper-threading» заключается в том, что при выполнении задач операционная система определяет одно физическое ядро CPU как два логических. Как вы понимаете, HTT позволяет увеличить скорость работы устройства. И ему можно задавать больше команд одновременно. Более того, если одному логическому ядру дана задача, но он с ней не справляется, а второе при этом бездействует, то последнее помогает первому.
Сколько потоков имеет CPU?
Самый быстрый способ вычислить, сколько потоков содержится в том или ином процессоре — умножить количество ядер надвое (это только если ваш проц поддерживает гипер трэйдинг).
Но если вы не знаете число ядер и хотите определить, сколько потоков имеется в вашем ЦП прямо сейчас, вызовите Диспетчер задач путем зажатия клавиш Ctrl+Alt+Del. Дальнейшие действия зависят от версии операционки, которая у вас установлена.
- Windows 7? Перейдите на вкладку «Быстродействие».
Подсчитайте, сколько прямоугольников находится в верхнем ряду. Это число логических ядер, а они и являются потоками.
- Вы пользуетесь Windows 8, 8.1 или 10? Обратитесь к вкладке «Производительность». Внизу есть строчки «Ядра» — это физические ядра. И ещё есть «Логические процессоры» — это и есть потоки, т.е. числа, которые вас интересуют.
Таким образом. На вышеизложенном скриншоте показан двух ядерный проц, с включенным гипертрэйдингом.
На случай, если у вас вдруг что-то не получилось с Диспетчером задач, есть еще один способ:
- Зажмите на клавиатуре Win + R;
- В появившемся окошке впишите команду msinfo32.exe и нажмите «ОК»;
- В графе «Процессор» вы найдете необходимые данные.
Но тут будут показаны только сами ядра.
В принципе это всё, что я хотел, спасибо за внимание.
ПОТОКИ (нити)
Потоки в операционных системах нужны для двух вещей – для параллелизма и одновременности.
Параллелизм – это физически одновременное выполнение для достижения наибольшей производительности(например, между двумя ядрами).
Одновременность – логическое и/или физическое одновременное выполнение (есть один ЦП, на нем одновременно выполняется несколько программ – многозадачная ОС).
Потоки нужны для того и другого понятия для эффективного использования. В самом простом варианте, чтобы достичь параллелизма – использование множества процессов – программы изолированы друг от друга в разных процессах, поэтому параллелизм есть.
Потоки – другой способ достичь параллелизма. Потоки работают внутри одного процесса. Все потоки процесса имеют одно адресное пространство и те же ресурсы ОС. У потоков есть свой стек и свое состояние ЦП.
Параллелизм (примеры)
Примеры:
Веб-сервер, который для каждого пользовательского процесса создает новый процесс, т.е. должен обслуживать несколько запросов параллельно.
Ожидая данных по запросу клиента из БД сервер в это же время мог бы загрузить данные с диска для другого клиента и обработать запрос третьего клиента.
Веб-браузер – в момент обращения к веб- странице, он мог бы параллельно загружать данные из различных источников.
Некоторая вычислительная программа использующая физический параллелизм – например, когда нужно обработать большой массив данных.
В каждом из этих примеров параллелизма есть общее :
- Один код
- Доступ к одним данным
- Один уровень доступа
- Одно множество ресурсов.
разное :
- Стэк и указатель стэка (регистр SP)
- Счетчик инструкций (регистр IP), указывающий на следующую инструкцию
- Множество регистров ЦП
Процессы и потоки
Большинство современных ОС поддерживает два объекта:
- Процесс, который определяет адресное пространство и общие атрибуты процесса.
- Поток, который определяет последовательный поток выполнения в рамках процесса.
Поток привязывается к одному процессу и одному адресному пространству.
- Но может быть много потоков в одном адресном пространстве
- Обеспечивают легкий доступ к общим данным
- Создание потоков занимает очень мало времени
ПОТОКИ стали единицей планирования
Процессы – всего лишь контейнер, в котором выполняются потоки.
Процесс – это непосредственно контейнер, а поток – это нити выполнения, которые у него есть внутри.
Многопоточность
Многопоточность полезна для :
- обработки одновременных событий
- построение параллельных программ.
Поддержка многопоточности – разделение понятие процесса от минимального потока управления.
- Для параллельного потока выполнения не нужно создавать новые процессы.
- Работает быстрее, меньше требования к памяти.
Раньше: «Процесс»= адресное пространство + ресурсы ОС+ подразумевался единственный поток
Раньше: «Процесс»= адресное пространство + ресурсы ОС+ все потоки принадлежат процессу
Какие бывают потоки?
Виды потоков
Потоки делают двумя способами:
1) На уровне ядра — есть функции ядра для создания нового потока.
— выделяется стек выполнения на внутри адресного пространства процесса;
— создает и инициализирует Thread Control Block (блок упр.процессом).
2) На уровне пользователя
потоки уровня пользователя
На рисунке три потока. Есть специальная библиотека Pthreads, которая управляет потоками вне ядра самостоятельно.
В обеих вариантах есть плюсы и минусы
Первый вариант минус — нужен системный вызов при создании потока, а это время процессора. На уровне пользователя системного вызова не нужно, все управляется специальной библиотекой.
Библиотека Pthreads (положительное):
Каждый поток представляется регистрами ЦП, стеком и небольшим блоком TCB
Создание потока, переключение между потоками и синхронизация потоков выполняется без участия ядра
Потоки уровня пользователя могут быть в 10-100 раз быстрее, чем потоки режима ядра
- Множество потоков в одном адресном пространстве это хорошо;
- Потоки режима ядра намного эффективнее процессов, но есть потери на системные вызовы;
- Потоки режима пользователя имеют преимущества и недостатки:
— высокая скорость и «дешевизна» создания;
— могут быть проблемы с вводом/выводом и блокировками, из-за того, что ядро не знает об этих потоках.
Поэтому пользовательские потоки не обрели большой популярности.
Возможно решить эти проблемы на уровне планировщика.
В ОС Windows NT потоки реализованы на уровне ядра, что позволяет более тонко регулировать события.
Ввели fiber – вытесняющую многозадачность.
Отличие потоков от процессов
Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:
- процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов;
- процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы;
- процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство;
- процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами;
- переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.
Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства.
Следующая важная тема в теории операционных систем «Синхронизация».