POSIX и ОС РВ: попытка систематизации
Сергей Золотарев, Николай Горбунов
Целью данной статьи является попытка внести определенную ясность в историю развития стандарта POSIX применительно к операционным системам реального времени (ОС РВ).
В качестве введения: зачем нужна стандартизация программного интерфейса?
Одним из важнейших свойств стандарта POSIX является то, что он определяет "стандартизованный программный интерфейс", которого должны придерживаться разработчики сложных программно-аппаратных систем. Создатели этих систем вынуждены сталкиваться с такими требованиями, как сжатые сроки выхода на рынок (из-за жесткой конкуренции), минимизация затрат и ускорение возврата инвестиций. При этом львиная доля расходов, обусловленных замедлением процесса разработки, связана с тем, что программистам приходится "изобретать велосипед", снова и снова реализовывая функциональность, которая уже давно имеется. А ведь этого можно было бы избежать за счет:
- повторного использования кода из прошлых и параллельных проектов;
- переноса кода из других ОС;
- привлечения разработчиков из других проектов (в том числе с использованием других ОС).
Все это возможно благодаря применению ОС со стандартизованным API. Причем если в первом случае организации достаточно иметь некий внутренний стандарт (что особенно характерно для фирменных ОС), то вторые два случая как раз требуют наличия общепризнанных стандартов – например, POSIX.
Таким образом, используя в качестве платформы для своих проектов POSIX-совместимую ОС, разработчик получает возможность перенести готовый код на уровне исходного текста как из своих прошлых или параллельных проектов, так и из проектов третьих фирм. Это не только существенно сокращает сроки разработки ПО, но и повышает его качество, поскольку проверенный код всегда содержит меньше ошибок.
Кто есть кто в деле развития POSIX
И начнем мы не с самого стандарта POSIX, а с упорядочения роли организаций, участвующих в работе над ним.
Первый участник – это IEEE (Institute of Electrical and Electronics Engineers, Институт инженеров по электрике и электронике), общественная некоммерческая ассоциация профессионалов. IEEE ведет свою историю с 1884 г. (формально – с 1963-го), объединяет 380 000 индивидуальных членов из 150 стран, издает третью часть технической литературы, касающейся применения компьютеров, управления, электро- и информационных технологий, а также более 100 журналов, популярных в среде профессионалов; кроме того, ассоциация проводит в год свыше 300 крупных конференций. IEEE принимала участие в разработке более 900 действующих стандартов (www.ieee.ru/ieee.htm). Сегодня этот институт занимается подготовкой, согласованием, утверждением, публикацией стандартов, но по своему формальному статусу не имеет полномочий принимать такие документы, как международные или национальные стандарты. Поэтому термин "стандарт" в понимании IEEE скорее следует понимать как "спецификация", что более отвечает статусу принимаемых ассоциацией документов. В соответствии с [1] IEEE участвует в программах ряда международных и региональных организаций – IEC, ISO, ITU (International Telecommunication Union), ETSI (European Telecommunications Standards Institute), CENELEC (European Committee for Electrotechnical Standartization) и в национальных программах, например в программе такой организации, как ANSI.
В состав IEEE входит PASC (Portable Application Standards Committee) – комитет ассоциации, который занимается разработкой семейства стандартов POSIX (www.pasc.org/). Ранее PASC был известен как Технический комитет по операционным системам.
Второй участник работ – ANSI (American National Standards Institute, Американский национальный институт стандартов) – частная некоммерческая организация, которая администрирует и координирует в США деятельность по вопросам стандартизации. В ней работает всего 75 человек, но членами ANSI являются более 1000 компаний, организаций, правительственных агентств и институтов (www.ansi.org). ANSI представляет США в двух основных международных организациях по стандартизации – ISO и IEC.
Третий участник – ISO (International Organization for Standardization, Международная организация по стандартизации). Она создана в 1946 г. по решению Комитета по координации стандартов и Генеральной ассамблеи ООН и официально начала работу 23 февраля 1947 г. (www.iso.org). ISO – это сеть национальных институтов по стандартизации из 146 стран (одна страна – один член ISO) с центральным секретариатом в Женеве (Швейцария). Стандарты ISO разрабатываются в технических комитетах, первым результатом деятельности которых является документ Draft International Standard (DIS), превращающийся после нескольких согласований в Final Draft International Standard (FDIS). После этого вопрос об одобрении данного документа выносится на голосование; при положительном результате он становится международным стандартом.
И наконец, – IEC (International Electrotechnical Commission, Международная электротехническая комиссия – МЭК), основанная в 1906 г. IEC готовит и публикует международные стандарты для всех электрических, электронных и связанных с ними технологий (www.iec.ch/). На 1 ноября 2004 г. действительными членами этой комиссии являлись национальные комитеты 64 стран. IEC издает также и рекомендации, которые выходят на английском и французском языках и носят статус международных стандартов. На их основе разрабатываются региональные и национальные стандарты. За подготовку стандартов в различных областях деятельности IEC отвечают технические комитеты (ТК), в работе которых принимают участие и национальные комитеты, заинтересованные в деятельности того или иного ТК.
IEC – ключевая организация в подготовке международных стандартов по информационным технологиям. В этой области действует объединенный технический комитет по информационным технологиям – JTC 1, сформированный в 1987 г. в соответствии с соглашением между IEC и ISO. JTC1 имеет 17 подкомитетов, курирующих все разработки – от программного обеспечения до языков программирования, компьютерной графики и редактирования изображений, взаимосвязи оборудования и методов безопасности.
Подготовка новых стандартов IEC включает несколько стадий (предварительная, стадия предложения, подготовительная, стадия технического комитета, стадия запроса, одобрения, публикации). Если запланировано, что документ IEC станет только технической спецификацией, а не международным стандартом, пересмотренная версия документа посылается в центральный офис для издания. На выработку заключительного проекта международного стандарта (FDIS) отводится четыре месяца. Если его одобрят все члены технического комитета, он направляется в центральный офис для публикации без стадии одобрения FDIS. После этого FDIS попадает в национальные комитеты, которые должны утвердить его в течение двух месяцев. FDIS считается одобренным, если за него проголосовало более двух третей национальных комитетов, а количество отрицательных голосов не превышает 25%. Если документ не одобрен, он отправляется для пересмотра в технические комитеты и подкомитеты. Стандарт должен быть опубликован не позднее чем через два месяца после одобрения FDIS.
К выработке и принятию стандартов POSIX имеют отношение еще несколько организаций.
Open Group – международная организация по стандартизации программного обеспечения, которая объединяет почти 200 производителей и пользовательских сообществ, работающих в области информационных технологий (www.opengroup.org/). Open Group создана в 1995 г. путем слияния двух своих предшественников: X/Open и Open Software Foundation (OSF). Open Group специализируется на разработке методологий сертификации программного обеспечения и проведении тестирования на соответствие определенным требованиям. В частности, Open Group занимается сертификацией для таких направлений, как COE Platform, CORBA, LDAP, Linux Standard Base, Schools Interoperability Framework (SIF), S/MIME Gateway, Single UNIX Specification, Wireless Application Protocol Specifications (WAP) и, наконец, семейство стандартов POSIX (www.opengroup.org/certification/).
Austin Common Standards Revision Group (CSRG) – объединенная техническая рабочая группа, образованная в 2002 г. ISO, IEC и Open Group для создания и сопровождения последних версий стандарта 1003.1, который будет формироваться на основе ISO/IEC 9945-1-1996, ISO/IEC 9945-2-1993, IEEE Std 1003.1-1996, IEEE Std 1003.2-1992 и Single UNIX Specification (www.opengroup.org/press/14nov02.htm).
National Institute of Standards and Technology (NIST) – федеральное агентство в составе Commerce Department’s Technology Administration (www.nist.gov/public_affairs/general2.htm), основанное в США в 1901 г. Задача NIST – разработка и пропаганда стандартов и технологий с целью повышения качества продукции. В состав NIST входит лаборатория по информационным технологиям (Information Technology Laboratory – ITL), одним из результатов деятельности который являются федеральные стандарты по обработке информации (Federal Information Processing Standards – FIPS, www.opengroup.org/testing/fips/general_info.html). NIST/ITL предложила в 1991 г. первоначальный набор тестов для сертификации по POSIX в рамках FIPS PUB 151-1 1990.
Что такое POSIX?
Формально термин POSIX предложен Ричардом Столлманом (Richard Stallman) как аббревиатура для Portable Operating System interface for unIX (переносимый интерфейс операционных систем для Unix). POSIX разрабатывался для UNIX-подобных операционных систем (их первые версии ведут свой отсчет с начала 1970-х) с целью обеспечения переносимости приложений на уровне исходных текстов.
Первоначальное описание интерфейса было опубликовано в 1986 г., тогда он назывался IEEE-IX (IEEE's version of UNIX). Однако название быстро изменилось, превратившись в POSIX, и уже в следующей публикации (еще в 1986 г.) использовался этот новый вариант. Некоторое время под POSIX понималась ссылка (или синоним) на группу родственных документов IEEE 1003.1-1988 и части ISO/IEC 9945, а в качестве законченного и утвержденного международного стандарта ISO/IEC 9945.1:1990 POSIX был принят в 1990 г. Спецификации POSIX определяют стандартный механизм взаимодействия прикладной программы и ОС и в настоящее время включают более 30 стандартов [2] под эгидой IEEE, ISO, IEC и ANSI.
На протяжении своей истории POSIX прошел большой путь, при этом многократно изменялись обозначения спецификаций, их конкретное содержание, процедуры и логистика их проверки. За прошедшее время было выпущено несколько редакций стандарта POSIX в рамках различных международных организаций.
История развития стандарта POSIX
Первая версия спецификации IEEE Std 1003.1 была опубликована в 1988 г. В последующем многочисленные редакции IEEE Std 1003.1 были приняты как международные стандарты [3].
Этапы развития POSIX:
Редакция, выпущенная в 1988 г., была переработана и стала основой для дальнейших редакций и дополнений. Она была одобрена как международный стандарт ISO/IEC 9945-1:1990.
Выходит редакция 1003.1b-1993.
Опубликована редакция 1003.1c-1995 (входит как часть в стандарт ANSI/IEEE POSIX 1003.1-1995).
Внесены изменения IEEE Std 1003.1b-1993, IEEE Std 1003.1c-1995 и 1003.1i-1995, однако основная часть документа осталась неизменной. В 1996 г. редакция IEEE Std 1003.1 также была одобрена как международный стандарт ISO/IEC 9945-1:1996.
Появился первый стандарт для "реального времени" – IEEE Std 1003.13-1998. Это расширение стандарта POSIX для встраиваемых приложений реального времени.
Принято решение внести в основной текст стандарта первые за последние 10 лет существенные изменения, включая объединение со стандартом 1003.2 (Shell и утилиты), так как к тому моменты это были отдельные стандарты. PASC решил закончить изменения базового текста после завершения работы над стандартами IEEE 1003.1a, 1003.1d, 1003.1g, 1003.1j, 1003.1q и 1003.2b.
Опубликована новая редакция IEEE Std 1003.1. Также было принято решение о приведении остальных проектов в соответствие с новым документом.
31 марта опубликована новая редакция стандарта 1003.1.
Последняя на сегодняшний день редакция стандарта 1003.1 была опубликована 30 апреля и выпущена под эгидой Austin Common Standards Revision Group. В нее внесены изменения, касающиеся редакции стандарта 2001 г. Формально редакция 2004 г. известна как IEEE Std 1003.1, 2004 Edition, The Open Group Technical Standard Base Specifications, Issue 6 и включает IEEE Std 1003.1-2001, IEEE Std 1003.1-2001/Cor 1-2002 и IEEE Std 1003.1-2001/Cor 2-2004.
Наиболее важные стандарты POSIX для ОС РВ
Для операционных систем реального времени наиболее важны семь спецификаций стандарта (1003.1a, 1003.1b, 1003.1c, 1003.1d, 1003.1j, 1003.21 [Distributed Real-time), 1003.2h [High Availability]), но широкую поддержку в коммерческих ОС получили только три:
- 1003.1a (OS Definition) определяет основные интерфейсы ОС, управление заданиями, сигналы, функции файловой системы и работы с устройствами, группы пользователей, конвейеры, FIFO-буферы;
- 1003.1b (Realtime Extensions) описывает расширения реального времени, такие, как сигналы реального времени, диспетчеризация по приоритетам, таймеры, синхронный и асинхронный ввод-вывод, семафоры, разделяемая память, сообщения. Первоначально (до 1993 г.) этот стандарт обозначался как POSIX.4.
- 1003.1c (Threads) определяет функции поддержки потоков (нитей) – управление потоками, атрибуты потоков, мьютексы, диспетчеризация. Первоначально обозначался как POSIX.4a. [4]
Кроме указанных стандартов важными для ОС РВ являются следующие стандарты, которые были реализованы в рамках работы над проектом Std 1003.1-2001:
- IEEE 1003.1d-1999. Дополнительные расширения реального времени. Первоначально обозначался как POSIX.4b;
- IEEE 1003.1j-2000. Улучшенные (advanced) расширения реального времени;
- IEEE 1003.1q-2000. Трассировка.
Процедура сертификации
Чтобы соответствовать стандарту POSIX, операционная система должна быть сертифицирована по результатам соответствующего комплекта тестов. С момента появления POSIX набор тестов претерпел формальные и фактические изменения.
В 1991 г. NIST разработал программу тестирования по POSIX в рамках FIPS 151-1 (http://standards.ieee.org/regauth/posix/POSIX-A.FM5.pdf). [5] Этот вариант тестирования базировался на IEEE 1003.3 "Standard for Test Methods for Measuring Conformance to POSIX" Draft 10, May 3, 1989. В 1993 г. NIST закончил программу тестирования (POSIX Testing Program) для FIPS 151-1 и начал программу для FIPS 151-2 (www.itl.nist.gov/fipspubs/fip151-2.htm). FIPS 151-2 адаптировал "Information Technology – Portable Operating System Interface (POSIX) – Part 1: System Application Program Interface (API) [C Language]," являющуюся стандартом ISO/IEC 9945-1:1990. Наборы тестов для FIPS 151-2 основывались на IEEE 2003.1-1992 "Standard for Test Methods for Measuring Conformance to POSIX".
NIST различает две методологии сертификации: самосертификация (self-certification) и сертификация аккредитованными в IEEE тестовыми лабораториями (Accredited POSIX Testing Laboratories – APTL). В первом случае компания проводит тестирование самостоятельно, но по плану, утвержденному в NIST. Во втором случае тестирование выполняется независимой лабораторией с помощью автоматизированных наборов тестов. Всего было аккредитовано две APTL-лаборатории: Mindcraft (www.mindcraft.com) и Perennial (www.peren.com).
В 1997 г. NIST/ITL объявила о намерении прекратить сертификацию по FIPS 151-2 в конце текущего года (официально – 31 декабря 1997 г.), в то же время Open Group сообщила о том, что собирается взять на себя с 1 октября того же года сервис по сертификации в соответствии с FIPS 151-2, основанный на программе NIST/ITL. Те же функции с 1 января 1998-го взяла на себя Ассоциация по стандартизации IEEE (IEEE-SA), и также на основе FIPS 151-2.
В 2003 г. IEEE-SA и Open Group объявили о начале новой совместной программы по сертификации последних версий POSIX, начиная с IEEE 1003.1™ 2001. Сейчас Open Group имеет несколько наборов тестов, которые покрывают IEEE Std 1003.1-1996, IEEE Std 1003.2-1992, IEEE Std 1003.1-2003 и IEEE Std 1003.13-1998 (www.opengroup.org/testing/testsuites/posix.html). Продукт считается сертифицированным по POSIX, если он прошел полную процедуру сертификации, по результатам тестирования удовлетворяет всем предъявленным требованиям и занесен в официальный реестр сертифицированных продуктов [6].
Наборы тестов включают:
- VSX-PCTS1990 (www.opengroup.org/testing/testsuites/vsxpcts1990.htm) – набор conformance-тестов для системных интерфейсов IEEE Std 1003.1-1990;
- VSPSE54 (www.opengroup.org/testing/testsuites/VSPSE54.htm) – набор conformance-тестов для IEEE Std 1003.13-1998 Profile PSE54 (многоцелевое реальное время);
- VSX-PCTS2003 (www.opengroup.org/testing/testsuites/vsxpcts2003.htm) – набор conformance-тестов для системных интерфейсов IEEE Std 1003.1-2003 (только обязательные части);
- VSC-PCTS2003 (www.opengroup.org/testing/testsuites/vscpcts2003.htm) – набор conformance-тестов для IEEE Std 1003.1-2003 (shell and utilities – только обязательные части).
Кроме того, Open Group разработала тесты для стандартов POSIX Realtime и профиля стандартов Embedded POSIX. Набор тестов для POSIX Realtime (www.opengroup.org/testing/testsuites/realtime.html) включает следующие тесты:
- IEEE POSIX 1003.1b-1993/1003.1i-1995 Realtime extension and IEEE POSIX 1003.1,2003 Edition;
- IEEE Std POSIX 1003.1c-1995 Threads (pthreads) extension and IEEE POSIX 1003.1,2003 Edition;
- IEEE POSIX 1003.1d-1999 Additional Realtime Extension and IEEE POSIX 1003.1,2003 Edition;
- IEEE POSIX 1003.1j-2000 Advanced Realtime Extension and IEEE POSIX 1003.1,2003 Edition;
- IEEE POSIX 1003.1q-2000 Trace and IEEE POSIX 1003.1,2003 Edition and IEEE POSIX 1003.1,2003 Edition;
- IEEE POSIX 1003.13-1998 Profile 52.
Набор тестов профиля стандартов Embedded POSIX (www.opengroup.org/testing/testsuites/embedded.html) включает следующие тесты:
- IEEE POSIX 1003.1-1990 (5310 тестов);
- IEEE POSIX 1003.1b-1993/1003.1i-1995 Realtime extension (1430 тестов);
- IEEE Std POSIX 1003.1c-1995 Threads (pthreads) extension (1232 теста);
- IEEE POSIX 1003.13-1998 Profile 52.
Немного о путанице в терминологии
Применительно к группе стандартов POSIX в английском языке часто используются не один, а целых три термина. К сожалению, они сходны по значению и часто переводятся одинаково, что вносит определенную путаницу. Термины эти таковы:
- сompatibility (буквально – "совместимость");
- сompliance (буквально – "соответствие");
- сonformance (буквально – "согласованность").
Первый термин применительно к POSIX формально не определен. Второй означает, что организация – производитель программного продукта самостоятельно заявляет о том, что продукт этот (полностью или частично) соответствует перечисленным стандартам NIST-PCTS. Третий термин подразумевает, что программный продукт прошел установленную систему тестов либо с помощью аккредитованной лаборатории, либо в рамках Open Group и на это имеется документальное подтверждение (так называемое Conformance Statement). Далее в тексте статьи везде будут приводиться оригиналы терминов, чтобы исключить неоднозначность.
Сертифицированные ОС РВ
Если придерживаться строгих правил, требующих, чтобы данные о сертифицированной ОС РВ были опубликованы в официальном реестре и тестирование проводились по уровню conformance, то в настоящее время есть всего две сертифицированные ОС РВ (данные приведены в хронологическом порядке):
LynxOS v.3 (продукт фирмы Lynx Real-Time Systems, которая сейчас называется LynuxWorks, Inc., www.lynuxworks.com) предназначена для разработки ПО встроенных систем, функционирующих в режиме жесткого реального времени, производителями комплектного и телекоммуникационного оборудования, в частности изготовителями бортовых систем военного применения. Разработка может осуществляться как на самой целевой системе (self-hosted), так и на инструментальном компьютере (host), готовое ПО предназначено для работы на целевой системе (target). LynxOS v.3 сертифицирована на согласованность (conformance) стандарту POSIX на платформе Intel и PowerPC. Информацию об этом можно найти на сайте IEEE http://standards.ieee.org/regauth/posix/posix2.html. LynxOS сертифицирована по POSIX 1003.1-1996 компанией Mindcraft, являющейся IEEE POSIX Accredited POSIX Testing Laboratory по набору тестов NIST FIPS 151-2 Conformance Test Suite. Номер документа, подтверждающего сертификацию: Reference File: IP-2LYX002, Reference File: IP-2LYX001.
INTEGRITY v.5 (продукт фирмы Green Hills Software, www.ghs.com) сертифицирована на согласованность (conformance) по POSIX 1003.1-2003, System Interfaces для архитектуры PowerPC в июле 2004 г. (http://get.posixcertified.ieee.org/select_product.tpl). Набор тестов VSX-PCTS 2003.
POSIX и операционная система QNX
QNX v.4.20 (разработчик – фирма QNX Software Systems, www.qnx.com) сертифицирована на соответствие (compliance) по POSIX 1003.1-1988 для платформы Intel компанией DataFocus Incorporated. Тестирование проводилось 13 сентября 1993 г., дата выдачи документа – 1 ноября 1993 г. Набор тестов NIST PCTS 151-1, версия 1.1.
QNX Neutrino (версия 6.3) соответствует (complies to) следующим стандартам семейства POSIX (www.qnx.com/download/download/8660/portability.pdf):
- POSIX.1 (IEEE 1003.1);
- POSIX.1a (IEEE 1003.1a);
- POSIX.2 (IEEE 1003.2);
- POSIX.4 (IEEE 1003.1b);
- POSIX.4a (IEEE 1003.1c);
- POSIX.1b (IEEE 1003.1d), IEEE 1003.1j;
- POSIX.12 (IEEE 1003.1g).
Компания QNX Software Systems, создатель QNX Neutrino, планирует также сертификацию (conformance) QNX Neutrino по некоторым из этих стандартов; работы запланированы на 2005 г. (www.qnx.com/news/pr_959_1.html).
Литература
- IEEE Standards Association Operation Manual. IEEE, October 2004.
- Kevin M. Obeland. POSIX in Real-Time, Embedded Systems Programming, 2001.
- IEEE/ANSI Standard 1003.1: Information Technology – (POSIX) – Part1: System Application: Program Interface (API).
- Gallmeister, B. O. Programming for the Real World, POSIX.4 Sebastopol, CA: O’Reilly & Associates, 1995.
- National Institute of Standards and Technology, PCTS:151-2, POSIX Test Suite.
- POSIX: Certified by IEEE and The Open Group. Certified Policy. The Open Group, October 21, 2003, Revision 1.1.
Об авторах: Сергей Золотарев – сотрудник отдела программных продуктов компании RTSoft, Николай Горбунов – директор по развитию фирмы SWD Software.
Статья опубликована в PC Week/RE №10 от 29.03.2005 г., стр. 39.