Главная » Ядро Linux » API, POSIX и библиотека С

0

Обычно  прикладные  программы  не  разрабатываются  с  непосредственным  использованием  системных  вызовов,  при  этом  используются  программные  интерфейсы  приложений  (Application  Programing Interface,  API).  Это  является важным,  так как  в таком  случае нет необходимости  в корреляции  между интерфейсами, которые используют  приложения, и интерфейсами, которые  предоставляет  ядро.  Различные API  определяют набор  программных интерфейсов,  которые используются приложениями. Эти  интерфейсы могут  быть  реализованы с помощью одного  системного вызова,  нескольких  системных  вызовов,  а также  вообще  без использования системных вызовов.  В действительности,  может  существовать один  и  тот  же  программный интерфейс приложений для  различных операционных систем, в то  время  как  реализация  этих API может для разных  ОС   существенно  отличаться.

Один  из  наиболее популярных  программных  интерфейсов  приложений  в  мире Unix-подобных  систем  базируется  на  стандарте  POSIX.  Технически  стандарт  POSIX включает в  себя  набор  стандартов IЕЕЕ2, целью  которого является  обеспечение переносимого  стандарта операционной  системы,  приблизительно  базирующегося на ОС  Unix.  ОС  Linux соответствует стандарту POSIX.

Стандарт  POSIX  является  хорошим  примером  соотношения между интерфейсом API  и  системными  вызовами.  Для  большинства  Unix-подобных  операционных систем  вызовы  интерфейса API, определенные в стандарте POSIX,  сильно коррелируют с системными  вызовами.  Конечно,  стандарт  POSIX создавался  для  того,  чтобы сделать те интерфейсы, которые  предоставляли  ранние  версии  ОС  Unix,  похожими между  собой.   С  другой  стороны,  некоторые операционные системы, далекие  от  OS Unix, такие   как  Windows  NT,  предоставляют библиотеки, совместимые со  стандартом  POSIX.

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

1Дли аппаратной платформы  x86 существует  около  250 системных   вызовов   (для  каждой  аппаратной платформы   разрешается  определять  свои  уникальные  системные  вызовы).  Хотя  не для  всех операционных  систем  опубликованы действительные   системные  вызовы,   но  по  оценкам  для  некоторых операционных  систем  таких  вызовов  более  тысячи.

2 IEEE,     eye-trple-E     (Институ т  инженеро в  по  электротехник е  и  радиоэлектронике ,  Institut e  of Electrical  and  Electronics  Engineers)  является  бесприбыльной  профессиональной  ассоциацией,  действующей  во  многих  технических  областях  и  отвечающей  за  многие  важные  стандарты,   такие  как стандарт  POSIX.  Больше  информаци и доступно  по  адресу:    http://wwn.ieee.or g    .

вызо в print f ( )

-> prirtf( )  в библиотеке С     ->   write( ) в библиотеке С         Системный вызов   write( )

Приложение                                            >   Библиотека С                                                         >   Ядро

Рис. 5.1. Взаимоотношения между приложением,   библиотекой  С  и ядром на  примере вызова функции   p r i n t f ( )

Дополнительно библиотека функций  С  также  представляет  большую часть  APIстандарта  POSIX.

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

Общий девиз  для  интерфейсов ОС  Unix  — это  "предоставлять механизм,  а не стратегию". Другими словами,  системные  вызовы  существуют для  того,  чтобы  обеспечить определенную функцию  в наиболее абстрактном смысле. А то, каким образом  используется эта функция, ядра  не  касается.

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии