2014-05-07 2 views
-1

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

Uniprocessor Environment

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

многопроцессорной Environment

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

Как это происходит в обоих случаях?

Cheers.

+0

Этот вопрос слишком широк для формата SO. Вы должны потратить немного времени на свою любимую поисковую систему, просматривая планирование операционной системы. Статья [Wikipedia] (http://en.wikipedia.org/wiki/Scheduling_ (вычисления)). См. Http://oreilly.com/catalog/linuxkernel/chapter/ch10.html для получения информации о планировании Linux. Для Windows см. [О процессах и потоках] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681917 (v = vs.85).aspx), особенно раздел о планировании. –

ответ

1

Процесс Scheduing

Операционные системы, в конечном счете контролировать эти типы планирование потоков.

Системы Windows основаны на приоритетах и ​​поэтому позволят процессу потреблять больше ресурсов, чем другие. Вот почему ваша машина может «зависать», если процесс был повышен до высокого приоритета. Насколько я знаю, приоритеты варьируются от 1-31.

Mac OS/Linux/Unix основаны на времени, позволяя всем процессам иметь равное количество процессорного времени. Поэтому загрузка большего количества процессов замедлит работу вашей системы, так как все они используют меньший фрагмент времени выполнения.

Uniprocessor Environment

ОС, в конечном счете отвечает за это, но переключение процессов включает в себя (я не могу гарантировать точность здесь, но только индикация):

  • пресечено процесса/нить
  • хранящую текущий код (расположение кода)
  • Хранение текущих регистров CPU
  • Задание ядра для следующего процесса/потока запустить
  • Kernel указывает, какой один должен быть запущен
  • OS перезагружает регистры из ОС кэш
  • перезагружает текущий стек для следующего применения.
  • Резюме этому процессу

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

Нити - это только дочерние процессы одного процесса. Для одного процессора это просто выглядит как дополнительная работа.

Многопроцессорной среда

Многопроцессорных среды работают по-разному, как кэш делятся между процессорами. Я считаю, что они называются кэшами L1 (Level) и L2. Таким образом, разница в том, что процессор A может перезагрузить состояние, сохраненное процессором B, без конфликтов. «Hyper-threading» также имеет тот же подход, хотя это специфичный для процессора. Разница здесь заключается в том, что процессор может контролировать только конкретный процесс - это называется «CPU Affinity». Его не поощряют для каждого процесса, но он позволяет приложению иметь выделенный процессор для работы.

+0

Linux также основан на приоритете: «Все планирование является преимущественным: если поток с более высоким статическим приоритетом становится готовым к запуску, текущий поток будет выгружен и возвращен в список ожидания для его статического уровня приоритета. Политика планирования определяет упорядочение только в списке запущенных потоков с равным статическим приоритетом ». http://manpages.ubuntu.com/manpages/gutsy/man2/sched_getscheduler.2.html –

+0

@ DarkFalcon - спасибо за разъяснение. Я парень из Windows. Я помню 2 типа из Университета, поэтому, возможно, это просто основанные на Unix системы, которые работают по-разному? –

+0

Не знаю. Я просто знаю это от решения проблем с инвертированием приоритетов в встроенной системе в последнее время. Довольно удивительно, как поток с низким приоритетом может блокировать поток в реальном времени, просто удерживая блокировку в течение 5 секунд даже через поток с низким приоритетом, не блокирует ничего. Он просто не был перенесен. :) –

0

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

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

0

Не имеет значения, есть ли 1 или 128 процессоров. ОС управляет доступом к ресурсам, чтобы попытаться эффективно совместить запросы с доступностью, и это включает в себя выполнение ЦП. Если поток работает, ему уже удалось получить некоторый процессор, но если он запрашивает ресурс, который не сразу доступен, ему больше не нужен какой-либо процессор, пока этот другой ресурс не станет бесплатным, и поэтому ОС удалит выполнение ЦП с он и, если есть еще один поток, который ждет CPU, он передаст его. Когда запрашиваемый источник станет доступным, поток снова будет готов. Если нет ядра, он будет запущен «немедленно», если нет, алгоритм планирования CPU принимает решение о том, остановить ли текущий поток, чтобы освободить ядро ​​или оставить вновь готовое прерывание.

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

Смежные вопросы