Ли linux планирует процесс или поток?

17

После прочтения этого вопроса о том, что у меня есть несколько сомнений. Пожалуйста, помогите в понимании.

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

  1. Является ли linux ядром для потока или процесса? Поскольку процесс и поток не различаются внутри ядра, как их обрабатывает планировщик?

  2. Как определяется квант для каждого потока?  а. Если квант времени (скажем, 100us) определяется для процесса, это то, что он делится между всеми потоками процесса? или  б. Квант для каждого потока определяется планировщиком?

Примечание. Вопросы 1 и 2 связаны друг с другом и могут выглядеть одинаково, но просто хотят четко понять, как все работает, разместили их оба здесь.

    
задан prasannatsm 24.03.2013 в 17:45
источник

2 ответа

24

Планировщик Linux (на последних ядрах Linux, например, по крайней мере 3,0) планирует планирование планируемых задач или просто задач .

Задача может быть:

  • однопоточный процесс (например, созданный fork без какой-либо библиотеки потоков)
  • любой поток внутри многопоточного процесса (включая его основной поток), в частности потоки Posix (pthreads)
  • задачи ядра, которые запускаются внутри ядра и остаются в ядре (например, kworker , nfsiod , kjournald , kauditd , kswapd и т. д. и т. д.)

Другими словами, потоки внутри многопоточных процессов запланированы как не-threaded -i.e. однопоточные процессы.

Низкоуровневый клон (2) syscall создает планируемые пользователем задачи (и может использоваться как для создания fork -ed процесса, так и для реализации библиотек потоков, таких как pthread ). Если вы не являетесь разработчиком потоковой библиотеки низового уровня, вы не хотите напрямую использовать clone .

AFAIK, для многопоточных процессов, ядро ​​(почти) не планирует процесс, но каждый отдельный поток внутри (включая основной поток).

Собственно, в планировании есть понятие групп потоков и сродство , но я не хорошо их знаю

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

Квантовые времена процессора задаются задачам, а не процессам

    
ответ дан Basile Starynkevitch 24.03.2013 в 17:52
  • Люди говорят, что Linux планирует процесс во время потоков Windows. Что подразумевается под этим? В соответствии с этим ответом выглядит, как Linux планирует задачи (можно рассматривать как потоки), и окна делают то же самое. Или я чего-то не хватает? –  prasannatsm 25.03.2013 в 07:03
  • @prasannatsm: Я не знаю о Linux, но Windows, конечно, только планирует потоки. Во время любой операции расписания Windows выбирает «следующий поток» из списка всех запущенных потоков, имеющих сродство к процессору, и контекст переключается на него. Помимо выполнения CR3-переключателя, планировщик не рассматривает процессы в целях выбора следующего потока для запуска на ядре. –  SecurityMatt 26.03.2013 в 01:45
2

NPTL-реализация спецификаций потоков POSIX рассматривает поток как другой процесс внутри ядра, имеющий уникальный task_struct (и, следовательно, pid ), поэтому каждый поток сам по себе запланирован, как упоминалось. Поэтому каждый поток получает свой собственный таймлис и назначается как процессы, как указано выше.

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

Линии Linux напрямую не работают с процессами или потоками, но работают с планируемыми объектами . Представлено struct sched_entity . Справедливости ради стоит сказать, что каждый процесс / поток является sched_entity , но наоборот может быть неверным.

Чтобы узнать подробное планирование процесса, откройте здесь     

ответ дан R.K. Tayal 14.08.2016 в 18:50