Извиняется, если этот вопрос глуп. Я пытался найти ответ в сети в течение довольно долгого времени, но не мог, и поэтому я спрашиваю здесь. Я изучаю темы, и я проходил через эту ссылку и эту конференцию Linux Plumbers Conference 2013 уровня ядра и уровня пользовательского уровня, и, насколько я понял, использование pthreads создает потоки в пользовательском пространстве, а ядро не знает об этом и рассматривает его только как один процесс, не подозревая о том, сколько потоков внутри. В этом случае
- кто решает планирование этих пользовательских потоков во время времени, которое получает процесс, поскольку ядро рассматривает его как отдельный процесс и не знает о потоках и как выполняется планирование?
- Если pthreads создают потоки пользовательского уровня, как создаются потоки уровня ядра или ОС, созданные из программ пользовательского пространства?
- В соответствии с приведенной выше ссылкой говорится, что ядро операционных систем предоставляет системный вызов для создания и управления потоками. Таким образом, системный вызов
clone()
создает поток нитей уровня или поток пользовательского уровня?- Если он создает поток уровня ядра, то
strace
простой программы pthreads также показывает использование clone() во время выполнения, но тогда почему это было бы рассмотрено поток пользовательского уровня? - Если он не создает поток уровня ядра, то как создаются потоки ядра из программ пользовательского пространства?
- Если он создает поток уровня ядра, то
- В соответствии с этой ссылкой он говорит: "Для каждого потока требуется полный блок управления потоками (TCB) для поддержки информации о потоках. В результате возникают значительные накладные расходы и увеличиваются по сложности ядра". Таким образом, в потоках уровня ядра, только куча разделяется, а остальные все являются отдельными для потока?
Изменить:
Я спрашивал о создании потока пользовательского уровня, и он планировал, потому что здесь, есть ссылка на Many to One Model, где отображаются много потоков пользовательского уровня к одному потоку уровня ядра, а управление потоками выполняется в пространстве пользователя библиотекой потоков. Я видел ссылки только на использование pthreads, но не знаю, создает ли потоки уровня пользователя или уровня ядра.