Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
13 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
55.00 kB
Просмотров:
49
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Реализации многопоточности](/documents_6/bc000883897381c03d722d5b542e93f5/img0.jpg)
Содержание слайда: Реализации многопоточности
Программирование с использованием POSIX thread library
2006-2007 Иртегов Д.В.
Учебное пособие подготовлено по заказу и при поддержке
ООО «Сан Майкросистемс СПБ»
№2 слайд![Как можно реализовать](/documents_6/bc000883897381c03d722d5b542e93f5/img1.jpg)
Содержание слайда: Как можно реализовать многопоточность
Пользовательские нити
Системные нити
Гибридная реализация (MxN)
№3 слайд![Пользовательские нити](/documents_6/bc000883897381c03d722d5b542e93f5/img2.jpg)
Содержание слайда: Пользовательские нити
Планировщик в пользовательском адресном пространстве
+ Не требует переделки ядра системы
+ Не требует дополнительных системных ресурсов
+ Легко реализовать
- Как быть с блокирующимися системными вызовами?
- Не может использовать несколько процессоров
№4 слайд![Примеры пользовательских](/documents_6/bc000883897381c03d722d5b542e93f5/img3.jpg)
Содержание слайда: Примеры пользовательских нитей
Fibers (волокна) в Win32
Не могут исполнять блокирующиеся системные вызовы
Поэтому очень редко используются
Задачи в Minix (когда Minix работает как задача полноценной Unix-системы)
№5 слайд![Системные нити Для](/documents_6/bc000883897381c03d722d5b542e93f5/img4.jpg)
Содержание слайда: Системные нити
Для планирования используется системный планировщик
- Нужна переделка планировщика и процедуры создания процессов
- Системные процессы считаются дорогим ресурсом (занимают память ядра)
+ Планировщик в ядре так или иначе уже есть
+ Нет проблемы блокирующихся системных вызовов
+ Можно использовать все процессоры в системе
№6 слайд![Гибридная реализация MxN](/documents_6/bc000883897381c03d722d5b542e93f5/img5.jpg)
Содержание слайда: Гибридная реализация (MxN)
Требует наличия как системного, так и пользовательского планировщика
Системный планировщик поддерживает M нитей на процесс.
Пользовательский планировщик поддерживает N нитей (N≥M)
Пользовательский планировщик распределяет пользовательские нити между системными нитями, подобно тому, как планировщик многозадачной ОС распределяет задания между процессорами
№7 слайд![Гибридный планировщик Имеет](/documents_6/bc000883897381c03d722d5b542e93f5/img6.jpg)
Содержание слайда: Гибридный планировщик
+ Имеет все преимущества системного планировщика
+ По идее, пользовательская нить должна быть дешевле (для нее не обязательно создается системная нить)
- Возникает лишняя сущность (пользовательский планировщик)
- Во многих реальных приложениях M растет и быстро достигает N
№8 слайд![Гибридный планировщик в](/documents_6/bc000883897381c03d722d5b542e93f5/img7.jpg)
Содержание слайда: Гибридный планировщик в старых версиях Solaris
Системные нити называются LWP (Light Weight Process – легковесный процесс)
Системные нити подчинены процессу
Пользовательских нитей больше, чем системных (во всяком случае, в начале)
Когда все LWP садятся в блокирующиеся системные вызовы, система посылает сигнал SIGWAITING
Библиотека ловит SIGWAITING и может создать новый LWP
№9 слайд![Гибридный планировщик в](/documents_6/bc000883897381c03d722d5b542e93f5/img8.jpg)
Содержание слайда: Гибридный планировщик в Solaris (продолжение)
Библиотека позволяет привязывать нити к определенному LWP (bound thread)
Можно управлять количеством LWP (set concurrency)
В POSIX Thread Library есть API позволяющие добиться того же эффекта (thread scope)
В Solaris 9 от этого отказались и перешли к системному планировщику (LWP на каждую пользовательскую нить)
Старые API остались, но их вызовы ничего не делают
SCO UnixWare, IBM AIX, HP HP/UX по прежнему поддерживают гибридный планировщик
№10 слайд![POSIX Threads в Linux В Linux](/documents_6/bc000883897381c03d722d5b542e93f5/img9.jpg)
Содержание слайда: POSIX Threads в Linux
В Linux в ядре 2.4 есть системные нити (clone(2)). Эти нити имеют собственный PID и собственную запись в таблице процессов
Linux поддерживает основные функции POSIX Thread API, но есть ряд несовместимостей
В Linux 2.6 была реализована т.наз. NPTL (Native POSIX Thread Library), более похожая на стандарт POSIX.
Linux 2.4 и 2.6 используют системные нити (одна системная нить на каждую пользовательскую)
№11 слайд![Сборка многопоточных программ](/documents_6/bc000883897381c03d722d5b542e93f5/img10.jpg)
Содержание слайда: Сборка многопоточных программ
В большинстве Unix-систем сборка многопоточных программ требует подключения библиотеки libpthread.so
(cc -lpthread program.c …)
Также многие компиляторы рекомендуют использовать специальные ключи
-mt - Sun Studio C compiler
-threads или -pthread - GNU C
(в зависимости от сборки)
У старых компиляторов ключ -mt мог подключать другую версию libc
У современных компиляторов ключ -mt отключает небезопасные оптимизации и определяет препроцессорные символы
(_REENTRANT в Solaris)
Ряд стандартных include-файлов содержат директивы условной компиляции, использующие _REENTRANT, и заменяют некоторые небезопасные конструкции на более приемлемые для многопоточной программы
№12 слайд![Еще о сборке Solaris В](/documents_6/bc000883897381c03d722d5b542e93f5/img11.jpg)
Содержание слайда: Еще о сборке (Solaris 10)
В Solaris 10 библиотека libc.so содержит реализацию POSIX Thread library, т.е.
-lpthread указывать не надо
libpthread.so сохранена для совместимости со старыми сборочными скриптами
№13 слайд![Еще о сборке Linux . В Linux](/documents_6/bc000883897381c03d722d5b542e93f5/img12.jpg)
Содержание слайда: Еще о сборке (Linux 2.6)
В Linux libstdc++.so содержит «слабые» (weak) определения символов POSIX Thread library.
Поэтому программа на C++ без ключа -lphtread соберется, но работать не будет