|
POSIX pthread_* в Linux, когда появилось и как реализовано? |
|
|
|
 |
Ответов
|
Jan 18 2007, 23:53
|

Участник

Группа: Участник
Сообщений: 15
Регистрация: 9-01-06
Из: Баку, Азербайджан
Пользователь №: 12 978

|
Цитата В большинстве книг по Linux не упоминается Posix thread library - вызовы с префиксом pthread_ Книги скорее всего старые, в новых изданиях описываются вызовы POSIX threads (pthread_) Пример: advancedlinuxprogramming.comЦитата Однако я встречал упоминание, что в последних версиях Linux это реализовано. Начиная с какой версии? Можно сказать во всех с ядром 2.6 и glibc >= 2.3.x, Насчет старых дистров с ядром 2.4 , не могу сказать точно, если есть, то бэкпортированно из 2.6 (у RHEL в особенности). Цитата Это отдельная библиотека, или набор системных вызовов? В каком хедере описаны? Как обстоят дела с многопоточностью в других uCLinux и других embedded ОСях? POSIX Threads в линуксе "работают" в ядре, интерфейс пользователя в библиотеке libpthread, хэдэр <pthread.h>, линкуется соответственно через -lpthread. Всё описано в документации glibc. Насчет uCLinux & co, Вам ничего сказать не могу, к сожалению никогда их не использовал
|
|
|
|
|
Jan 19 2007, 01:11
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Цитата(nazim @ Jan 18 2007, 23:53)  Можно сказать во всех с ядром 2.6 и glibc >= 2.3.x, Насчет старых дистров с ядром 2.4 , не могу сказать точно, если есть, то бэкпортированно из 2.6 (у RHEL в особенности). Цитата Это отдельная библиотека, или набор системных вызовов? В каком хедере описаны? Как обстоят дела с многопоточностью в других uCLinux и других embedded ОСях?
POSIX Threads в линуксе "работают" в ядре, интерфейс пользователя в библиотеке libpthread, хэдэр <pthread.h>, линкуется соответственно через -lpthread. Всё описано в документации glibc. Насчет uCLinux & co, Вам ничего сказать не могу, к сожалению никогда их не использовал  А точнее так: в ядре 2.4 были только процессы и все потоки с точки зрения ядра предствлялись процессами (только имели общую разделяемую память) с разными PID ами что можно было видеть соответствующими утилитами. В 2.6 появилось native thread тоесть поток как сущность на уровне ядра. Соотвественно создание потока стало менее ресурсоемким. Патч обеспечивающмй native thread в ядре существует, боюсь наврать, но он вроде не бэкпортированно из 2.6, а развивался сам по себе и в 2.6 просто его включили окончательно.
|
|
|
|
|
Jan 19 2007, 10:23
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(sff @ Jan 19 2007, 01:11)  А точнее так: в ядре 2.4 были только процессы и все потоки с точки зрения ядра предствлялись процессами (только имели общую разделяемую память) с разными PID ами что можно было видеть соответствующими утилитами. В 2.6 появилось native thread тоесть поток как сущность на уровне ядра. Соотвественно создание потока стало менее ресурсоемким.
Патч обеспечивающмй native thread в ядре существует, боюсь наврать, но он вроде не бэкпортированно из 2.6, а развивался сам по себе и в 2.6 просто его включили окончательно. Не совсем так. Цитирую Linux Kernel Development Second Edition By Robert Love: Цитата Threads are a popular modern programming abstraction. They provide multiple threads of execution within the same program in a shared memory address space. They can also share open files and other resources. Threads allow for concurrent programming and, on multiple processor systems, true parallelism. Linux has a unique implementation of threads. To the Linux kernel, there is no concept of a thread. Linux implements all threads as standard processes. The Linux kernel does not provide any special scheduling semantics or data structures to represent threads. Instead, a thread is merely a process that shares certain resources with other processes. Each thread has a unique task_struct and appears to the kernel as a normal process (which just happens to share resources, such as an address space, with other processes). This approach to threads contrasts greatly with operating systems such as Microsoft Windows or Sun Solaris, which have explicit kernel support for threads (and sometimes call threads lightweight processes). The name "lightweight process" sums up the difference in philosophies between Linux and other systems. To these other operating systems, threads are an abstraction to provide a lighter, quicker execution unit than the heavy process. To Linux, threads are simply a manner of sharing resources between processes (which are already quite lightweight)[11]. For example, assume you have a process that consists of four threads. On systems with explicit thread support, there might exist one process descriptor that in turn points to the four different threads. The process descriptor describes the shared resources, such as an address space or open files. The threads then describe the resources they alone possess. Conversely, in Linux, there are simply four processes and thus four normal task_struct structures. The four processes are set up to share certain resources. [11] As an example, benchmark process creation time in Linux versus process (or even thread!) creation time in these other operating systems. The results are quite nice.
Threads are created like normal tasks, with the exception that the clone() system call is passed flags corresponding to specific resources to be shared: clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, 0); The previous code results in behavior identical to a normal fork(), except that the address space, filesystem resources, file descriptors, and signal handlers are shared. In other words, the new task and its parent are what are popularly called threads. В книге речь идет о ядре 2.6
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
Сообщений в этой теме
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   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 InvisibleFed ЦитатаВ нормальной реализации потоков (я не знаю, ... Jan 23 2007, 05:17 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|