2017-02-10 19 views
0

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

Я нашел много ресурсов, которые дают то, что, как представляется, стандартное объяснение context switching, что ядро ​​делает и как сигналы (SIGXXX) обрабатываются:

  • Процесс проходит в течение установленного времени или до тех пор, пока не будет получено прерывание
  • Ядро выгружает процесс из текущей памяти (кеш), убирает данные о его контексте в памяти в другом месте для загрузки следующего процесса, требующего процессорного времени.
  • Если сигнал (SIGXXX) ожидает процесса, ядро ​​пытается вызвать соответствующий обработчик в процессе. Если ни один не существует, процесс не загружается снова (убит).
  • Новый процесс загружается в память и запускается; цикл продолжает

(Пожалуйста, дайте мне знать, если это понимание неправильно)

То, что я боролся с есть, если все это происходит на одноядерном, один поток CPU , Что физически работает планировщик? Я пропустил что-то очень простое, но я застрял в этом размышлении о курице или яйце.

И, кроме того, в современных системах с несколькими ядрами, потоками и множеством ресурсов ЦП, планировщик потребляет ядро ​​самостоятельно для запуска?

Я прочитал много статей о разных планировщиках процессов, исходном O (n), новом O (1), представленном в версии 2.6 и выше, и планировщик CFS, который (я думаю?) Используется в большинство Linux в настоящее время. Все они рассказывают о том, как они определяют приоритеты и процессы quering, и ни один из них не рассказывает о том, как и когда планировщик фактически работает для выполнения всех своих задач.

Распределяет ли процессор время CPU? Перетасовка сама как-то в ЦП и из ЦП? Если да, то как ЦП знает, когда остановить процесс и позволить планировщику выполнять свою работу?

ответ

2

Если это все происходит на одноядерном однопоточном CPU, что физически запускает планировщик?

Вы правы в своем мышлении о том, что это должно быть чем-то вне ядра, потому что текущий поток занят работой и выдает системные вызовы. Основная идея заключается в том, что ядро ​​зарегистрировало прерывание синхронизации в ядре процессора, точная реализация отличается от устройства к устройству, но ядро ​​процессора вызывает зарегистрированный interrupt handler (aka ISR) каждый раз, когда интервал таймера завершен или возникает сигнал ядра. ISR в действительности является указателем памяти на вашу функцию прерывания, которую вы передаете ядру. Прежде чем функция прерывания вернется обратно в пользовательское пространство (то есть текущий рабочий поток), вызывается планировщик (больше details here)

Частота планирования зависит от clock speed of the cpu.

Планировщик потребляет ядро ​​самостоятельно для запуска?

Нет, планировщик работает на каждом ядре сам по себе, а также имеет возможность планировать поток на другом ядре.

Некоторые дальнейшего чтения:

1

Планировщик является частью ядра и, конечно же, он потребляет процессор. В простейшем случае вы можете думать о том, что таймер подключен к CPU, который тикает, например, каждые 10 мс. При каждом тике CPU получает «прерывание», то есть он переходит на определенный предопределенный адрес, где расположен планировщик. планировщик затем сохраняет некоторые связанные с процессом данные в некоторую внутреннюю структуру, выбирает другой процесс, загружает свои данные и переходит к адресу, в котором выполнялся процесс.

Те O (n) и O (1) - это точно временные сложности планировщиков, а это значит, сколько времени планировщик должен решить, какую задачу планировать дальше.

+0

Часть моего вопроса о не простой случай - в случае многоядерного процессора или нескольких процессоров. Вы говорите, что всегда есть жестко закодированное ограничение того, как долго процессор будет тратить на определенную задачу, и что прерывание происходит в максимуме, а CPU загружает планировщик? Какой процессор загружает планировщик в случае 12 ядер? Что это определяет? – Locane

+0

Планировщик должен работать на каждом ядре, одно ядро ​​не может изменять регистры другого ядра. И этот жестко ограниченный предел зависит от алгоритма планирования. Некоторые из них дают максимальный отрезок времени для каждого процесса, и если процесс не добровольно «отказывается» от процессора, это прерывание делает переход контекста –

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

  • Нет связанных вопросов^_^