Как планирование ядра Linux работает на многоядерном процессоре? - PullRequest
0 голосов
/ 02 октября 2018

Я недавно начал читать книгу Роберта Лава "Разработка ядра Linux, 3-е издание" и погрузился в часть планировщика, что оставило у меня много вопросов.

Итак, во-первых, я понял, что есть 2 случая, когдапланировщик изменяет задачу, которая выполняется в данный момент (поправьте меня, если я не точен), либо с помощью задачи, которая с готовностью запросила перепланирование, так как он блокирует некоторые операции ввода-вывода или спит, либо с помощью прерывания по таймеру, которое вызвало скачок процессорак коду планировщика и выгрузить текущую задачу, если она прерываема.

  1. Получает ли каждое ядро ​​многоядерного процессора прерывание, связанное с перепланированием?У каждого из них свой таймер, или, скажем, есть одно прерывание, которое в каком-то алгоритме выбирает конкретное ядро ​​для его обработки каждый раз?

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

  3. Мало того, что блокировка списка задач требуется для прикосновения к фактическому списку задач и произнесения изменения состояния задач или порядка очередей выполнения, что если одно ядро, которое планирует в настоящее время, рассчитывает, какую задачуследует запустить следующее, а другое ядро ​​успешно завершит планирование, что приводит к тому, что первое вычисление ядра будет полностью ошибочным, поскольку успешное повторное планирование просто сильно изменило состояние системы?

  4. Я понял, что вПриоритет linux делится на «значение nice», которое составляет от -20 до 19 (более высокий означает меньший приоритет и больше «nice») и приоритет в реальном времени (0-99).Значения приоритета в реальном времени имеют значение только для нескольких политик планирования, и каждый процесс может зарегистрироваться в своей политике планирования.Всегда ли политики реального времени бьют процессы, которые не зарегистрированы в политиках реального времени?То есть, если я запустлю процесс в реальном времени, я никогда не смогу выполнить нормальные процессы?Как «приятные» значения нормальных процессов и значения приоритетов в реальном времени процессов реального времени работают вместе в алгоритме планировщика?

...