Я пытаюсь понять, как работает системный вызов linux 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 - но я думаю, что он просто вызывает код ядра для выполнения этой задачи.)