Сборка, многоядерные потоки и потоки на ядро: как создается поток в сборке? - PullRequest
2 голосов
/ 05 мая 2011

Этот вопрос задавался ранее (см., Например, здесь и здесь ).Тем не менее, вещи остаются неясными для меня.Я надеялся, что кто-то сможет уточнить их.Вопрос прост: предположим, что операционной системы нет, если я хочу, чтобы определенный процессор выполнял некоторый код одновременно с другим процессором, как это сделать?При необходимости вы можете также предположить некоторый простой планировщик на основе очередей, который (в нескольких других вопросах) все еще вызывает вопрос о том, как планировщик порождает поток / процесс или что-то еще в каком-либо другом ядре.Спасибо.

1 Ответ

5 голосов
/ 05 мая 2011

Запуск второго процессора, как правило, очень болезненный, так как в нем задействовано много ACPI. Это значит, что он не только в процессоре, но и в другом аппаратном обеспечении.

По сути, другие процессоры инициализируются через ACPI и начинают выполнение с некоторого предопределенного адресного пространства, содержащего код батута. Оттуда они ждут, чтобы быть намеченным.

Но если вы хотите написать свой собственный smp-материал, вы, конечно, можете поручить второму процессору немедленно выполнить какой-то код для вас.

Если вы хотите получить пример кода, вы можете посмотреть код ядра Linux:

http://lxr.linux.no/#linux+v2.6.33/arch/x86/kernel/smpboot.c

...