Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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