Приведенная номенклатура вводит в заблуждение ИМО.Во-первых, Linux и Windows (и большинство других операционных систем, на которые я смотрел или работал) не имеют «библиотек» для реализации своих внутренних интерфейсов и структур данных.Кроме того, библиотека - это просто код, связанный для удобства.Следовательно, описание библиотеки как некоторого фундаментального и необходимого строительного блока (на уровне ядра или пользователя) является ошибочным IMO.
Сказав, что на практике все системы do , конечно, имеют библиотеки для удобства, они помогают программам получать доступ к службам операционной системы и / или связанным частям кода.С одной стороны, системные вызовы обычно реализуются путем загрузки аргументов в регистры и выполнения какой-то команды прерывания, чтобы переключить процессор в режим ядра.Поскольку почти все программы написаны на языке высокого уровня, загрузка данных в регистры и выполнение команд прерывания обычно не может быть выполнена напрямую.Таким образом, трудно понять, как реализация потока ядра - в целом - будет "управляемой" без какой-либо пользовательской библиотеки.Я хочу сказать, что по существу всем реализациям потоков ядра в той или иной степени потребуется помощь библиотеки уровня пользователя.
С другой стороны, реализация потоков исключительно уровня пользователя, может быть реализован исключительно в библиотеке.Действительно, это было бы логичным способом структурирования.
Потоки реализованы на уровне ядра для Linux и Windows.Собственный Windows API имеет свои собственные средства создания потоков и управления ими, доступные через интерфейс системных вызовов Windows.Linux также имеет свои собственные механизмы, реализованные через его интерфейс системных вызовов .Интерфейс posix threads (pthreads) реализован в виде библиотеки поверх обоих.
Обычно pthreads считается нативным интерфейсом для потоков linux, хотя это не совсем так.Средства, предоставляемые pthreads, включают создание, уничтожение и управление потоками, а также ряд механизмов, используемых для синхронизации и межпроцессного взаимодействия.Базовые системные вызовы, используемые для реализации этого, включают критические строительные блоки, такие как clone
и futex
, к которым обычно нет прямого доступа.Они используются уровнем пользовательского уровня для обеспечения поведения, указанного в pthreads.
Windows имеет собственный уникальный API-интерфейс управления потоками, который встроен в библиотеку "win32" и использует системные вызовы Windows для реализации своих функций.поведение.Детали отличаются (от linux) и не соответствуют спецификации pthreads.Однако вы можете установить вторую библиотеку поверх собственной библиотеки, которая адаптирует API Windows в pthread-совместимый интерфейс (он состоит в основном из оболочек для функций Windows).
Итак, дляВ обеих системах библиотека pthreads создает и управляет различными объектами, указанными в pthread, с помощью соответствующего ядра ОС (и с использованием реализации потока ядра в обоих случаях).
Наконец, следует отметить, что Windowsтакже имеет истинную реализацию потоков на уровне пользователя, которую они назвали «волокно».В Linux нет аналога для этого (хотя другие реализации Unix в прошлом включали реализации потоков пользовательского уровня).И, насколько мне известно, библиотека pthreads для Windows не предоставляет доступа к реализации оптоволокна.