реклама на сайте
подробности

 
 
> POSIX pthread_* в Linux, когда появилось и как реализовано?
Johny
сообщение Nov 5 2006, 19:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 18-10-05
Пользователь №: 9 792



В большинстве книг по Linux не упоминается Posix thread library - вызовы с префиксом pthread_ (типа pthread_create()). Однако я встречал упоминание, что в последних версиях Linux это реализовано. Начиная с какой версии? Это отдельная библиотека, или набор системных вызовов? В каком хедере описаны?
Как обстоят дела с многопоточностью в других uCLinux и других embedded ОСях?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
InvisibleFed
сообщение Jan 23 2007, 05:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
В нормальной реализации потоков (я не знаю, до какой степени уже "нормальная" реализация в Linux - некоторое время не смотрел в эту сторону, но она всё больше сдвигается в сторону "нормальной" ) - "если у тебя внутри процесса несколько потоков" - то шедулить их будет, конечно же - ядро , потому что единицей шеулирования является поток, а вовсе не процесс, как раз о процессе ядро может и вообще ничего не знать: это знане нужно менеджеру процессов для запуска, завершения и корректировки статистики в ходе выполнения, не более. А вот как раз приоритет выполнения - он является состаной частью атрибутной записи потока - pthread_attr_t. Да кроме всего прочего, этот приоритет (и сделать это может только ядро ОС) время от времени системе (хорошей системе ) придётся изменять без вашего ведома: ввеох-вниз, так что вы этого и не заметите без специальных усилий - при чисто статических приоритетах вы нарвётесь на инверсию пиоритетов (при 3-х и более процессов/потоков) и ... тю-тю ...

P.S. "нормальную" реализацию потоков, о которой я говорил выше, которая полностью соответствует POSIX реального времени - можем наблюдать в QNX ... рассмотревши её там - можно переносить аналогии и на Linux.


Последний раз писал потоки около года назад в linux 2.4, используя именно pthread_*. Все-таки "как должно быть" и "как есть" - разные вещи. Мы говорим об одних и тех же вещах на разных языках. Выдержки из книги "Программирование под Linux. Профессиональный подход.":

"... Потоковые функции, соответствующие стандарту Posix, реализованы в Linux не так, как в большинстве других версий Unix. Суть в том, что в Linux потоки реализованы в виде процессов. Когда вызывается функция pthread_create(), операционная система на самом деле создает новый процесс, выполняющий поток. Но это не тот процесс, который создается функцией fork(). Он, в частности, делит общее адресное пространство и ресурсы с исходным процессом, а не получает их копии."

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

Ведь если подумать, зачем все эти исключения, взаимоблокировки, семафоры, если операционка сама взяла и распланировала как ей вздумается, и плевала она на мои семафоры. Русурсы в системе выделяются процессу, пользует их процесс, приоритет выставляется - процессу, а значит, я считаю, и объектом ядра является именно процесс.

Планирование в системах реального времени - это ваще отдельная песня. Вы правы, система реального времени не должна допускать взаимоблокировок НИКОГДА. И часто, при определенной настройке ("жесткая" система реального времени, "мягкая"), она может послать юзера с его планированием, чтобы только не допустить собственного краха.
Вероятно в QNX Posix реализован не так как в Linux.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Johny   POSIX pthread_* в Linux   Nov 5 2006, 19:04
- - Harbour   появилось в 1996 (имплементация Xavier Leroy), нач...   Nov 6 2006, 06:30
|- - Johny   Цитата(Harbour @ Nov 6 2006, 09:30) появи...   Nov 7 2006, 17:35
||- - KirillS   Цитата(Johny @ Nov 7 2006, 19:35) Цитата(...   Nov 10 2006, 16:02
|- - Olej   Цитата(Harbour @ Nov 6 2006, 07:30) Много...   Jan 19 2007, 21:43
|- - Harbour   Цитата(Olej @ Jan 19 2007, 20:43) Цитата(...   Jan 20 2007, 12:57
- - v_shamaev   Цитата(Johny @ Nov 5 2006, 22:04) Как обс...   Nov 6 2006, 06:43
|- - AlexandrY   Процессы и потоки выдумка Linux-а. Там процессы н...   Jan 18 2007, 18:02
|- - v_shamaev   Цитата(AlexandrY @ Jan 18 2007, 18:02) Пр...   Jan 18 2007, 20:24
|- - Harbour   Цитата(AlexandrY @ Jan 18 2007, 17:02) Пр...   Jan 19 2007, 10:03
|- - Olej   Зесь уже очень верно заметили раньше: Цитата(Alexa...   Jan 22 2007, 11:55
- - Harbour   В ядре 2.6 появился TLS и соответствующая поддержк...   Nov 8 2006, 06:47
|- - Playnet   Цитата(Harbour @ Nov 8 2006, 06:47) Кстат...   Jan 18 2007, 16:20
- - nazim   ЦитатаВ большинстве книг по Linux не упоминается P...   Jan 18 2007, 23:53
|- - sff   Цитата(nazim @ Jan 18 2007, 23:53) Можно ...   Jan 19 2007, 01:11
|- - makc   Цитата(sff @ Jan 19 2007, 01:11) А точнее...   Jan 19 2007, 10:23
|- - sff   2 makc Извеняюсь, что наврал.. хоть и появились k...   Jan 19 2007, 11:28
|- - makc   Цитата(sff @ Jan 19 2007, 11:28) 2 makc И...   Jan 19 2007, 12:00
|- - v_shamaev   Цитата(makc @ Jan 19 2007, 12:00) Думаю, ...   Jan 19 2007, 12:40
|- - makc   Цитата(v_shamaev @ Jan 19 2007, 12:40) Ци...   Jan 19 2007, 12:46
||- - v_shamaev   Цитата(makc @ Jan 19 2007, 12:46) Цитата(...   Jan 19 2007, 14:56
||- - makc   Цитата(v_shamaev @ Jan 19 2007, 14:56) Хо...   Jan 19 2007, 15:04
|- - Playnet   Цитата(v_shamaev @ Jan 19 2007, 12:40) Ци...   Jan 19 2007, 19:30
- - InvisibleFed   Имеется книженция "Unix. Взаимодействие проце...   Jan 20 2007, 14:07
|- - makc   Цитата(InvisibleFed @ Jan 20 2007, 14:07)...   Jan 20 2007, 14:12
- - beer_warrior   ЦитатаЕсли программу предназначенную для работы на...   Jan 20 2007, 18:30
|- - makc   Цитата(beer_warrior @ Jan 20 2007, 18:30)...   Jan 20 2007, 18:36
|- - Harbour   Цитата(beer_warrior @ Jan 20 2007, 17:30)...   Jan 21 2007, 09:51
- - InvisibleFed   Книжку на днях постараюсь залить. Сообщу. Цитата...   Jan 21 2007, 04:52
- - InvisibleFed   ЦитатаРаботать такое приложение будет тоже медленн...   Jan 21 2007, 11:37
|- - makc   Цитата(InvisibleFed @ Jan 21 2007, 11:37)...   Jan 21 2007, 12:03
- - InvisibleFed   Я про 2.4. О тредах знает ТОЛЬКО процесс. Ядро о н...   Jan 21 2007, 14:07
|- - makc   Цитата(InvisibleFed @ Jan 21 2007, 14:07)...   Jan 21 2007, 14:25
||- - Johny   Цитата(makc @ Jan 21 2007, 18:25) Кроме т...   Jul 4 2007, 17:39
|- - Olej   Цитата(InvisibleFed @ Jan 21 2007, 12:37)...   Jan 21 2007, 21:26
- - path_finder   Кстати, раз пошла такая пьянка, может подскажет кт...   Jan 21 2007, 23:35
|- - Olej   Цитата(path_finder @ Jan 22 2007, 00:35) ...   Jan 22 2007, 01:06
- - Harbour   Здесь путаницу вносит видимо несколько реализаций ...   Jan 22 2007, 09:38
- - InvisibleFed   ЦитатаИз POSIX определения уже понятно, что именн...   Jan 22 2007, 10:53
|- - Olej   Цитата(InvisibleFed @ Jan 22 2007, 11:53)...   Jan 22 2007, 11:15
|- - Harbour   Цитата(InvisibleFed @ Jan 22 2007, 09:53)...   Jan 23 2007, 10:02
|- - Olej   Цитата(InvisibleFed @ Jan 23 2007, 06:17)...   Jan 23 2007, 11:36
- - InvisibleFed   Цитатаэтой книжке в прошлую пятницу 10 лет исполни...   Jan 23 2007, 13:34
- - Johny   Не стал открывать новую тему. Возникла такая про...   Oct 24 2007, 16:08
- - Olej   Цитата(Johny @ Oct 24 2007, 19:08) я испо...   Oct 24 2007, 16:24
- - Johny   Цитата(Olej @ Oct 24 2007, 19:24) ... я н...   Oct 30 2007, 06:08
- - Olej   Цитата(Johny @ Oct 30 2007, 09:08) pthrea...   Oct 31 2007, 13:50
- - Johny   Цитата(Olej @ Oct 31 2007, 16:50) P.S. к...   Nov 2 2007, 08:59


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 19:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016