Можно ли рассматривать ядро Linux как единый процесс с множеством возможных потоков? Также то, что определяет переключение между модулями управления памятью, планировщиком, файловой системой и т. д. в ядре.
Можно ли рассматривать ядро Linux как единый процесс
- @MarcusJohansson Не вопрос домашнего задания 17.07.2013
- Ядро по определению не является процессом (поскольку работает на голом железе). Процессам нужно ядро для управления! Голое оборудование не знает процессов. 17.07.2013
- Однако ядро является многопоточным! 17.07.2013
Ответы:
Ядро Linux нельзя рассматривать как процесс, потому что это одна из его обязанностей по управлению процессами.
Вы можете рассматривать ядро как большой обработчик прерываний. После того как ядро предоставило потоку процессор, единственным способом вернуть управление являются прерывания (или системные вызовы, которые также являются прерываниями). Когда происходит прерывание, ядро немедленно получает управление и соответствующим образом обрабатывает прерывание. В этот момент могут быть вызваны различные части ядра.
Ядро является многопоточным, поскольку оно может одновременно обрабатывать различные прерывания на разных процессорах. С другой стороны, есть потоки ядра, которые управляются так же, как и пользовательские потоки (для планировщика нет никакой разницы между потоками ядра и пользовательскими потоками).
There is no difference between kernel and user threads for scheduler
. Тогда как планируются эти потоки ядра? 18.07.2013schedule()
вызов функции. Но планирование процесса само по себе довольно большая тема, чтобы описывать ее в комментариях. 23.07.2013