Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Недостатки традиционной поддержки многопотоковости в 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; просмотров: 88; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.130.139 (0.006 с.) |