ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
From: Michael Pozhidaev <msp@altlinux.ru>
To: ALT Linux Sisyphus discussions <sisyphus@lists.altlinux.org>
Subject: Re: [sisyphus] Q: Очень непростой вопрос на тему select() и сигналов
Date: Fri, 10 Apr 2009 23:00:35 +0700
Message-ID: <m3r60033do.fsf@blard.localdomain> (raw)
In-Reply-To: <20090410123604.GB23228@newmaster.mivlgu.local> (Sergey Vlasov's message of "Fri\, 10 Apr 2009 16\:36\:04 +0400")

Hello, Sergey Vlasov!

Сергей, спасибо за такое подробное и точное объяснение. Сейчас ещё
приглянулся signalfd(), но как-то пока вызывает сомнение необходимость
иметь свежее ядро. Думаю, что могут ещё найтись желающие пожить, скажем,
на 2.6.18. А в остальном оно прямо в точку. :)

> Для архитектуры i386 системные вызовы pselect6 и ppoll были добавлены в
> ядро в версии 2.6.16, для x86_64 - только в версии 2.6.19 (хотя номера
> системных вызовов в asm/unistd.h были зарезервированы ещё в 2.6.16).
> Однако имеет значение ещё и версия и детали сборки glibc - совсем старые
> версии glibc (до 2.5) предоставляли только бесполезную эмуляцию pselect,
> начиная с glibc-2.5, предусмотрена поддержка настоящего системного вызова,
> но с автоматическим переключением на эмуляцию, если ядро слишком старое и
> возвращает ошибку ENOSYS; кроме того, во время сборки должен быть доступен
> asm/unistd.h с определением __NR_pselect6.  В результате всего этого
> определить, что при вызове программой функции pselect() действительно
> используется этот системный вызов, затруднительно (даже при наличии
> достаточно свежего ядра можно получить эмуляцию либо на древней версии
> glibc, либо даже на новой, но собранной со старыми заголовками ядра).
>
> В Linux есть и другие способы работы с сигналами совместо с select(), не
> имеющие проблем с эмуляцией, не гарантирующей правильную работу:
>
>  - Вариация на тему pipe() - для оповещения основного цикла о пришедшем
>    сигнале можно использовать дескриптор eventfd, требующий несколько
>    меньше ресурсов, чем pipe; системный вызов доступен начиная с ядра
>    2.6.22 (для i386 и x86_64); можно достаточно легко написать код,
>    использующий eventfd при наличии его поддержки, но автоматически
>    переключающийся на pipe при обнаружении устаревшего ядра или glibc.
>
>  - signalfd - позволяет перевести сигналы в готовность файловых
>    дескрипторов; системный вызов доступен начиная с ядра 2.6.22 (для i386
>    и x86_64), поддержка в glibc - начиная с версии 2.8; в ядре 2.6.25 была
>    исправлена обработка сигналов, переданных через sigqueue().
> _______________________________________________
> Sisyphus mailing list
> Sisyphus@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/sisyphus

-- 
Michael Pozhidaev. E-mail: msp@altlinux.ru.
Tomsk State University. http://www.csd.tsu.ru
ALT Linux Team. http://www.altlinux.org



  reply	other threads:[~2009-04-10 16:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-09 22:48 Michael Pozhidaev
2009-04-09 23:49 ` Mikhail Efremov
2009-04-10  1:50   ` Michael Pozhidaev
2009-04-10  9:40     ` Mikhail Efremov
2009-04-10 12:36       ` Sergey Vlasov
2009-04-10 16:00         ` Michael Pozhidaev [this message]
2009-04-10 16:22           ` Mikhail Efremov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3r60033do.fsf@blard.localdomain \
    --to=msp@altlinux.ru \
    --cc=sisyphus@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git