POSIX

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
ISO/IEC 9945
Интерфейс переносимой операционной системы (POSIX).
Комитет (разработчик) ISO/IEC JTC 1 SC 22
Сайт комитета iso.org/iso/iso_technical_committee?commid=45202
Текущая редакция ISO/IEC 9945:2009

POSIX (англ. portable operating system interface for Unix — переносимый интерфейс операционных систем Unix) — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка C и набор приложений и их интерфейсов. Стандарт создан для обеспечения совместимости различных UNIX-подобных операционных систем и переносимости прикладных программ на уровне исходного кода, но может быть использован и для не-Unix систем. Серия стандартов POSIX была разработана комитетом 1003 IEEE. Международная организация по стандартизации (ISO) совместно c Международной электротехнической комиссией (IEC) приняли некоторые версии данного стандарта (POSIX.1 и POSIX.2) под названием ISO/IEC 9945, известной как Single UNIX Specification.[1] Версии стандарта POSIX являются основой соответствующих версий стандарта Single UNIX Specification. Стандарт POSIX определяет интерфейс операционной системы, а соответствие стандарту Single UNIX Specification определяет реализацию интерфейса и позволяет операционным системам использовать торговую марку UNIX.[2]

Название «POSIX» было предложено Ричардом Столлманом[3]. Введение в POSIX.1 гласит: «Ожидается произношение „позикс“ как „позитив“, а не „посикс“. Произношение опубликовано в целях обнародования стандартного способа ссылки на стандартный интерфейс операционной системы». «POSIX» является зарегистрированным товарным знаком IEEE[3].

Задачи[править | править вики-текст]

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

Состав[править | править вики-текст]

Стандарт состоит из четырёх основных разделов.

  • Основные определения (Base definitions) — список основных определений и соглашений, используемых в спецификациях, и список заголовочных файлов языка Си, которые должны быть предоставлены соответствующей стандарту системой.
  • Оболочка и утилиты (Shell and utilities) — описание утилит и командной оболочки sh, стандарты регулярных выражений.
  • Системные интерфейсы (System interfaces) — список системных вызовов языка Си.
  • Обоснование (Rationale) — объяснение принципов, используемых в стандарте.

Версии[править | править вики-текст]

Версии POSIX до 2001 года[править | править вики-текст]

До 2001 года было создано много стандартов POSIX, часть из которых использовались для формирования стандартов Single UNIX Specification. На данный момент эти стандарты являются устаревшими и представляют лишь историческую ценность. Многие операционные системы реализовывали поддержку этих стандартов, а в руководствах к системным вызовам и к программам часто встречаются ссылки на данные стандарты.

POSIX.1. Системное API для языка Си[править | править вики-текст]

Стандарт: IEEE Std 1003.1-1988, затем IEEE Std 1003.1-1990;  ISO/IEC 9945-1:1990.

Стандарт был выпущен в 1988 году, занимал 317 страниц, включал в себя стандарт ANSI C и являлся первым стандартом POSIX. До присвоения названия POSIX Ричардом Столлманом стандарт был известен как IEEE-IX. В 1990 вышло обновление стандарта с небольшими изменениями под названием IEEE Std 1003.1-1990, занимавшее 356 страниц. Заголовок обновлённого стандарта гласил: "Part 1: System Application Program Interface (API) [C Language]". Таким образом, было явно указано, что стандарт представляет из себя системное API для языка Си.[4]

Стандарт описывал следующие темы:

  • создание и управление процессами[4];
  • сигналы;
  • исключения плавающей точки;
  • нарушение сегментации;
  • запрещённые директивы;
  • ошибки шины;
  • таймеры;
  • операции над файлами (каталогами)[4];
  • каналы;
  • библиотека C (стандарт С);
  • интерфейс и контроль ввода-вывода;
  • триггеры процессов;
  • файлы с информацией о пользователях и о группах[4];
  • форматы архивов tar и cpio[4].

POSIX.2. Командная оболочка и утилиты[править | править вики-текст]

Стандарт: IEEE Std 1003.2-1992; ISO/IEC 9945-2:1993[5].

Стандарт вышел в 1992 году в двух томах общим размером около 1300 страниц. Заголовок гласил: "Part 2: Shell And Utilities", что переводится как "Часть 2: Командный интерпретатор и утилиты".[4]

Стандарт описывал следующие разделы:

  • командный интерпретатор (на основе System V Bourne shell)[4];
  • около сотни утилит командной строки (включая basename, awk, vi, yacc и многие другие)[4].

POSIX.1b. Расширения реального времени[править | править вики-текст]

Также известен как POSIX.4.[5]

Стандарт: IEEE Std 1003.1b-1993, IEEE Std 1003.1i-1995 (технические исправления к 1003.1b).

Изначально известный как IEEE P1003.4, стандарт являлся обновлением стандарта IEEE Std 1003.1-1990. Обновление из 590 страниц включало в себя расширения реального времени, разработанные рабочим комитетом P1003.4.[4] В 1995 году стандарт был дополнен техническими исправлениями (IEEE Std 1003.1i-1995).

Стандарт описывал следующие разделы:

  • планировка приоритетов[4];
  • сигналы реального времени;
  • часы и таймеры[4];
  • семафоры[4];
  • передача сообщений[4];
  • управление памятью (системный вызов mmap и разделяемая память)[4];
  • синхронизация файлов и асинхронный ввод-вывод[4];
  • интерфейс блокировки памяти.

POSIX.1c. Потоки[править | править вики-текст]

Стандарт: IEEE Std 1003.1c-1995.

Стандарт описывал следующие разделы:

  • создание, контроль и завершение выполнения потоков;
  • планировщик потоков;
  • синхронизация потоков;
  • обработка сигналов.

POSIX.1-1996[править | править вики-текст]

Стандарты: IEEE Std 1003.1, 1996 Edition (или IEEE 1996); ISO/IEC 9945-1:1996 .

Стандарт занимал 743 страницы, объединял ранее разработанные версии POSIX и включал в себя следующие стандарты[4][6]:

  • IEEE Std 1003.1-1990 (базовый API);
  • IEEE Std 1003.1b-1993 (расширения реального времени);
  • IEEE Std 1003.1c-1995 (потоки);
  • IEEE Std 1003.1i-1995 (технические исправления к стандарту 1003.1b).

Стандарт описывал следующие разделы[4]:

  • Часть 1. Системное API (Язык Си).
  • Часть 2. Командный интерпретатор и утилиты.
  • Часть 2. Системное администрирование (в разработке).

При этом около четверти страниц стандарта занимала историческая справка и пояснения причин, по которым в него были включены те или иные функции.[4]

POSIX.1d. Дополнительные расширения реального времени[править | править вики-текст]

Стандарт: IEEE Std 1003.1c-1999.

Описывал дополнительные расширения реального времени.[5] Например, системный вызов sem_timedwait() появился именно в этом стандарте.[7]

POSIX.1g. Протоколо-независимые интерфейсы[править | править вики-текст]

Первоначальное название: POSIX 1003.12.[7]

Стандарт: IEEE Std 1003.1g.

Стандарт был выпущен в 2000 году и описывал API взаимодействия процессов друг с другом и включал описания двух основных API[8]:

  • Simple Network Interface (SNI);
  • X/Open Transport Interface (XTI) и API сокетов на основе сокетов 4.4BSD;

POSIX.1j. Продвинутые расширения реального времени[править | править вики-текст]

Стандарт: IEEE Std 1003.1j-2000.

Описывает продвинутые расширения реального времени.[5]

Версии POSIX после 2001 года[править | править вики-текст]

В марте 1997 года рабочий комитет Austin Group разработал стандарт Single UNIX Specification version 2, который по своей сути был продолжением развития стандарта POSIX.1-1996.[9][4][10]

В 1999 году было принято решение, согласно которому консорциум The Open Group и Институт инженеров по электротехнике и электронике (IEEE) приняли решение об объединении усилий в совместной разработке стандартов POSIX и Single UNIX Specification. Новый стандарт POSIX должен был заменить существующие на тот момент стандарты POSIX.1 и POSIX.2, став основой для Single UNIX Specification version 3. Также было решено обнародовать будущий стандарт, разработку которого планировалось закончить к 2001 году.[11]

В 2001 году все предыдущие стандарты POSIX были объединены в один общий стандарт, который предполагалось использовать как основу для будущих стандартов Single UNIX Specification.[7]

POSIX.1-2001[править | править вики-текст]

Стандарт: IEEE Std 1003.1-2001;  ISO/IEC 9945:2002.[7]

В 2001 году основные опциональные стандарты POSIX, разработанные ранее, были объединены в единый стандарт POSIX.1-2001. С тех пор принято именовать стандарты POSIX, добавляя к ним в конец год издания.[12] POSIX.1-2001 приравнивается к стандарту Single UNIX Specification version 3.[13]

Стандарт ориентирован на стандарт языка С99 и может включать в себя функции и заголовочные файлы из стандарта C99.[14]

Стандарт включает в себя:

  • основные понятия и определения;
  • системные интерфейсы и заголовочные файлы;
  • описание командного интерпретатора на уровне исходного кода и утилит командной строки.

POSIX.1-2004[править | править вики-текст]

Стандарт: IEEE Std 1003.1-2004.

Стандарт является незначительным обновлением стандарта POSIX.1-2001. Включает в себя два технических исправления[15]. Описание стандарта доступно в интернете[16].

POSIX.1-2008[править | править вики-текст]

Стандарты: IEEE Std 1003.1-2008, затем IEEE Std 1003.1-2008/Cor 1-2013; ISO/IEC 9945:2009.

Стандарт разработан в 2008 и является текущим. В 2013 году к стандарту было разработано технические исправление №1 под названием IEEE Std 1003.1-2008/Cor 1-2013. Общедоступную бесплатную копию стандарта можно найти в интернете[17].

Стандарт описывает:

  • основные понятия и определения стандарта;
  • системные интерфейсы и заголовочные файлы;
  • описание командного интерпретатора на уровне исходного кода и утилит командной строки;
  • пояснения о необходимости стандарта, о причинах включения возможностей (или отказа от включения) в стандарт.

Профили POSIX 1003.13[править | править вики-текст]

Стандарт POSIX 1003.1 подходит не для всех операционных систем. Встраиваемые операционные системы не всегда реализуют поддержку тех или иных функций. Стандарт POSIX 1003.13 описывает подмножество стандарта POSIX 1003.1 для встраиваемых систем, которое разделено на 4 профиля. Профили были разработаны, чтобы обеспечить переносимость программ на уровне исходных кодов для операционных систем с ограниченными возможностями. Они представляют собой подмножество стандарта POSIX 1003.13, то есть описывают только часть возможностей, включенных в оригинальный стандарт (POSIX 1003.1). Таким образом, профили не конфликтуют с оригинальным стандартом.[18]

На 2016 год разработаны следующие профили:

  • POSIX PSE54 (многопользовательская многопроцессная операционная система с поддержкой потоков и файловой системы)
  • POSIX PSE53 (многопроцессная операционная система с поддержкой потоков и файловой системы)
  • POSIX PSE52 (однопроцессная операционная система с поддержкой потоков и файловой системы)
  • POSIX PSE51 (однопроцессная операционная система с поддержкой потоков, без файловой системы)

Сравнительная характеристика профилей[править | править вики-текст]

Поддерживаемые возможности[18] PSE51 PSE52 PSE53 PSE54
1003.1-90. Процессы - - + +
1003.1-90. Конвейеры - - + +
1003.1-90. Файлы и каталоги - + - +
1003.1-90. Пользователи и группы - - - +
1003.1b-93. Защита памяти - - + +
1003.1b-93. Часы и таймеры высокого разрешения + + + +
1003.1b-93. Сигналы реального времени + + + +
1003.1b-93. Семафоры + + + +
1003.1b-93. Разделяемая память + + + +
1003.1b-93. Межпроцессовый обмен данными + + + +
1003.1c-95. Потоки + + + +
1003.1c-95. Потокобезопасные функции + + + +
1003.1c-95. Атрибуты потоков, адрес стека + + + +
1003.1c-95. Атрибуты потоков, размер стека + + + +
1003.1c-95. Разделение процесса между потоками - - + +
1003.1c-95. Приоритеты потоков + + + +
1003.1c-95. Наследование приоритетов потоками + + + +
1003.1c-95. Защита приоритетов потоков + + + +

Поддержка операционными системами[править | править вики-текст]

В зависимости от степени совместимости со стандартами, ОС могут быть полностью или частично совместимы с POSIX. Сертифицированные продукты могут быть найдены на сайте IEEE[19]. Бесплатный доступ к версии стандарта IEEE Std 1003.1-2004 находится на сайте «The open group»[20].

POSIX-сертифицированные[править | править вики-текст]

POSIX-совместимые[править | править вики-текст]

Заявлена полная совместимость с одной из версий стандарта POSIX:

По большей части POSIX-совместимые[править | править вики-текст]

Официально не сертифицированные как POSIX-совместимые, но соответствующие по большей части:

POSIX для Windows[править | править вики-текст]

  • Cygwin — обеспечивает частичное соответствие POSIX для некоторых продуктов Microsoft Windows.
  • Подсистема для UNIX-приложений (SUA) — необязательная подсистема Windows, обеспечивающая готовое окружение для компиляции и исполнения POSIX-совместимых приложений.[50] Соответствие стандарту POSIX.2 на уровне командной строки обеспечивается с помощью командной оболочки ksh.[51]
  • «Microsoft Windows Services for UNIX» — обеспечивает полное соответствие POSIX для некоторых продуктов Microsoft Windows. Операционные системы на базе Windows NT до Windows 2000 имели POSIX-уровень, встроенный в ОС, и «UNIX Services for Windows» предоставляло UNIX-подобное окружение. Для получения POSIX-совместимости в Windows XP нужно скачать и установить бесплатный пакет «Windows Services for UNIX». UNIX-подсистема встроена в Enterprise и Ultimate редакции Windows Vista и не может быть добавлена в другие редакции.
  • UWIN — набор библиотек библиотек и утилит, обеспечивающих POSIX-совместимое окружение поверх Win32 API.[52]
  • UnxUtils — набор портированных под библиотеку Microsoft C Run-time (msvcrt.dll) утилит GNU.[53]

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. ISO/IEC 9945. www.unix.org. Проверено 7 января 2016.
  2. The UNIX System -- The Single UNIX Specification. www.unix.org. Проверено 7 января 2016.
  3. 1 2 POSIX® 1003.1 Frequently Asked Questions (FAQ Version 1.12) (англ.) (2 February 2006). Проверено 5 марта 2008. Архивировано из первоисточника 22 августа 2011.
  4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 W. Richard Stevens, Bill Fenner, Andrew M. Rudoff. UNIX Network Programming. — Addison-Wesley Professional, 2004-01-01. — 1032 с. — ISBN 9780131411555.
  5. 1 2 3 4 standards(7) - Linux manual page. man7.org. Проверено 6 февраля 2016.
  6. POSIX.1 FAQ. www.opengroup.org. Проверено 5 февраля 2016.
  7. 1 2 3 4 Michael Kerrisk. The Linux Programming Interface. — No Starch Press, 2010-01-01. — С. 13, 16—17, 1096. — 1556 с. — ISBN 9781593272203.
  8. AUUG Inc. AUUGN. — AUUG, Inc., 1995-08-01. — 66 с.
  9. Enhanced Single UNIX Press Release. www.unix.org. Проверено 4 января 2016.
  10. The UNIX System Technical Whitepapers. www.unix.org. Проверено 6 февраля 2016.
  11. The Open Group and IEEE to develop joint revision to POSIX and UNIX standards Collaborative Effort to Yield Version 3 of the Single UNIX Specification. opengroup.org (17 июля 1999 года).
  12. Robert Love. Linux System Programming: Talking Directly to the Kernel and C Library. — "O'Reilly Media, Inc.", 2013-05-14. — 457 с. — ISBN 9781449341541.
  13. The Single UNIX Specification Version 3. www.unix.org. Проверено 4 января 2016.
  14. Introduction. pubs.opengroup.org. Проверено 7 февраля 2016.
  15. IEEE Std 1003.1, 2004 Edition. www.unix.org. Проверено 4 января 2016.
  16. The Open Group Base Specifications Issue 6. pubs.opengroup.org. Проверено 4 января 2016.
  17. The Open Group Base Specifications Issue 7, 2013 Edition. pubs.opengroup.org. Проверено 4 января 2016.
  18. 1 2 3 Peter van der Veen. Using POSIX to Maximize Code Portability in Embedded Systems. qnx-russia.ru. QNX Software Systems.
  19. POSIX. Standards. IEEE. Архивировано из первоисточника 22 августа 2011.
  20. The Open Group. Архивировано из первоисточника 3 февраля 2012.
  21. Register of Open Branded Products. www.opengroup.org. Проверено 5 января 2016.
  22. Register of Open Branded Products. www.opengroup.org. Проверено 5 января 2016.
  23. Register of Open Branded Products. www.opengroup.org. Проверено 5 января 2016.
  24. Register of Open Branded Products. www.opengroup.org. Проверено 5 января 2016.
  25. Help - QNX SDP 6.6 Documentation. www.qnx.com. Проверено 7 февраля 2016.
  26. QNX Neutrino RTOS. www.qnx.com. Проверено 7 февраля 2016.
  27. Register of Open Branded Products. www.opengroup.org. Проверено 8 января 2016.
  28. POSIX Certification - Product details. get.posixcertified.ieee.org. Проверено 5 января 2016.
  29. Register of Open Branded Products. www.opengroup.org. Проверено 5 января 2016.
  30. POSIX - Lynx Software Technology (en-US). Lynx Software Technology. Проверено 5 января 2016.
  31. Register of Open Branded Products. www.opengroup.org. Проверено 8 января 2016.
  32. Hewlett-Packard Company Conformance Statement. www.opengroup.org.
  33. QuickSpecs. Tru64 UNIX Operating System V5.1A. Tru64 UNIX.
  34. InfoWorld Media Group Inc. InfoWorld. — InfoWorld Media Group, Inc., 1992-08-10. — 98 с.
  35. FreeBSD POSIX 2001 Utility Compliance. people.freebsd.org. Проверено 8 января 2016.
  36. releases:3.2.0:developersguide:posixandminix [Wiki]. wiki.minix3.org. Проверено 12 января 2016.
  37. I. D. G. Enterprise. Computerworld. — IDG Enterprise, 1994-11-07. — 154 с.
  38. Nicholas A. Solter, Jerry Jelinek, David Miner. OpenSolaris Bible. — John Wiley & Sons, 2011-03-21. — 740 с. — ISBN 9781118080313.
  39. Digital Equipment Corporation Maynard, Massachusetts. OpenVMS Programming Environment Manual. OpenVMS (март 1994).
  40. STANDARDS LEADERSHIP. www.windriver.com. Проверено 18 января 2016.
  41. Martin C. Brown. BeOS: Porting UNIX Applications. — Morgan Kaufmann, 1998-01-01. — 500 с. — ISBN 9781558605329.
  42. NetBSD Standards Conformance. www.netbsd.org. Проверено 21 января 2016.
  43. Nucleus RTOS Kernel. www.mentor.com. Проверено 25 января 2016.
  44. OpenBSD Project Goals. www.openbsd.org. Проверено 24 января 2016.
  45. Michael Ringgaard. Sanos. www.jbox.dk. Проверено 21 января 2016.
  46. Frequently Asked Questions | SkyOS. www.skyos.org. Проверено 21 января 2016.
  47. Syllable Project. Welcome to Syllable. web.syllable.org. Проверено 21 января 2016.
  48. Posix Checklists. DragonFly BSD. dragonflybsd.org (5 января 2014).
  49. On-Line Applications Research Corporation (OAR). RTEMS POSIX API User’s Guide. RTERMS. On-Line Applications Research Corporation (17 July 2015).
  50. Подсистема приложений UNIX. technet.microsoft.com. Проверено 25 января 2016.
  51. Подсистема для приложений UNIX и совместимость с POSIX. technet.microsoft.com. Проверено 25 января 2016.
  52. att/uwin. GitHub. Проверено 26 января 2016.
  53. Native Win32 ports of some GNU utilities. unxutils.sourceforge.net. Проверено 25 января 2016.

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]