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.
где ядро находится в многоядерной системе
Предположим, у меня есть многоядерная система, скажем, 4 ядра, и в этом я привязываю 3 пользовательских процесса к 3 процессорам.
В таком случае где будет находиться ядро?
Предположим, что один из пользовательских процессов выполняет системный вызов или, скажем, IOCTl, ядру. Будет ли этот IOCTL выполняться на 4-м процессоре, где находится ядро?
3 ответа на вопрос
Ядро живет в основной памяти системы. Он загружается туда (ОЗУ) при загрузке системы. Некоторые части ядра будут выполняться ЦП в разное время. Во время выполнения код (инструкции ЦП) будет находиться во внутренней памяти конкретного ЦП или ядра.
Точно о том, какое ядро в многоядерном процессоре или какое ядро в многоядерной системе невозможно ответить без знания структуры ядра и абстракций, используемых операционными системами для связи с процессором или процессорами.
Все, что я знаю, это то, что ядро будет следовать набору правил для доступа к одному или нескольким CPUS. Пока кто-то более опытный не придет с лучшим объяснением, вы можете копаться в дизайне SMP .
В главах 5 и 6 Структурированной компьютерной организации подробно рассматриваются технические аспекты, связанные с командованием ЦП для выполнения какого-либо действия, и способы управления этим действием. Возможно, это было бы интересно прочитать?
Ядро находится в памяти и выполняется на всех процессорах и ядрах одновременно.
ioctl (2) или read (2) либо сразу вернутся (как вызов функции в вашей собственной программе), либо заблокируют поток. «Блокировать поток» означает, что планировщик ядра приостановит ваш поток и запустит другой поток на этом процессоре / ядре. Ваш поток будет оставаться заблокированным, пока обработчик прерываний не разблокирует его (помечает как работоспособный). Обработчик прерываний работает в режиме ядра, обычно на первом физическом процессоре, он вызывается аппаратно после завершения ввода-вывода. После того, как ваш поток будет помечен как работоспособный, у вас будет возможность продолжить выполнение при следующем запуске планировщика ядра, возможно, на другом процессоре / ядре.
Похожие вопросы
-
8
Должен ли я выбрать 32 или 64 бит для Linux?
-
12
Процессорные ядра: чем больше, тем лучше?
-
5
Почему мой компьютер начинает загружаться, а затем внезапно выключается?
-
-
2
Максимальная температура процессора для Core 2 Duo E6400
-
4
Насколько быстро каждое ядро в двухъядерном процессоре?
-
7
Могу ли я уменьшить скорость процессора моего MacBook при работе от батареи?
-
2
Предлагает ли Intel i7 реальное улучшение по сравнению со своими предшественниками?
-
4
Может ли 32-битная ОС работать на 64-битном процессоре?
-
3
Возможно ли использовать процессор Intel Q8400 в моем ASUS P5N-EM HDMI mobo?
-
3
Отпускает ли загрузка процессора / теплоотвода темп?