nptl -
библиотека
нитей POSIX
NPTL (Native POSIX Threads Library —
библиотека
нитей POSIX) это
библиотека
GNU C, в которой
реализованы
нити POSIX,
используется
в
современных
версиях Linux.
NPTL makes internal use of the first two real-time signals (signal numbers 32
and 33). One of these signals is used to support thread cancelation and POSIX
timers (see
timer_create(2)); the other is used as part of a mechanism
that ensures all threads in a process always have the same UIDs and GIDs, as
required by POSIX. These signals cannot be used in applications.
Чтобы не
допустить
случайного
использования
этих
сигналов в
приложениях,
что может
помешать
работе
реализации
NPTL, в
различных
функциях
библиотеки
glibc и
обёрточных
функциях
системных
вызовов
добавлено
сокрытие
этих
сигналов
от
приложений:
- •
- Сигнал
SIGRTMIN
определён
со
значением
34 (а не 32).
- •
- Интерфейсы
sigwaitinfo(2), sigtimedwait(2) и sigwait(3)
игнорируют
запросы на
ожидание
этих
сигналов,
если но
указаны в
аргументе
набора
сигналов.
- •
- Интерфейсы
sigprocmask(2) и pthread_sigmask(3)
игнорируют
попытки
блокировки
этих
сигналов.
- •
- Интерфейсы
sigaction(2), pthread_kill(3) и
pthread_sigqueue(3)
завершаются
с ошибкой
EINVAL (указан
некорректный
номер
сигнала),
если
заданы эти
сигналы.
- •
- Функция
sigfillset(3) не
включает
эти
сигналы
при
создании
полного
набора
сигналов.
На уровне
ядра Linux
идентификаторы
(пользовательский
и
групповой ID)
являются
атрибутов
нити.
Однако в POSIX
требуется,
чтобы все
нити POSIX
одного
процесса
имели
одинаковые
идентификаторы.
Для
удовлетворения
этого
требования
в
реализации
NPTL для всех
системных
вызовов,
изменяющих
идентификаторы
процесса,
созданы
обёрточные
функции,
которые
при
обращении
к
нижележащим
вызовам,
также
изменяют
идентификаторы
и всем
остальным
нитям
процесса.
В
реализации
каждого из
этих
системных
вызовов
используется
сигнал
реального
времени,
который
посылается
(с помощью
tgkill(2)) всем
остальным
нитях,
которым
нужно
изменить
идентификаторы.
Перед
отправкой
этих
сигналов,
нить, у
которой
изменяются
идентификаторы,
сохраняет
новые
идентификаторы
и
записывает
использующийся
системный
вызов в
глобальный
буфер.
Обработчик
сигнала в
принимающей
нити
извлекает
эту
информацию
и
использует
тот же
системный
вызов для
изменения
своих
идентификаторов.
Обёрточные
функции,
использующие
такую же
технику:
setgid(2),
setuid(2),
setegid(2),
seteuid(2),
setregid(2),
setreuid(2),
setresgid(2),
setresuid(2) и
setgroups(2).
Дополнительную
информацию
о
соответствии
NPTL стандарту
POSIX находится
в
pthreads(7).
В POSIX сказано,
что всем
нитям
процесса с
доступом к
памяти,
содержащей
общие для
процесса (
PTHREAD_PROCESS_SHARED)
мьютексы,
доступны
эти
мьютексы.
Однако в
64-битных
системах с
архитектурой
x86
определение
мьютекса
для x86-64
несовместимо
с
определением
для i386, что
означает,
что
исполняемые
32-битные и
64-битные
файлы не
могут
иметь
общих
мьютексов
в системах
x86-64.
credentials(7),
pthreads(7),
signal(7),
standards(7)
Русский
перевод
этой
страницы
руководства
был сделан Alex
Nik <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]