7

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

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

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

3 ответа3

4

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

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

4

Ядро само по себе не находится нигде, или, точнее, повсюду. Процесс создания системного вызова будет продолжаться на ЦП, выполняющем вызов, и скопирует код из образа ядра в свой кэш. Поскольку код доступен только для чтения, каждый процессор будет иметь его копию в своих кэшах. Строки кэша будут удалены так же, как и любой другой код вашей системы. Это означает, что части, которые очень часто вызываются, будут часто в кеше, а те, которые не будут вызываться, будут извлечены из более высоких строк кэша, оперативной памяти, диска и т.д.

3

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .