The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

futex (4)
  • futex (2) ( Русские man: Системные вызовы )
  • futex (2) ( Linux man: Системные вызовы )
  • >> futex (4) ( Русские man: Специальные файлы /dev/* )
  • futex (4) ( Linux man: Специальные файлы /dev/* )
  • futex (7) ( Linux man: Макропакеты и соглашения )
  •  

    НАЗВАНИЕ

    futex - быстрые связи пространства пользователя  

    СИНТАКСИС

    #include <linux/futex.h>
    
     

    ОПИСАНИЕ

    Ядро Linux обеспечивает работу с футексами (futex, 'Fast Userspace muTexes') как со строительным материалом для связей и семафоров пространства пользователя. Футексы очень просты и применяются для построения высокоуровневых связующих абстракций, таких как POSIX mutex.

    Это руководство не описывает все варианты решений, оно просто важно для разработки приложений и библиотек. Большинство программистов фактически не будут прямо использовать футексы, но будут полагаться на работу системных библиотек, основанных на них, например, на реализацию NPTL pthreads.

    Футекс идентифицируется блоком памяти, который может разделяться между разными процессами. В этих разных процессах он необязательно имеет одинаковые адреса. В еще более чистой форме, футекс имеет семантику семафоров; это счетчик, автоматически уменьшающийся или увеличивающийся; процессы могут ожидать изменения значения на положительное.

    Операцией футекса является полное пространство пользователя для бесспорных случаев. Ядро привлекается только в случае конфликтов.

    В его чистом виде футекс является выровненным целым, изменяемым только атомными ассемблерными инструкциями. Процессы могут разделять это целое поверх mmap, через разделяемые сегменты или потому что разделяется пространство памяти, в этом случае приложение обычно называется многопоточным.  

    СЕМАНТИКА

    Любые операции футексов начинаются в пространтсве пользователя, но также может быть нужно связываться с ядром, используя системный вызов futex(2).

    Для 'включения' футекса, исполните соответствующую инструкцию ассемблера, указывающую процессору атомно увеличить целое. После этого проверьте, действительно ли оно изменилось с 0 на 1, в этом случае больше не было ожидающих и операция завершена. Это бесспорный случай, он быстр и в целом общепринят.

    В спорном случае атомное увеличение изменяет счетчик с -1 (или другого отрицательного числа). Если это определено, то есть ожидающие его процессы. Пространство пользователя теперь должно установить счетчик в 1 и проинструктировать ядро на пробуждение всех ожидающих, используя операцию FUTEX_WAKE.

    Во время ожидания футекса для его 'выключения' существует обратная операция. Атомно уменьшите счетчик и проверьте, изменился ли он на 0 - в этом случае операция завершена и футекс бесспорен. В остальных случаях процесс должен установить счетчик в -1 и запросить у ядра другие процессы, ожидающие включения футекса. Это реализуется операцией FUTEX_WAIT.

    Системному вызову футекса может быть передан (необязательно) таймер, определяющий, как долго ядро должно ожидать включения футекса. В этом случае семантика будет более сложная и программист должен обратиться к futex(2) за более подробной информацией. Аналогично и для асинхронного ожидания футекса.  

    ЗАМЕЧАНИЯ

    Еще раз повторим: в чистом виде футексы не являются легкой в использовании абстракцией для конечных пользователей. Реализующие их программисты должны иметь хороший запас знаний о структуре футексов, также желательно изучить указанные в приложении документы.

    Данная страница руководства только обозначает основное использование примитивов futex(2).  

    АВТОРЫ

    Футексы были разработаны Hubertus Franke (IBM Thomas J. Watson Research Center), Matthew Kirkwood, Ingo Molnar (Red Hat) и Rusty Russell (IBM Linux Technology Center). Данное руководство создано Bert Hubert.  

    ВЕРСИИ

    Начальная поддержка футексов была встроена в Linux 2.5.7, но с другой семантикой, отличающейся от описанной выше. Данная семантика доступна, начиная с ядер Linux 2.5.40.  

    СМ. ТАКЖЕ

    futex(2), работу `Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux' (записки с Симпозиума Linux в Оттаве 2002), библиотеку примеров футексов futex-*.tar.bz2 <URL:ftp://ftp.kernel.org:/pub/linux/kernel/people/rusty/>.


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    СЕМАНТИКА
    ЗАМЕЧАНИЯ
    АВТОРЫ
    ВЕРСИИ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру