В чем разница между потоками на уровне пользователя и потоками уровня ядра?

cs.stackexchange https://cs.stackexchange.com/questions/1065

Вопрос

После прочтения нескольких источников я все еще не смущается в темах пользовательского и ядра.

Особенно:

Потоки могут существовать как на уровне пользователя, так и на уровне ядра

В чем разница между уровнем пользователя и уровнем ядра?

Это было полезно?

Решение

Одной из ролей ядра многозадачной операционной системы является планирование: Определение, какой поток выполнения выполнить, когда. Таким образом, у такого ядра есть некоторое представление о нить или же процесс. Анкет Поток - это последовательный фрагмент кода, который выполняет и имеет свой собственный куча а иногда и другие данные. В контексте операционной системы люди обычно используют процесс означать нить, которая имеет свое собственное пространство памяти, и нить Чтобы означать поток, который разделяет ее пространство памяти с другими потоками. Процесс может иметь один или несколько потоков.

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

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

Система может предложить потоки как уровня ядра, так и потока пользователя; это известно как Гибридная резьба.

Каждый из потоков на уровне пользователя и ядра имеет свои преимущества и недостатки. Переключение между потоками на уровне пользователя часто быстрее, потому что оно не требует сброса защиты памяти, чтобы переключиться на планировщик In-Kernel и снова для переключения обратно в процесс. Это в основном имеет значение для массовых параллельных систем, которые используют большое количество очень недолговечных потоков, таких как некоторые языки высокого уровня (Эрланг в частности) и их Зеленые нити. Анкет Поток пользовательского уровня требует меньшей поддержки ядра, что может упростить ядро. Потоки уровня ядра позволяют потоке запускать, в то время как другой поток в том же процессе блокируется в системный вызов; Процессы с потоками пользовательского уровня должны позаботиться о том, чтобы не делать блокирующие системы системных вызовов, поскольку они блокируют все потоки процесса. Потоки уровня ядра могут работать одновременно на многопроцессорных машинах, которые не могут достичь чисто потоки пользовательского уровня.

Другие советы

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

Вот факты

  • Создание нового виртуального процессора немного дорого. (Ядро должно создать запись в Блок управления потоком, назначить стек и т. Д.)

  • Создать ветку довольно просто по сравнению с созданием нового виртуального процессора. Разработчик приложений может создавать потоки, используя библиотеки потоков, предоставленные языками программирования, и управляется в Пользовательский пространство. Анкет А также разные языки осуществлять многопоточный по-разному.

Модели

  • Если потоки отображаются на одном виртуальном процессоре, то нужно быть осторожным, чтобы не делать вызов системы блокировки ни в одном из потоков, потому что другие потоки больше не могут работать одновременно.

  • Это ограничение можно преодолеть, если можно создать еще несколько виртуальных процессоров. Теперь потоки могут работать одновременно (параллельно, если присутствуют несколько реальных процессоров). Поток не будет влиять на другие потоки, которые отображаются на других виртуальных процессорах.

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

  • Вышеуказанные модели были названы многими для одного, от одного до одного и многих соответственно.

Справочники: концепции операционной системы Galvin et al. Тема: Темы -> Модели многопоточного чтения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top