Я могу понять, как можно написать программу, которая использует несколько процессов или потоков: fork () новый процесс и использовать IPC, или создать несколько потоков и использовать такие виды коммуникационных механизмов.
Я также понимаю переключение контекста. То есть, при наличии всего одного процессора, операционная система планирует время для каждого процесса (и существует множество алгоритмов планирования), и, таким образом, мы достигаем одновременного запуска нескольких процессов.
И теперь, когда у нас есть многоядерные процессоры (или многопроцессорные компьютеры), у нас может быть два процесса, запущенных одновременно на двух отдельных ядрах.
Мой вопрос о последнем сценарии: как ядро определяет, на каком ядре выполняется процесс? Какие системные вызовы (в Linux или даже Windows) планируют процесс на определенном ядре?
Причина, по которой я спрашиваю: я работаю над проектом для школы, где мы должны исследовать недавнюю тему в области вычислительной техники - и я выбрал многоядерные архитектуры. Кажется, есть много материала о том, как программировать в такой среде (как следить за тупиковой ситуацией или условиями гонки), но не так много об управлении отдельными ядрами. Я хотел бы иметь возможность написать несколько демонстрационных программ и представить некоторые инструкции по сборке или код на языке C: «Смотрите, я запускаю бесконечный цикл на 2-м ядре, посмотрите на скачок загрузки ЦП для , который удельное ядро ".
Есть примеры кода? Или учебники?
edit: Для пояснения - многие люди говорили, что это цель ОС, и что нужно позволить ОС позаботиться об этом. Я полностью согласен! Но тогда я спрашиваю (или пытаюсь понять), что на самом деле делает операционная система для этого. Не алгоритм планирования, а, скорее, «как только ядро выбрано, какие инструкции должны быть выполнены, чтобы это ядро начало извлекать инструкции?»