Перейти в оглавлению раздела

Часть 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 разработан на основе пересмотра и интеграции следующих спецификаций:

  1. IEEE Std. 1003.1-1996 (POSIX-1) (включающий IEEE Stds. 1003.1-1990, 1003.1b-1993, 1003.1c-1995, and 1003.1i-1995),
  2. дополнений стандарта 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)
  3. IEEE Std. 1003.2-1992 (POSIX-2) (включая IEEE Std. 1003.2a-1992),
  4. дополнений стандарта ISO POSIX-2: 1993:
  5. IEEE P1003.2b draft standard (Additional Utilities)
  6. 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-конформности, в случае выполнения следующих условий:

  1. Реализация (система) устанавливает значением символьной константы constant_POSIX_BASE число, отличное от -1 (т.е. заявляется POSIX-конформность).
  2. Конформная 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

  3. Система может поддерживать одну или более функциональных групп (более точно называемых группами опций профилирования - Profiling Option Groups), обозначаемых следующими символьными константами:
    POSIX_C_LANG_SUPPORT_R
    _POSIX_FILE_LOCKING
    _POSIX_SYSTEM_DATABASE_R
    _POSIX_USER_GROUPS_R

  4. Система может поддерживать одну или более опций, обозначаемых следующими символьными константами:
    _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

  5. Система может поддерживать одну или более опций для утилит и оболочки, обозначаемых следующими символьными константами:
    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-спецификаций, так и средство для сравнения функциональных свойств реализации с исходными спецификациями.

    Кроме этого, аппарат символьных констант успешно применяется и при разработке профилей систем, с чем мы и познакомимся в следующем разделе.

Предыдущая глава Оглавление Следующая глава