UNIX (произносится юникс) — семейство переносимых, многозадачных и многопользовательскихоперационных систем.
Первая система UNIX была разработана в 1969 году в подразделении Bell Labs компании AT&T. С тех пор было создано большое количество различных UNIX-систем. Юридически лишь некоторые из них имеют полное право называться «UNIX»; остальные же, хотя и используют сходные концепции и технологии, объединяются термином «UNIX-подобные» (англ. Unix-like). Для краткости в данной статье под UNIX-системами подразумеваются как истинные UNIX, так и UNIX-подобные ОС.
Некоторые отличительные признаки UNIX-систем включают в себя:
§ использование простых текстовых файлов для настройки и управления системой;
§ широкое применение утилит, запускаемых в командной строке;
§ взаимодействие с пользователем посредством виртуального устройства — терминала;
§ представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия как файлов;
§ использование конвейеров из нескольких программ, каждая из которых выполняет одну задачу.
В настоящее время UNIX-системы используются в основном на серверах, а также как встроенные системы для различного оборудования. На рынке ОС для рабочих станций и домашнего применения лидером является Microsoft Windows, UNIX занимает только второе (Mac OS X), третье (GNU/Linux) и многие последующие места.
UNIX-системы имеют большую историческую важность, поскольку благодаря им распространились некоторые популярные сегодня концепции и подходы в области ОС и программного обеспечения. Также, в ходе разработки Unix-систем был создан язык Си.
Среди примеров известных UNIX-подобных операционных систем: BSD, Solaris, Linux, Android, MeeGo, NeXTSTEP, Mac OS X, Apple iOS.
Некоторые архитектурные особенности ОС UNIX
Особенности UNIX, отличающие данное семейство от других ОС приведены ниже.
§ Файловая система древовидная, чувствительная к регистру символов в именах, очень слабые ограничения на длину имён и пути.
§ Нет поддержки структурированных файлов ядром ОС, на уровне системных вызовов файл есть поток байтов.
§ Командная строка находится в адресном пространстве запускаемого процесса, а не извлекается системным вызовом из процесса интерпретатора команд (как это происходит, например, в RSX-11).
§ Понятие «переменных окружения».
§ Запуск процессов вызовом fork(), то есть возможность клонирования текущего процесса со всем состоянием.
§ Понятия stdin/stdout/stderr.
§ Ввод/вывод только через дескрипторы файлов.
§ Традиционно крайне слабая поддержка асинхронного ввода/вывода, по сравнению с VMS и Windows NT.
§ Интерпретатор команд есть обыкновенное приложение, общающееся с ядром обыкновенными системными вызовами (в RSX-11 и VMS интерпретатор команд выполнялся как специальное приложение, специальным образом размещенное в памяти, пользующееся специальными системными вызовами, поддерживались также системные вызовы, дающие возможность приложению обращаться к своему родительскому интерпретатору команд).
§ Команда командной строки есть не более чем имя файла программы, не требуется специальная регистрация и специальная разработка программ как команд (что являлось обычной практикой в RSX-11, RT-11).
§ Не принят подход с программой, задающей пользователю вопросы о режимах своей работы, вместо этого используются параметры командной строки (в VMS, RSX-11, RT-11программы работали также с командной строкой, но при её отсутствии выдавали запрос на ввод параметров).
§ Пространство имён устройств на диске в каталоге /dev, поддающееся управлению администратором, в отличие от подхода Windows, где это пространство имен размещается в памяти ядра, и администрирование этого пространства (например, задание прав доступа) крайне затруднено из-за отсутствия его постоянного хранения на дисках (строится каждый раз при загрузке).
§ Широкое использование текстовых файлов для хранения настроек, в отличие от двоичной базы данных настроек, как, например, в Windows.
§ Широкое использование утилит обработки текста для выполнения повседневных задач под управлением скриптов.
§ «Раскрутка» ОС после загрузки ядра путём исполнения скриптов стандартным интерпретатором команд.
§ Широкое использование именованных каналов (pipe).
§ Все процессы, кроме init, равны между собой, не бывает «специальных процессов».
§ Адресное пространство делится на глобальное для всех процессов ядро и на локальную для процесса части, нет «групповой» части адресного пространства, как в VMS и Windows NT, как и возможности загрузки туда кода и его исполнения там.
§ Использование двух уровней привилегий процессора вместо четырёх в VMS.
§ Отказ от использования оверлеев в пользу деления программы на несколько программ поменьше, общающихся через именованные каналы или временные файлы.
§ Отсутствие APC и аналогов, то есть произвольных (а не жестко перечисленных в стандартном множестве) сигналов, не доставляемых до явного пожелания процесса их получить (Windows, VMS).
§ Концепция сигнала уникальна для UNIX, и крайне сложна в переносе на другие ОС, такие как Windows