Как работает sched_setaffinity ()?

Я пытаюсь понять, как работает Linux syscall sched_setaffinity (). Это продолжение моего вопросаВот.

у меня естьэто руководство, который объясняет, как использовать системный вызов и имеет довольно аккуратный (работающий!) пример.

Поэтому я скачал Linux 2.6.27.19исходники ядра.

Я сделал 'grep' для строк, содержащих этот системный вызов, и получил 91 результат. Не перспективно.

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

Я знаком с тем, как работают одноядерные и однопоточные программы. Можно выполнить команду 'jmp foo', и это в основном устанавливает IP в адрес памяти метки 'foo'. Но когда у вас несколько ядер, нужно сказать «получить следующую инструкцию по адресу памяти foo и установить указатель инструкции наосновной номер 2 чтобы начать казнь там ".

Где, в коде сборки, мы указываем, какое ядро выполняет эту операцию?

Вернуться к коду ядра: что здесь важно? Файл 'kernel / sched.c' имеет функцию sched_setaffinity (), но возвращает тип "long", что несовместимо с егостраница справочника, Так что здесь важно? Какой из этих модулей показывает выпущенные инструкции по сборке? Какой модуль читает 'task_struct', просматривает член 'cpus_allowed' и затем переводит это в инструкцию? (Я также пролистал исходный код glibc - но я думаю, что он просто вызывает код ядра для выполнения этой задачи.)

Ответы на вопрос(4)

Ваш ответ на вопрос