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