где ядро ​​находится в многоядерной системе

4545
Varun Kulkarni

Предположим, у меня есть многоядерная система, скажем, 4 ядра, и в этом я привязываю 3 пользовательских процесса к 3 процессорам.

В таком случае где будет находиться ядро?

Предположим, что один из пользовательских процессов выполняет системный вызов или, скажем, IOCTl, ядру. Будет ли этот IOCTL выполняться на 4-м процессоре, где находится ядро?

6

3 ответа на вопрос

3
Patrick Schlüter

The kernel per-se resides nowhere, or better said resided everywhere. The process making the syscall will continue on the CPU making the call and will copy the code from the kernel image into its cache. As the code is read only, every CPU will have a copy of it in its caches. The cache lines will be evicted in the same manner as any other code of your system. This means parts that are very often called will be often in cache, those that aren't won't and will be brought in from higher cache lines, ram, disk etc.

Спасибо за ваш быстрый ответ. Это означает, что пользовательский процесс, прикрепленный к CPU3 при выполнении системного вызова, не будет использовать ресурсы из 4-го CPU? Varun Kulkarni 11 лет назад 0
3
Ярослав Рахматуллин

Ядро живет в основной памяти системы. Он загружается туда (ОЗУ) при загрузке системы. Некоторые части ядра будут выполняться ЦП в разное время. Во время выполнения код (инструкции ЦП) будет находиться во внутренней памяти конкретного ЦП или ядра.

Точно о том, какое ядро ​​в многоядерном процессоре или какое ядро ​​в многоядерной системе невозможно ответить без знания структуры ядра и абстракций, используемых операционными системами для связи с процессором или процессорами.

Все, что я знаю, это то, что ядро ​​будет следовать набору правил для доступа к одному или нескольким CPUS. Пока кто-то более опытный не придет с лучшим объяснением, вы можете копаться в дизайне SMP .

В главах 5 и 6 Структурированной компьютерной организации подробно рассматриваются технические аспекты, связанные с командованием ЦП для выполнения какого-либо действия, и способы управления этим действием. Возможно, это было бы интересно прочитать?

3
Mikhail Kupchik

Ядро находится в памяти и выполняется на всех процессорах и ядрах одновременно.

ioctl (2) или read (2) либо сразу вернутся (как вызов функции в вашей собственной программе), либо заблокируют поток. «Блокировать поток» означает, что планировщик ядра приостановит ваш поток и запустит другой поток на этом процессоре / ядре. Ваш поток будет оставаться заблокированным, пока обработчик прерываний не разблокирует его (помечает как работоспособный). Обработчик прерываний работает в режиме ядра, обычно на первом физическом процессоре, он вызывается аппаратно после завершения ввода-вывода. После того, как ваш поток будет помечен как работоспособный, у вас будет возможность продолжить выполнение при следующем запуске планировщика ядра, возможно, на другом процессоре / ядре.

Похожие вопросы