Jump to content

Интерфейсы ядра Linux

(Перенаправлено из Linux API )
Linux API, Linux ABI, а также встроенные в ядро ​​API и ABI.

Ядро Linux предоставляет множество интерфейсов для кода пользовательского пространства и режима ядра, которые используются для разных целей и имеют разные свойства по своей конструкции. существует два типа интерфейса прикладного программирования В ядре Linux (API):

  1. API «ядро – пользовательское пространство»; и
  2. «внутренний» API ядра.
API Linux состоит из интерфейса системных вызовов ядра Linux, библиотеки GNU C (от GNU ), libcgroup , [ 1 ] libdrm , libalsa и libevdev [ 2 ] (автор: freedesktop.org ).
Linux API против POSIX API

Linux API включает API ядра и пользовательского пространства, который позволяет коду в пользовательском пространстве получать доступ к системным ресурсам и службам ядра Linux. [ 3 ] Он состоит из интерфейса системных вызовов ядра Linux и подпрограмм стандартной библиотеки C. Целью разработки Linux API было предоставление полезных функций спецификаций, определенных в POSIX, таким образом, чтобы они были достаточно совместимыми, надежными и производительными, а также предоставление дополнительных полезных функций, не определенных в POSIX, так же, как ядро. API пользовательского пространства других систем, реализующих API POSIX, также предоставляют дополнительные функции, не определенные в POSIX.

Linux API по собственному желанию оставался стабильным на протяжении десятилетий благодаря политике отсутствия критических изменений; эта стабильность гарантирует переносимость исходного кода . [ 4 ] В то же время разработчики ядра Linux исторически были консервативны и дотошны при введении новых системных вызовов. [ нужна ссылка ]

Большая часть доступного бесплатного программного обеспечения с открытым исходным кодом написана для POSIX API. Поскольку в ядро ​​Linux входит гораздо больше разработок по сравнению с другими POSIX-совместимыми комбинациями ядра и стандартной библиотеки C, [ нужна ссылка ] ядро Linux и его API были дополнены дополнительными функциями. Программирование для полного API Linux, а не только для POSIX API, может дать преимущества в тех случаях, когда эти дополнительные функции полезны. Хорошо известными современными примерами являются udev , systemd и Weston . [ 5 ] Такие люди, как Леннарт Поеттеринг, открыто выступают за предпочтение Linux API API POSIX, где это дает преимущества. [ 6 ]

На FOSDEM 2016 Майкл Керриск объяснил некоторые предполагаемые проблемы с API пользовательского пространства ядра Linux, описав, что он содержит множество ошибок проектирования, будучи нерасширяемым, неподдерживаемым, слишком сложным, ограниченного назначения, нарушающим стандарты и непоследовательным. . Большинство этих ошибок невозможно исправить, поскольку это приведет к поломке ABI, который ядро ​​предоставляет пользовательскому пространству. [ 7 ]

Интерфейс системных вызовов ядра Linux

[ редактировать ]

Интерфейс системных вызовов ядра — это набор всех реализованных и доступных системных вызовов в ядре. В ядре Linux различные подсистемы, такие как Direct Rendering Manager (DRM), определяют свои собственные системные вызовы, все из которых являются частью интерфейса системных вызовов.

Публично обсуждаются различные вопросы с организацией системных вызовов ядра Linux. На проблемы указывали Энди Лютомирски, Майкл Керриск и другие. [ 8 ] [ 9 ] [ 10 ] [ 11 ]

Стандартная библиотека C

[ редактировать ]
Библиотека GNU C — это оболочка интерфейса системных вызовов ядра Linux.

Стандартная библиотека C для Linux включает в себя оболочки системных вызовов ядра Linux; сочетание интерфейса системных вызовов ядра Linux и стандартной библиотеки C — это то, что создает Linux API. Некоторые популярные реализации стандартной библиотеки C:

Дополнения к POSIX

[ редактировать ]

Как и в других Unix-подобных системах, существуют дополнительные возможности ядра Linux, не являющиеся частью POSIX:

  • подсистема cgroups , системные вызовы вводят и libcgroup [ 1 ]
  • Системные вызовы Direct Rendering Manager , особенно частные ioctls драйвера для отправки команд, не являются частью спецификаций POSIX.
  • Advanced Linux Sound Architecture может устанавливать системные вызовы, которые не являются частью спецификаций POSIX.
  • Система вызывает futex (быстрый мьютекс пользовательского пространства), epoll, splice, dnotify, fanotify, и inotify до сих пор были эксклюзивными для ядра Linux.
  • Системный вызов getrandom был представлен в версии 3.17 основной ветки ядра Linux. [ 12 ]
  • memfd было предложено kdbus разработчиками [ 13 ]
    • memfd_create был объединен с основной веткой ядра Linux в версии ядра 3.17.
  • readahead инициирует «упреждающее чтение» файла в страничный кеш

DRM имел первостепенное значение для разработки и реализации четко определенных и производительных бесплатных драйверов графических устройств с открытым исходным кодом, без которых вообще не было бы никакого ускорения рендеринга, на сервере X.Org были бы доступны только 2D-драйверы . DRM был разработан для Linux и с тех пор был портирован и на другие операционные системы. [ 14 ]

Дополнительные библиотеки

[ редактировать ]
Linux API и Linux ABI

Термин Linux ABI относится к ABI ядра и пользовательского пространства. относится Двоичный интерфейс приложения к скомпилированным двоичным файлам в машинном коде . Поэтому любой такой ABI привязан к набору команд . Определение полезного ABI и поддержание его стабильности — это не обязанность разработчиков ядра Linux или разработчиков библиотеки GNU C, а скорее задача дистрибутивов Linux и независимых поставщиков программного обеспечения (ISV), которые хотят продавать и обеспечивать поддержку своих проприетарное программное обеспечение в виде двоичных файлов только для одного Linux ABI, а не для поддержки нескольких Linux ABI.

ABI должен быть определен для каждого набора инструкций, например x86 , x86-64 , MIPS , ARMv7-A (32-бит), ARMv8-A (64-бит) и т. д. с порядком байтов , если оба поддерживаются.

Он должен иметь возможность компилировать программное обеспечение с помощью различных компиляторов в соответствии с определениями, указанными в ABI, и достигать полной двоичной совместимости. К бесплатным компиляторам с открытым исходным кодом относятся, например, GNU Compiler Collection , LLVM / Clang .

Внутриядерные API

[ редактировать ]

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

Ядро Linux является монолитным, поэтому драйверы устройств являются компонентами ядра. Чтобы облегчить бремя компаний, поддерживающих свои (собственные) драйверы устройств за пределами основного дерева ядра, неоднократно запрашивались стабильные API для драйверов устройств. Разработчики ядра Linux неоднократно отрицали гарантию стабильности встроенных в ядро ​​API для драйверов устройств. Такая гарантия остановила бы разработку ядра Linux в прошлом и будет продолжаться в будущем, и из-за природы бесплатного программного обеспечения с открытым исходным кодом в этом нет необходимости. Следовательно, ядро ​​Linux по своему выбору не имеет стабильного встроенного API. [ 15 ]

Внутриядерные ABI

[ редактировать ]

Поскольку не существует стабильных встроенных в ядро ​​API, не может быть и стабильных встроенных в ядро ​​ABI. [ 16 ]

API-интерфейсы абстракции

[ редактировать ]
OpenGL действительно представляет собой API-интерфейс абстракции, позволяющий использовать различные графические процессоры разных производителей без необходимости программировать для каждого из них конкретно.
Но реализация спецификации OpenGL выполняется на ЦП в контексте работающей операционной системы. Одной из целей разработки Vulkan было сделать «графический драйвер», то есть реализацию графического API, делать меньше.

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

См. также

[ редактировать ]
  • Интерфейс программирования Linux Майкла Керриска
  • Семафор (программирование)
  • системный вызов – это функция, позволяющая программам запрашивать службы у ядра.
    • eventfd()
    • netlink — семейство сокетов, используемое для IPC между процессами ядра и пользовательского пространства, разработанное как преемник йоктл ; Netlink был добавлен Аланом Коксом во время разработки ядра Linux 1.3 в качестве интерфейса символьного драйвера для обеспечения нескольких двунаправленных каналов связи ядра и пользовательского пространства. Затем Алексей Кузнецов расширил его во время разработки ядра Linux 2.1, чтобы обеспечить гибкий и расширяемый интерфейс обмена сообщениями для новой усовершенствованной инфраструктуры маршрутизации. С тех пор сокеты Netlink стали одним из основных интерфейсов, которые подсистемы ядра предоставляют приложениям пользовательского пространства в Linux. Современные WNIC драйверы используют его для связи с пользовательским пространством.
  • Windows API - статья о различных API, доступных в операционных системах Microsoft Windows.
  • Wine — уровень совместимости между Linux и программами, написанными для Microsoft Windows.
  • libhybris — уровень совместимости между Linux и программами, написанными для Android.
  1. ^ Jump up to: а б «Интерфейс группы управления» . сайт freedesktop.org .
  2. ^ «либевдев» . сайт freedesktop.org .
  3. ^ Алессандро Рубини (2 ноября 2006 г.). «Системные вызовы ядра» . Linux.it . Проверено 11 ноября 2014 г.
  4. ^ Линус Торвальдс (23 декабря 2012 г.). «Re: [Регрессия с патчем] При фиксации носителя происходит сбой в пользовательском пространстве (было: Re: Linux 3.8-rc1)» . Список рассылки ядра Linux . Проверено 26 августа 2014 г. Если изменение приводит к поломке пользовательских программ, это ошибка в ядре. Мы НИКОГДА не обвиняем пользовательские программы.
  5. ^ «Выбор между портативностью и инновациями» . LWN.net . 02 марта 2011 г.
  6. ^ «Интервью: Леннарт Пёттеринг — Леннарт Пёттеринг выступит с докладом о «Systemd: за пределами инициализации» на FOSDEM 2011» . fosdem.org. 2011 . Проверено 16 июня 2014 г. На самом деле, с моей точки зрения, API Linux взял на себя роль API POSIX , а Linux является центром всей разработки свободного программного обеспечения. В связи с этим я могу только порекомендовать разработчикам попытаться взломать, имея в виду только Linux, и ощутить свободу и возможности, которые это вам предлагает. Итак, приобретите себе копию « Интерфейса программирования Linux» , игнорируйте все, что там говорится о совместимости с POSIX , и взломайте свое замечательное программное обеспечение для Linux. Это очень облегчает!
  7. ^ Майкл Керриск (31 января 2016 г.). «Как разработать API ядра Linux» . Проверено 4 февраля 2016 г.
  8. ^ «Организация системных вызовов» .
  9. ^ «Составить универсальный список системных вызовов?» . ЛКМЛ . 27 февраля 2014 г.
  10. ^ «Флаги как шаблон проектирования API системных вызовов» . LWN.net . 12 февраля 2014 г.
  11. ^ «О vsyscalls и vDSO» . LWN.net . 08.06.2011.
  12. ^ «[PATCH, RFC] случайный: ввести системный вызов getrandom(2)» . ЛКМЛ . 17 июля 2014 г.
  13. ^ "memfd.c" . Гитхаб . Архивировано из оригинала 22 апреля 2014 г.
  14. ^ «В NetBSD 7.0 наконец-то появятся драйверы DRM/KMS» . Фороникс . 19 марта 2014 г.
  15. ^ «Интерфейс драйвера ядра Linux» .
  16. ^ «Анализ изменений ABI в ядре Linux» . Лаборатория ABI Андрея Пономаренко. 15 марта 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e21f2a73f71334836c6c907f54005adb__1713530520
URL1:https://arc.ask3.ru/arc/aa/e2/db/e21f2a73f71334836c6c907f54005adb.html
Заголовок, (Title) документа по адресу, URL1:
Linux kernel interfaces - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)