Недостатки традиционной поддержки многопотоковости в Linux 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Недостатки традиционной поддержки многопотоковости в Linux



Основы поддержки многотопотоковости в ядре Linux не испытали принципиальных изменений от появления системного вызова clone(). За это время Linux из экспериментальной системы превратился на систему промышленного уровня, в которой выполняют корпоративные применения в круглосуточном режиме с большой нагрузкой.

Такое использование системы выдвинуло к реализации многотопотоковости требования высокой надежности и масштабируемости. Стало очевидно, что реализация, основанная на системном вызове clone(), этим требованиям не отвечает. Назовем некоторые причины этого несоответствия.

♦ Поскольку потоки, созданные с помощью clone(), фактически были процессами, которые совместно используют ресурсы, создание каждого потока увеличивало количество процессов в системе.

♦ Каждый поток в системе, будучи по сути процессом, имел собственный идентификатор процесса (ріd), что не отвечало стандарта POSIX. Кроме того, если поток создавал другой поток, между ними возникала связь «предок-потомок», тогда как все потоки должны быть равноправными.

Каждое многотопотоковое применение пользователя обязательно создавало дополнительный поток (поток-менеджер), который отвечал за создание и уничтожение потоков и перенаправлял им сигналы. Наличие такого потока снижало надежность и масштабируемость системы (например, в случае аварийного завершения потока-менеджера приложения оставалось в неопределенном виде).

Все эти факторы делали многотопотоковость в Linux быстрее интересным полем для экспериментов, чем реальным средством повышения производительности и масштабируемости приложений. Решить все проблемы путем устранения недостатков clone() и LinuxThreads оказалось невозможным, нужно была полная переработка средств реализации многотопотоковости в ядре и создание новой библиотеки поддержки потоков.

Особенности новой реализации много поточности в ядре Linux

Попытки усовершенствовать реализацию многотопотоковости в ядре системы, а также библиотеку поддержки потоков, которая использует новые возможности ядра, описанны в литературе [67]. Новая реализация многотопотоковости в ядре системы имеет такие особенности.

♦ Повысилась производительность операции создания и завершение потоков. Снято ограничения на общее количество потоков в системе. Система остается стабильной при условиях одновременного создания и завершение сотен тысяч потоков (при наличии достаточного объема оперативной памяти).

♦ Все потоки процесса теперь возвращают один и тот самый идентификатор (pid), кроме того, связь «предок-потомок» между ними не поддерживается (у созданного потока сохраняется тот самый предок, что и у потока-творца). Как процесс в системе регистрируют только начальный поток приложения.

♦ Реализация вызова clone(), расширена таким образом, что сделала ненужным поток-менеджер.

Сегодня новые средства интегрированные в тестовую версию ядра. Доступная также обновленная реализация библиотеки потоков, которая получила название NPTL (Native POSIX Threads Library).

Библиотека поддержки потоков NPTL

Библиотека NPTL предназначена для того, чтобы, опираясь на новые возможности ядра, обеспечить полную и корректную реализацию стандарта потоков POSIX для использования в прикладных программах.

Основной особенностью библиотеки NPTL есть то, что в ней сохранилась поддержка схемы многопотоковости 1:1, вследствие чего достигается простота и надежность реализации. При этом производительность и масштабируемость обеспечены обновленной поддержкой багатопотоковості в ядре. Программный интерфейс библиотеки не изменился сравнительно с LinuxThreads.

Потоки ядра Linux

Кроме процессов и потоков пользователя, Linux также поддерживает специальный вид планированных объектов, которые имеют уже знакомое название - потоки ядра. Такие потоки планируют как обычные процессы и потоки, при этом каждый из них имеет свой идентификатор (ріd).

Отличия потоков ядра от процессов и потоков пользователя состоят в потому, что:

♦ функции потока для них определяют в коде ядра;

♦ они выполняются только в режиме ядра;

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



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 81; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.139.50 (0.004 с.)