Я изучал основы системы unix/linux и, в частности, как обрабатывать список задач или процессов в современной компьютерной системе.Планировщики процессов Linux - они сами потребляют процессор?
Я нашел много ресурсов, которые дают то, что, как представляется, стандартное объяснение context switching, что ядро делает и как сигналы (SIGXXX) обрабатываются:
- Процесс проходит в течение установленного времени или до тех пор, пока не будет получено прерывание
- Ядро выгружает процесс из текущей памяти (кеш), убирает данные о его контексте в памяти в другом месте для загрузки следующего процесса, требующего процессорного времени.
- Если сигнал (SIGXXX) ожидает процесса, ядро пытается вызвать соответствующий обработчик в процессе. Если ни один не существует, процесс не загружается снова (убит).
- Новый процесс загружается в память и запускается; цикл продолжает
(Пожалуйста, дайте мне знать, если это понимание неправильно)
То, что я боролся с есть, если все это происходит на одноядерном, один поток CPU , Что физически работает планировщик? Я пропустил что-то очень простое, но я застрял в этом размышлении о курице или яйце.
И, кроме того, в современных системах с несколькими ядрами, потоками и множеством ресурсов ЦП, планировщик потребляет ядро самостоятельно для запуска?
Я прочитал много статей о разных планировщиках процессов, исходном O (n), новом O (1), представленном в версии 2.6 и выше, и планировщик CFS, который (я думаю?) Используется в большинство Linux в настоящее время. Все они рассказывают о том, как они определяют приоритеты и процессы quering, и ни один из них не рассказывает о том, как и когда планировщик фактически работает для выполнения всех своих задач.
Распределяет ли процессор время CPU? Перетасовка сама как-то в ЦП и из ЦП? Если да, то как ЦП знает, когда остановить процесс и позволить планировщику выполнять свою работу?
Часть моего вопроса о не простой случай - в случае многоядерного процессора или нескольких процессоров. Вы говорите, что всегда есть жестко закодированное ограничение того, как долго процессор будет тратить на определенную задачу, и что прерывание происходит в максимуме, а CPU загружает планировщик? Какой процессор загружает планировщик в случае 12 ядер? Что это определяет? – Locane
Планировщик должен работать на каждом ядре, одно ядро не может изменять регистры другого ядра. И этот жестко ограниченный предел зависит от алгоритма планирования. Некоторые из них дают максимальный отрезок времени для каждого процесса, и если процесс не добровольно «отказывается» от процессора, это прерывание делает переход контекста –