1 / 15

Разработка библиотеки нитей POSIX реального времени

Разработка библиотеки нитей POSIX реального времени. Магистерская диссертация. Студент : Фёдоров Александр, 418 гр. Научный руководитель : Гилязов С.С. Нити (threads) — легковесные процессы, разделяющие ресурсы системы.

vera
Télécharger la présentation

Разработка библиотеки нитей POSIX реального времени

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Разработка библиотеки нитей POSIX реального времени Магистерская диссертация Студент: Фёдоров Александр, 418 гр. Научный руководитель: Гилязов С.С.

  2. Нити (threads) — легковесные процессы, разделяющие ресурсы системы. • POSIX.1c (он же IEEE 1003.1c) — интерфейс программирования приложений, определяющий создание и управление нитями. • Альтернативы интерфейсу программирования приложений POSIX: • OpenMP • Intel Thread Building Blocks • Boost.Threads

  3. Цель работы Создание библиотеки нитей, совместимой со стандартом IEEE 1003.1c и ориентированной на работу в системах реального времени.

  4. Существующие библиотеки нитей POSIX: • LinuxThreads (менеджер нитей, синхронизация на основе сигналов) • NPTL (поддержка в ядре, синхронизация на основе futex'ов) • В большинстве ОСРВ своя реализация (vxWorks, QNX, LynxOS, …) • el_pthread (разработана для ОС Эльбрус, имеет лучшее время переключения контекста)

  5. Чем хороша el_pthread? • Тем, что... • Очередь нитей в ядре инициализируется заранее • Объекты синхронизации резидентируются в ОЗУ • Тесная интеграция с ядром

  6. Чем несовершенна el_pthread? Тем, что... Время переключения контекста, мкс • Ограничена масштабируемость из-за одной хэшированной очереди для объектов синхронизации • Ограничено соответствие POSIX • Реализовано элементарное наследование приоритета • Нельзя клонировать процесс

  7. Требования систем реального времени: • Быстрый вероятный путь исполнения операции • Предсказуемое время исполнения операции • Минимальное время реакции на внешние события • Минимум накладных расходов, в том числе: • Минимум системных вызовов • Минимум переключений контекста

  8. Средства обеспечения требований СРВ: • Использование атомарных операций в пользовательском пространстве • Использование ожидающих владельцев • Ограничение длительности отключения прерываний • Тесная интеграция библиотеки с ядром ОС

  9. Атомарная операция Да Свободен? Успех Нет Пользователь Ядро Системный вызов Реализация мьютексов • Мьютексы сериализуют выполнение участка кода. • Типичное распределение вероятностей для их состояния: • 80 % — мьютекс свободен • 15 % — есть владелец • 5 % — есть другие нити в очереди С наибольшей вероятностью мьютекс свободен, важно оптимизировать этот случай. Используем атомарные операции вместо системных вызовов.

  10. Нить с высоким приоритетом Нить с низким приоритетом Захват Захват Захват Захват Передача Передача Захват Кража Передача Передача Освобождение Освобождение Реализация мьютексов Порядок, в котором нити владеют мьютексом, может быть изменён на лету. Без ожидающих владельцев С ожидающими владельцами Нить с высоким приоритетом Нить с низким приоритетом

  11. Мьютекс 2 Нить 3 Нить 4 Нить 1 Мьютекс 1 Нить 2 Нить 5 Нить 6 Мьютекс 3 Реализация мьютексов • Особенности реализации протокола наследования приоритета: • Требуется наличие Thread Local Storage для оптимизации через атомарные операции • Возможно образование цепочек наследования приоритета с циклами

  12. Реализация условных переменных Условные переменные позволяют нитям ожидать выполнения условия. • Использование спинлоков ядра ОС (повышает предсказуемость времени исполнения операций) • Дублирование функциональности захвата и освобождения мьютексов в ядре (снижает накладные расходы) • Для улучшения латентности прерывания периодически включаются • При выполнении pthread_cond_broadcast() будится максимум одна нить (если мьютекс занят, будить нет необходимости)

  13. 1-я нить (высокий приоритет) Блокируется на барьере Регистрируется на барьере Будит 1-ю нить 2-я нить (низкий приоритет) Вытесняет 2-ю нить 3-я нить (средний приоритет) Реализация барьеров Барьер блокирует исполнение нитей, пока их не наберётся заданное число. • Использование спинлоков ядра ОС (аналогично условным переменным) • Для улучшения латентности прерывания периодически включаются • Используется алгоритм защиты от неограниченной инверсии приоритетов Механизм возникновения инверсии приоритетов на барьерах

  14. Измеренное время переключения контекста с использованием условных переменных библиотек elpthread (новая) и el_pthread (старая): Влияние протокола взаимных блокировок

  15. Итоги работы • Создана библиотека нитей, реализующая все функции из IEEE Std 1003.1с-2004 и двоично совместимая с NPTL • Тестовым пакетом posixtestsuite подтверждено соответствие стандарту всех реализованных функций кроме read-write lock'ов • Планируется дальнейшая работа над библиотекой (оптимизация адаптивных мьютексов, read-write lock'и, поддержка атрибута устойчивости мьютексов из стандарта 2008 г.)

More Related