В заключении рассмотрим вопрос о стандартизации операционной системы 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> | * |
* |
* |
* |
управление процессами |
Здесь: