Соответствуют ли пользовательские потоки и потоки ядра библиотеке уровня потоков и библиотеке уровня ядра любым из следующих способов? - PullRequest
0 голосов
/ 14 сентября 2018

С Основные понятия операционной системы , авторы Авраам Сильбершатц, Грег Ган и Питер Баер Гальвин, здесь обсуждаются темы пользователя и темы ядра:

поддержка потоков может быть предоставлена ​​как на уровне пользователя, так и для пользователя. темы или ядро ​​для потоков ядра.

  • Пользовательские темы являются поддерживается выше ядра и управляется без поддержки ядра,

  • потоки ядра поддерживаются и управляются напрямую операционная система. Практически все современные операционные поддержка систем, включая Windows, Linux, Mac OS X и Solaris темы ядра.

В конечном счете, должна существовать связь между пользовательскими потоками и ядром нити . В этом разделе мы рассмотрим три распространенных способа такие отношения: модель «многие к одному», модель «один к одному» и модель «многие ко многим».

и вот обсуждение библиотеки уровня пользователя и библиотеки уровня ядра для создания и управления потоками:

Библиотека потоков предоставляет программисту API для создания и управление потоками. Есть два основных способа реализации потока библиотека.

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

  • Второй подход заключается в реализации библиотеки уровня ядра, поддерживаемой непосредственно операционной системой . В этом случае код и данные структуры для библиотеки существуют в пространстве ядра. Вызов функции в API для библиотеки обычно приводит к системному вызову ядро.

Сегодня используются три библиотеки основных потоков: POSIX Pthreads, Windows, и Java. Pthreads, расширение потоков стандарта POSIX, может предоставляется как библиотека уровня пользователя или библиотека уровня ядра . Библиотека потоков Windows - это библиотека уровня ядра, доступная в Windows системы. API потока Java позволяет создавать потоки и управлять ими прямо в программах на Java. Однако, потому что в большинстве случаев JVM работает поверх операционной системы хоста, API потока Java обычно реализуется с использованием библиотеки потоков, доступной на хосте система. Это означает, что в системах Windows потоки Java обычно реализовано с использованием Windows API; Системы UNIX и Linux часто используют Pthreads.

Соответствуют ли пользовательские потоки и потоки ядра библиотеке уровня потоков и библиотеке уровня ядра любым из следующих способов?

  • Обязательно ли библиотека уровня пользователя создает и управляет только пользовательскими потоками, но не потоками ядра?

  • Обязательно ли библиотека уровня ядра создает и управляет только потоками ядра, но не пользовательскими потоками?

  • Обязательно ли пользовательские потоки создаются и управляются библиотеками уровня пользователя, а не библиотеками уровня ядра?

  • Обязательно ли потоки ядра создаются и управляются библиотеками уровня ядра, а не библиотеками уровня пользователя?

В книге говорится: «Pthreads, расширение потоков стандарта POSIX, может быть предоставлено как библиотека уровня пользователя или библиотека уровня ядра».

  • Является ли PThread библиотекой уровня ядра в Linux и библиотекой уровня пользователя в Windows?

  • PThread создает и управляет пользовательскими потоками или потоками ядра в соответствии с определениями?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Приведенная номенклатура вводит в заблуждение ИМО.Во-первых, 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 не предоставляет доступа к реализации оптоволокна.

0 голосов
/ 14 сентября 2018

Обязательно ли библиотека уровня пользователя создает и управляет только пользовательскими потоками, но не потоками ядра?

Кажется, что здесь фраза «библиотека уровня пользователя» относится к библиотеке, которая нене полагайтесь на системные вызовы ядра, которые позволяют создавать и управлять потоками, поэтому по определению он не может создавать потоки ядра.

Идея заключается в том, что ядро ​​не знает, что вы выполняете потоки внутри своего процесса.Основным ограничением этого подхода является то, что такой процесс не может использовать более одного ядра процессора одновременно.

Обязательно ли библиотека уровня ядра создает и управляет только потоками ядра, но не пользовательскими потоками?

«Библиотека уровня ядра» немного ошибочна.Библиотека - это концепция пространства пользователя.Возможно, что в некоторых случаях существует однозначное соответствие между библиотечными функциями и системными вызовами ядра, но зачастую это не самое практичное решение.

В Linux существует системный вызов clone, который создаетновый процесс.Этот новый процесс может совместно использовать память, файловые дескрипторы и другие ресурсы с родителем.На высоком уровне мы часто называем такие процессы потоками внутри одного процесса.Непосредственная игра с системными вызовами часто является ненужной сложностью и затрудняет переносимость, поэтому вместо этого обычно используется библиотека пользовательского пространства.

Обычно используемые реализации pthread являются «уровнями ядра» в том смысле, что потоки pthread соответствуют1 к системным потокам, однако во многих случаях вызовы библиотечных функций не должны соответствовать 1-1 системным вызовам.В частности, наиболее часто используемые функции специально разработаны таким образом, что им не нужно использовать системные вызовы в большинстве случаев.Это повышает производительность.

Реализовать pthread можно и другими способами, но это представляется наиболее практичным.Он оставляет большинство опций в руках пользователя библиотеки, так как нет никакого дополнительного уровня косвенности между потоками внутри или снаружи.

Обязательно ли пользовательские потоки создаются и управляются библиотеками уровня пользователя, а не ядром-уровневые библиотеки?

'Пользовательские потоки' - это просто процессоподобные конструкции, которые не распознаются ядром.Вполне возможно, что библиотека уровня ядра будет использовать что-то подобное.Также возможно реализовать их напрямую, без использования каких-либо библиотек.

Обязательно ли потоки ядра создаются и управляются библиотеками уровня ядра, а не библиотеками уровня пользователя?

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

...