Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.
Я нашел такую функцию getcpu(), есть ли аналог для ядра? Второй вопрос, как можно вызвать syscall из ядра?
PS: извините за глупые вопросы, я все время писал по винды.
Здравствуйте, KromKromov, Вы писали:
KK>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.
Здравствуйте, const_volatile, Вы писали:
_>Здравствуйте, KromKromov, Вы писали:
KK>>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.
_>smp_processor_id() по-моему.
Угу. Причём это может быть даже не функция, а макрос, который читает память по смещению от %fs.
Здравствуйте, KromKromov, Вы писали:
KK>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.
Если выполнение не в атомарном контексте, то при forced preemption код может самопроизвольно переехать на другой процессор.
KK>Я нашел такую функцию getcpu(), есть ли аналог для ядра? Второй вопрос, как можно вызвать syscall из ядра?
В общем случае нельзя, в определённых частных случаях можно.
Sapienti sat!
Re[3]: Опеределение текущего CPU ядра
От:
Аноним
Дата:
10.07.11 12:04
Оценка:
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, const_volatile, Вы писали:
_>>Здравствуйте, KromKromov, Вы писали:
KK>>>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.
_>>smp_processor_id() по-моему.
N>Угу. Причём это может быть даже не функция, а макрос, который читает память по смещению от %fs.
Спасибо за совет, встречный вопрос, в гугле нашел такое:
smp_processor_id() returns the current processor number, between 0 and NR_CPUS (the maximum
number of CPUs supported by Linux, currently 32). These values are not necessarily continuous: to get a
number between 0 and smp_num_cpus() (the number of actual processors in this machine), the
cpu_number_map() function is used to map the processor id to a logical number.
попробовал вызвать cpu_number_map(), функция не нашлась. Компилирую под Intel x64 и мне нужно получить именно логическое значение номера ядра, что можно сделать?