1.10. Проблемы переносимости программного обеспечения.

    В заключении рассмотрим вопрос о стандартизации операционной системы UNIX и о проблемах переносимости прикладного программного обеспечения между различными ее диалектами. Для этого вернемся к истории развития системы UNIX.

    В начале 80-х годов фирма AT&T утратила монополию на разработку и развитие ОС. Работы по созданию своей версии системы начались в Калифорнийском университете в городе Беркли. Диалекты UNIX, разработанные там, получили название BSD 4.* (Berkley Software Distribution версии 4.*). Свою версию системы UNIX для IBM PC разработала и фирма Microsoft. Она получила название Microsoft Xenix. Существуют и другие варианты ОС. Каждый из них обладает своими достоинствами, но их общим недостатком стала проблема переносимости программ из одной системы в другую. Чтобы исправить положение, фирмой AT&T, при поддержке разработчиков других версий системы UNIX, была создана версия, включающая в себя особенности всех созданных UNIX-систем. Она получила название UNIX System V Release 4.

    В то же время разработан ряд стандартов для операционных систем типа UNIX. Рассмотрим из них три основных.

    Первый касается языка программирования Си, который является основным инструментом создания программного обеспечения в среде UNIX. Стандартизация коснулась не только синтаксиса языка. Был определен набор основных функций и интерфейсов к ним. Стандарт был разработан в 1988 г. Американским Национальным Институтом Стандартов и получил название ANSI C. ANSI C получил широкое распространение. Почти все Си-компиляторы, разработанные с того времени, в той или иной степени соответствуют ему.

    Следующие два стандарта касаются более детального определения среды программирования системы UNIX. Первый из них разработан международной инженерной ассоциацией IEEE Std 1003.1-1990 Portable Operating System Interface Part 1. В литературе этот стандарт более известен под сокращенным названием POSIX.1. Второй стандарт разработан группой фирм-разработчиков вычислительной техники и программного обеспечения. Он получил название X/Open Portability Guide 3. Сокращенно этот стандарт называется XPG 3. Оба стандарта подробно описывают все структуры и типы данных, константы и библиотеки функций, определяющие среду операционной системы (Operating System Environment), в которой осуществляется процесс программирования.

    Приблизительное соотношение между различными стандартами и реализациями в системе UNIX дает нижеследующая таблица. В ней компоненты системы характеризуются файлами-заголовками, каждый из которых определяет типы, структуры данных и функции для соответствующей компоненты операционной системы.

 

1

2

3

4

5

 
<ctype.h>

*

   

*

*

символьные типы
<dirent.h>  

*

*

*

*

формат директорий
<errno.h>

*

   

*

*

обработка ошибок
<fcntl.h>  

*

*

*

*

управление файлами
<float.h>

*

   

*

*

константы с "плавающей" запятой
<ftw.h>    

*

*

  дерево файловой системы
<grp.h>  

*

*

*

*

формат файла групп
<langinfo.h>    

*

*

  языковые константы
<limits.h>

*

   

*

*

ограничения реализации
<locate.h>

*

   

*

*

локальные категории
<math.h>

*

   

*

*

математические константы
<nl_types.h>    

*

*

  каталог сообщений
<pwd.h>  

*

*

*

*

формат файла паролей
<regex.h>    

*

*

*

регулярные выражения
<search.h>    

*

*

  таблицы поиска
<setjmp.h>

*

   

*

*

нелокальные переходы
<signal.h>

*

   

*

*

сигналы
<stdarg.h>

*

   

*

*

список аргументов
<stddef.h>

*

   

*

*

стандартные типы
<stdio.h>

*

   

*

*

форматный ввод-вывод
<stdlib.h>

*

   

*

*

стандартная библиотека
<string.h>

*

   

*

*

операции со строками
<tar.h>  

*

*

*

  формат архивов tar
<termios.h>  

*

 

*

*

терминальный ввод-вывод
<time.h>

*

   

*

*

время и дата
<ulimit.h>    

*

*

  ограничения пользователя
<unistd.h>  

*

*

*

*

символьные константы
<utime.h>  

*

*

*

*

время для файлов
<sys/ipc.h>    

*

*

*

взаимодействие процессов
<sys/msg.h>    

*

*

  очереди сообщений
<sys/sem.h>    

*

*

  семафоры
<sys/shm.h>    

*

*

*

разделяемая память
<sys/stat.h>  

*

*

*

*

статус файлов
<sys/times.h>  

*

*

*

*

время для процессов
<sys/types.h>  

*

*

*

*

типы данных
<sys/utsname.h>  

*

*

*

  имя системы
<sys/wait.h>  

*

*

*

*

управление процессами

Здесь:

    1. Стандарт ANSI C.
    2. Стандарт POSIX.1.
    3. Стандарт XPG3.
    4. Версия BSD 4.3.
    5. Версия UNIX System V Release 4.