|
Часть V
Развитие стандартов POSIX
В конце 90-х годов прошлого века началась разработка стандартов POSIX нового поколения, получивших название POSIX 200х. В их разработке объединили свои усилия в рамках деятельности Austin Group (http://www.opengroup.org/austin) организации IEEE, Open Group, JTC1 ISO, а также крупнейшие производители компьютерных систем Hewlett-Packard Company, IBM, Novell, Open Software Foundation, Sun Microsystems и др.
К началу 2000 г. выполнена большая работа по пересмотру и реорганизации основных спецификаций POSIX, результатом которой явилась подготовка в качестве проекта международного стандарта фундаментального документа, получившего название EEE Std. 1003.1-200x. Объем этого документа превышает три с половиной тысячи страниц.
IEEE Std. 1003.1-200x определяет стандарт основного интерфейса операционной системы и окружения, включая интерфейс командного интерпретатора (''shell''), а также программы общих утилит. Цель документа осталась прежней - поддержка переносимости приложений на уровне исходного текста.
IEEE Std. 1003.1-200x описывает внешние характеристики и средства, которые применяются при разработке широкого спектра приложений и систем. При определении функциональности интерфейса, определенного в данном документе, основной акцент делался на функциях и средствах, используемых в коммерческих приложениях.
Документ IEEE Std. 1003.1-200x разработан на основе пересмотра и интеграции следующих спецификаций:
- IEEE Std. 1003.1-1996 (POSIX-1) (включающий IEEE Stds. 1003.1-1990, 1003.1b-1993, 1003.1c-1995, and 1003.1i-1995),
- дополнений стандарта POSIX.1-1990, включая:
- IEEE P1003.1a (Additional System Services - дополнительные системные сервисы) - проект стандарта
- IEEE Std. 1003.1d-1999 (Additional Realtime Extensions - дополнительные расширения реального времени)
- IEEE Std. 1003.1g-2000 (Protocol-Independent Interfaces (PII))
- IEEE Std. 1003.1j-2000 (Advanced Realtime Extensions)
- IEEE Std. 1003.1q-2000 (Tracing)
- IEEE Std. 1003.2-1992 (POSIX-2) (включая IEEE Std. 1003.2a-1992),
- дополнений стандарта ISO POSIX-2: 1993:
- IEEE P1003.2b draft standard (Additional Utilities)
- IEEE Std. 1003.2d-1994 (Batch Environment), дополненные отдельными решениями из технических стандартов организации Open Group - Base Specifications. Open Group Technical Standard, January 2000, Networking Services, Issue 5.2 (XNS5.2) или (Open Group Technical Standard, February 1997, System Interface Definitions, Issue 5 (XBD5); Commands and Utilities, Issue 5 (XCU5), System Interfaces and Headers, Issue 5 (XSH5)).
Важно отметить, что представленные спецификации согласованы со стандартом языка С 99 (ISO/IEC 9899: 1999, Programming Languages - C).
За рамками документа IEEE Std. 1003.1-200x остались такие вопросы, как:
- графические интерфейсы
- интерфейсы с системами баз данных
- ввод/вывод
- бинарная переносимость кода
- системная конфигурация и доступность ресурсов, и некоторые другие специальные вопросы.
Документ IEEE Std. 1003.1-200x включает три обязательные компоненты, каждая из которых представлена отдельным томом:
- Базовые определения (Base Definitions)
- Оболочка и утилиты (Shell and Utilities)
- Системные интерфейсы (System Interfaces).
Том "Базовые определения" содержит: определение общих для всего документа IEEE Std. 1003.1-200x терминов и понятий (более 450); описание соглашения об утилитах и опциях; определения заголовков на языке С, содержащих описания прототипов функций, символьных констант, макросов, общих типов данных. Также в него входит описание наборов символов, понятий и методики построения систем с учетом их интернационализации и локализации, структуры файлов и терминального интерфейса и т.п. Поэтому с ним следует знакомиться до использования других частей документа.
В том "Системные интерфейсы" вошли определения:
- заголовков (headers) с описаниями констант, макросов и структур данных, необходимых программам, использующих системные сервисы;
- системных сервисов прикладного программного интерфейса ОС, выраженных синтаксическими средствами языка С (более 800 функций);
- связанных с функциями вопросов переносимости, обработки ошибок и восстановления после ошибок;
- функций и подпрограмм общесистемных сервисов.
Том "Оболочка и утилиты" содержит определения стандартного интерфейса на уровне исходного кода для сервисов, обеспечиваемых средствами командного языка shell, а также описание общих программ-утилит юниксоподобной ОС.
Еще одной важной информативной компонентой документа IEEE Std. 1003.1-200x, также представленной отдельным томом, является "Обоснование" (Rationale). Этот том содержит описание семантики важнейших методов и механизмов ОС, обоснование выбранных при разработке интерфейсов решений, примеры использования сервисов интерфейса, особенно для таких приложений как организация совмещенных вычислений и управление вычислительным процессом в условиях ограничений реального времени.
Важными свойствами программных интерфейсов, представленных в документе IEEE Std. 1003.1-200x, является модульность их построения и параметризуемость. Эти свойства реализуются посредством аппарата символьных констант, которые используются как для обозначения групп тесно связанных друг с другом функций интерфейса, так и для обозначения опций (или режимов) работы системы.
Инициализация такой константы значением, отличным от -1, означает поддержку системой (окружением приложения) соответствующей группы функций или опции для выполнения некоторой операции.
В частности, данный аппарат применяется для определения критериев конформности реализаций (систем) исходным спецификациям (в документе IEEE Std. 1003.1-200x определено несколько уровней критериев конформности реализаций данному документу).
Одним из таких критериев соответствия реализации спецификациям IEEE Std. 1003.1-200x является так называемая POSIX-конформность (POSIX conformance), которая определяется с помощью рассматриваемого аппарата символьных констант следующим образом:
реализация будет называться конформной в соответствии с критерием POSIX-конформности, в случае выполнения следующих условий:
- Реализация (система) устанавливает значением символьной константы constant_POSIX_BASE число, отличное от -1 (т.е. заявляется POSIX-конформность).
- Конформная POSIX-стандартам система должна поддерживать реализацию функциональных групп, обозначаемых следующими символьными константами (примерно 280 функций):
_POSIX_C_LANG_SUPPORT
_POSIX_DEVICE_IO
_POSIX_DEVICE_SPECIFIC
_POSIX_FD_MGMT
_POSIX_FIFO
_POSIX_FILE_ATTRIBUTES
_POSIX_FILE_SYSTEM
_POSIX_JOB_CONTROL
_POSIX_MULTIPLE_PROCESS
_POSIX_PIPE
_POSIX_SIGNALS
_POSIX_SINGLE_PROCESS
_POSIX_SYSTEM_DATABASE
_POSIX_USER_GROUPS
_POSIX_NETWORKING
- Система может поддерживать одну или более функциональных групп (более точно называемых группами опций профилирования - Profiling Option Groups), обозначаемых следующими символьными константами:
POSIX_C_LANG_SUPPORT_R
_POSIX_FILE_LOCKING
_POSIX_SYSTEM_DATABASE_R
_POSIX_USER_GROUPS_R
- Система может поддерживать одну или более опций, обозначаемых следующими символьными константами:
_POSIX_ADVISORY_INFO
_POSIX_ASYNCHRONOUS_IO
_POSIX_BARRIERS
_POSIX_CLOCK_SELECTION
_POSIX_CPUTIME
_POSIX_FSYNC
_POSIX_IPV6
_POSIX_MAPPED_FILES
_POSIX_MEMLOCK
_POSIX_MEMLOCK_RANGE
_POSIX_MEMORY_PROTECTION
_POSIX_MESSAGE_PASSING
_POSIX_MONOTONIC_CLOCK
_POSIX_PRIORITIZED_IO
_POSIX_PRIORITY_SCHEDULING
_POSIX_RAW_SOCKETS
_POSIX_REALTIME_SIGNALS
_POSIX_SEMAPHORES
_POSIX_SHARED_MEMORY_OBJECTS
_POSIX_SPAWN
_POSIX_SPIN_LOCKS
_POSIX_SPORADIC_SERVER
_POSIX_SYNCHRONIZED_IO
_POSIX_THREAD_ATTR_STACKADDR
_POSIX_THREAD_CPUTIME
_POSIX_THREAD_ATTR_STACKSIZE
_POSIX_THREAD_PRIO_INHERIT
_POSIX_THREAD_PRIO_PROTECT
_POSIX_THREAD_PRIORITY_SCHEDULING
_POSIX_THREAD_PROCESS_SHARED
_POSIX_THREAD_SAFE_FUNCTIONS
_POSIX_THREAD_SPORADIC_SERVER
_POSIX_THREADS
_POSIX_TIMEOUTS
_POSIX_TIMERS
_POSIX_TRACE
_POSIX_TRACE_EVENT_FILTER
_POSIX_TRACE_INHERIT
_POSIX_TRACE_LOG
_POSIX_TYPED_MEMORY_OBJECTS
- Система может поддерживать одну или более опций для утилит и оболочки, обозначаемых следующими символьными константами:
POSIX2_C_DEV
POSIX2_CHAR_TERM
POSIX2_FORT_DEV
POSIX2_FORT_RUN
POSIX2_LOCALEDEF
POSIX2_PBS
POSIX2_PBS_ACCOUNTING
POSIX2_PBS_LOCATE
POSIX2_PBS_MESSAGE
POSIX2_PBS_TRACK
POSIX2_SW_DEV
POSIX2_UPE
Как указывалось выше, символьные константы могут обозначать группы функций интерфейса или опции. Примерами символьных констант, относящихся к первому случаю являются:
_POSIX_C_LANG_SUPPORT
_POSIX_DEVICE_IO
_POSIX_FILE_SYSTEM
_POSIX_SIGNALS
Ниже приводятся соответствующие этим символьным константам группы функций.
_POSIX_C_LANG_SUPPORT: General C Library Support
abs(),acos(),asctime(),asin(),atan(),atan2(),atof(),atoi(),atol(),bsearch(),calloc(),ceil(),
cos(),cosh(),ctime(),exp(),fabs(),floor(),fmod(),free(),frexp(),gmtime(),idexp(),isalnum(),
isalpha(),iscntrl(),isdigit(),isgraph(),islower(),isprint(),ispunct(),isspace(),isupper(),
isxdigit(),localtime(),log(),log10(),longjmp(),malloc(),mktime(),modf(),pow(),qsort(),
rand(),realloc(),setjmp(),sin(),sinh(),sqrt(),srand(),strcat(),strchr(),strcmp(),strcpy(),
strcspn(),strlen(),strncat(),strncmp(),strncpy(),strpbkr(),strrchr(),strspn(),strstr(),
strtok(),tan(),tanh(),tolower(),toupper()
_POSIX_DEVICE_IO: Device Input and Output
close(),clearerr(),getc(),getchar(),gets(),fclose(),fdopen(),feof(),ferror(),fflush(),fgetc(),
fgets(),fileno(),fopen(),fprintf(),fputc(),fputs(),fread(),freopen(),fscanf(),fwrite(),open(),
perror(),printf(),putc(),putchar(),puts(),read(),sprintf(),scanf(),sscanf(),setbuf(),
ungetc(),write()
_POSIX_FILE_SYSTEM: File System
access(),chdir(),closedir(),creat(),fpathconf(),fsta (),getcwd(),link(),mkdir(),opendir(),
pathconf(),readdir(),remove(),rename(),rewinddir(),rmdir(),stat(),tmpfile(),tmpnam(),
unlink(),utime()
_POSIX_SIGNALS: Signal
abort(),alarm(),kill(),pause(),sigaction(),sigaddset(),sigdelset(),sigemptyset(),sigfillset(),
sigismember(),siglongjmp(),sigpending(),sigprocmask(),sigsuspend(),sigsetjmp()
Таким образом, аппарат символьных констант обеспечивает как функциональную модульность POSIX-спецификаций, так и средство для сравнения функциональных свойств реализации с исходными спецификациями.
Кроме этого, аппарат символьных констант успешно применяется и при разработке профилей систем, с чем мы и познакомимся в следующем разделе.
|