Как называется технология потоков

  • Современные операционные системы, Э. Таненбаум, 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 позволяет увеличить скорость работы устройства. И ему можно задавать больше команд одновременно. Более того, если одному логическому ядру дана задача, но он с ней не справляется, а второе при этом бездействует, то последнее помогает первому.

Читайте также:  Как добавить элемент в словарь python

Сколько потоков имеет CPU?

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

Но если вы не знаете число ядер и хотите определить, сколько потоков имеется в вашем ЦП прямо сейчас, вызовите Диспетчер задач путем зажатия клавиш Ctrl+Alt+Del. Дальнейшие действия зависят от версии операционки, которая у вас установлена.

  • Windows 7? Перейдите на вкладку «Быстродействие».
    Подсчитайте, сколько прямоугольников находится в верхнем ряду. Это число логических ядер, а они и являются потоками.
  • Вы пользуетесь Windows 8, 8.1 или 10? Обратитесь к вкладке «Производительность». Внизу есть строчки «Ядра» — это физические ядра. И ещё есть «Логические процессоры» — это и есть потоки, т.е. числа, которые вас интересуют.

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

На случай, если у вас вдруг что-то не получилось с Диспетчером задач, есть еще один способ:

  • Зажмите на клавиатуре Win + R;

  • В появившемся окошке впишите команду msinfo32.exe и нажмите «ОК»;
  • В графе «Процессор» вы найдете необходимые данные.

Но тут будут показаны только сами ядра.

В принципе это всё, что я хотел, спасибо за внимание.

ПОТОКИ (нити)

Потоки в операционных системах нужны для двух вещей – для параллелизма и одновременности.

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

Одновременность – логическое и/или физическое одновременное выполнение (есть один ЦП, на нем одновременно выполняется несколько программ – многозадачная ОС).

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

Потоки – другой способ достичь параллелизма. Потоки работают внутри одного процесса. Все потоки процесса имеют одно адресное пространство и те же ресурсы ОС. У потоков есть свой стек и свое состояние ЦП.

Параллелизм (примеры)

Примеры:

Веб-сервер, который для каждого пользовательского процесса создает новый процесс, т.е. должен обслуживать несколько запросов параллельно.

Ожидая данных по запросу клиента из БД сервер в это же время мог бы загрузить данные с диска для другого клиента и обработать запрос третьего клиента.

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

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

В каждом из этих примеров параллелизма есть общее :

  • Один код
  • Доступ к одним данным
  • Один уровень доступа
  • Одно множество ресурсов.

разное :

  • Стэк и указатель стэка (регистр SP)
  • Счетчик инструкций (регистр IP), указывающий на следующую инструкцию
  • Множество регистров ЦП

Процессы и потоки

Большинство современных ОС поддерживает два объекта:

  1. Процесс, который определяет адресное пространство и общие атрибуты процесса.
  2. Поток, который определяет последовательный поток выполнения в рамках процесса.
Читайте также:  Как настроить роутер для домашнего интернета

Поток привязывается к одному процессу и одному адресному пространству.

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

ПОТОКИ стали единицей планирования

Процессы всего лишь контейнер, в котором выполняются потоки.

Процесс – это непосредственно контейнер, а поток – это нити выполнения, которые у него есть внутри.

Многопоточность

Многопоточность полезна для :

  • обработки одновременных событий
  • построение параллельных программ.

Поддержка многопоточности – разделение понятие процесса от минимального потока управления.

  • Для параллельного потока выполнения не нужно создавать новые процессы.
  • Работает быстрее, меньше требования к памяти.

Раньше: «Процесс»= адресное пространство + ресурсы ОС+ подразумевался единственный поток

Раньше: «Процесс»= адресное пространство + ресурсы ОС+ все потоки принадлежат процессу

Какие бывают потоки?

Виды потоков

Потоки делают двумя способами:

1) На уровне ядра — есть функции ядра для создания нового потока.
— выделяется стек выполнения на внутри адресного пространства процесса;
— создает и инициализирует Thread Control Block (блок упр.процессом).

2) На уровне пользователя

потоки уровня пользователя

На рисунке три потока. Есть специальная библиотека Pthreads, которая управляет потоками вне ядра самостоятельно.

В обеих вариантах есть плюсы и минусы

Первый вариант минус — нужен системный вызов при создании потока, а это время процессора. На уровне пользователя системного вызова не нужно, все управляется специальной библиотекой.

Библиотека Pthreads (положительное):

Каждый поток представляется регистрами ЦП, стеком и небольшим блоком TCB

Создание потока, переключение между потоками и синхронизация потоков выполняется без участия ядра

Потоки уровня пользователя могут быть в 10-100 раз быстрее, чем потоки режима ядра

  • Множество потоков в одном адресном пространстве это хорошо;
  • Потоки режима ядра намного эффективнее процессов, но есть потери на системные вызовы;
  • Потоки режима пользователя имеют преимущества и недостатки:
    — высокая скорость и «дешевизна» создания;
    — могут быть проблемы с вводом/выводом и блокировками, из-за того, что ядро не знает об этих потоках.

Поэтому пользовательские потоки не обрели большой популярности.

Возможно решить эти проблемы на уровне планировщика.

В ОС Windows NT потоки реализованы на уровне ядра, что позволяет более тонко регулировать события.

Ввели fiber – вытесняющую многозадачность.

Отличие потоков от процессов

Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:

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

Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства.

Следующая важная тема в теории операционных систем «Синхронизация».

Adblock
detector