Unix2018/Введение в UNIX
Содержание
Понятие и функции ОС
Вспоминаем курсы «Архитектура компьютеров» и «Операционные системы».
Операцио́нная систе́ма, сокр. ОС (operating system, OS) — комплекс взаимосвязанных программ, предназначенных для управления ресурсами компьютера и организации взаимодействия с пользователем.
Современные универсальные операционные системы можно охарактеризовать, прежде всего, как:
- использующие файловые системы (с универсальным механизмом доступа к данным),
- многопользовательские (с разделением полномочий),
- многозадачные (с разделением времени).
Многозадачность и распределение полномочий требуют определённой иерархии привилегий компонентов в самой операционной системе. В составе операционной системы различают три группы компонентов:
- ядро операционной системы, содержащее планировщик; драйверы устройств, непосредственно управляющие оборудованием; сетевая подсистема, файловая система;
- системные библиотеки;
- оболочку операционной системы с утилитами.
Большинство программ, как системных (входящих в операционную систему), так и прикладных, исполняются в непривилегированном («пользовательском») режиме работы процессора и получают доступ к оборудованию (и, при необходимости, к другим ресурсам ядра, а также ресурсам иных программ) только посредством системных вызовов. Ядро исполняется в привилегированном режиме: именно в этом смысле говорят, что система (точнее, её ядро) управляет оборудованием.
В определении состава операционной системы значение имеет критерий операциональной целостности (замкнутости): система должна позволять полноценно использовать (включая модификацию) свои компоненты. Поэтому в полный состав операционной системы включают и набор инструментальных средств (от текстовых редакторов до компиляторов, отладчиков и компоновщиков).
Особенности ОС семейства UNIX
Первая система Unix была разработана в подразделении Bell Labs компании AT&T. С тех пор было создано большое количество различных Unix-систем.
Основное отличие Unix-подобных систем от других операционных систем заключается в том, что это изначально многопользовательские многозадачные системы. То есть в один и тот же момент времени сразу множество людей может выполнять множество вычислительных задач (процессов).
Вторая колоссальная заслуга Unix в её мультиплатформенности. Ядро системы написано таким образом, что его легко можно приспособить практически под любой микропроцессор.
Unix имеет и другие характерные особенности:
- использование простых текстовых файлов для настройки и управления системой;
- широкое применение утилит, запускаемых из командной строки;
- взаимодействие с пользователем посредством виртуального устройства — терминала;
- представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия в виде файлов;
- использование конвейеров из нескольких программ, каждая из которых выполняет одну задачу.
История
Первые версии
Первая система Unix была разработана в подразделении Bell Labs (исследовательский центр) компании AT&T (США) в 1969 г. Разработчики: Кен Томпсон (Ken Thompson), Деннис Ритчи (Dennis Ritchie), Дуглас Макилрой (Douglas McIlroy) и др. Писалась на ассемблере для миникомпьютера PDP-7. Компилятора языка высокого уровня не было. За основу брались идеи из ОС Multics (Multi-user Timesharing Interactive Computing System), которую раньше делали в том же Bell Labs.
Системное время все реализации Unix отсчитывают с 1 января 1970 года (Unix time).
Тогда же, примерно в 1969 году, Кен Томпсон при содействии Денниса Ритчи разработал и реализовал интерпретируемый язык Би (B). В 1969—1973 гг. на основе Би был разработан компилируемый язык, получивший название Си (C).
В 1973 году вышла третья редакция UNIX, со встроенным компилятором языка C. Затем появилась четвёртая редакция, с переписанным на C системным ядром (в духе системы Multics), а в 1975 — пятая редакция, полностью переписанная на C. Тем самым код UNIX стал переносимым.
С 1974 года Unix стал распространяться среди университетов и академических учреждений. По законам компании AT&T было нельзя заниматься деятельностью, не связанной с телефонными и телеграфными сетями, поэтому они передавали исходники в университеты по либеральным условиям. Одним из первых исходные коды получил университет Беркли. К 1978 году система была установлена более чем на 600 машинах, прежде всего, в университетах.
Седьмая редакция была последней единой версией Unix (1978 г.). Именно в ней появился близкий к современному интерпретатор командной строки Bourne shell.
Раскол
В начале 1980-х компания AT&T осознала ценность UNIX и начала создание коммерческой версии ОС. Bell Labs отделилась от AT&T. Избавившись от необходимости бесплатного лицензирования системы, Bell Labs начала продажи Unix как проприетарного продукта. Версия UNIX System III поступила в продажу в 1982 году.
В то же время с 1978 года начинает свою историю BSD UNIX, созданный в университете Беркли.
Важной причиной раскола UNIX стала реализация в 1980 году стека протоколов TCP/IP. До этого межмашинное взаимодействие в UNIX пребывало в зачаточном состоянии.
Было предложено два интерфейса программирования сетевых приложений: Berkley sockets (сокет Беркли) и интерфейс транспортного уровня TLI (англ. Transport Layer Interface).
Интерфейс Berkley sockets был разработан в университете Беркли и использовал стек протоколов TCP/IP, разработанный там же. TLI был создан AT&T в соответствии с определением транспортного уровня модели OSI и впервые появился в системе System V версии 3. Хотя эта версия содержала TLI и потоки, первоначально в ней не было реализации TCP/IP или других сетевых протоколов, но подобные реализации предоставлялись сторонними фирмами.
Реализация TCP/IP официально и окончательно была включена в базовую поставку System V версии 4. Это, как и другие соображения (по большей части, рыночные), вызвало окончательное размежевание между двумя ветвями UNIX:
- BSD UNIX (университета Беркли),
- System V (коммерческая версия от AT&T).
Впоследствии, многие компании, лицензировав System V у AT&T, разработали собственные коммерческие разновидности UNIX, такие как AIX, CLIX, HP-UX, IRIX, Solaris.
В середине 1983 года была выпущена версия BSD 4.2, поддерживающая работу в сетях Ethernet и Arpanet. Система стала весьма популярной. Между 1983 и 1990 годом в BSD было добавлено много новых возможностей, таких как отладчик ядра, сетевая файловая система NFS, виртуальная файловая система VFS, и существенно улучшены возможности работы с файловыми сетями.
Тем временем AT&T выпускала новые версии своей системы, названной System V. В 1983 была выпущена версия 1 (SVR1 — System V Release 1), включавшая полноэкранный текстовый редактор vi, библиотеку curses, буферизацию ввода-вывода, кеширование inode. Версия 2 (SVR2), выпущенная в 1984, реализовывала монопольный доступ к файлам (file locking), доступ к страницам по требованию (demand paging), копирование при записи (copy-on-write). Версия 3 вышла в 1987 году и включала, среди прочего, TLI, а также систему поддержки удалённых файловых систем RFS. Версия 4 (SVR4), разработанная в сотрудничестве с фирмой Sun и вышедшая 18 октября 1988, поддерживала многие возможности BSD, в частности TCP/IP, сокеты, новый командный интерпретатор csh. Кроме того, там было много других добавлений, таких как символические ссылки, командный интерпретатор ksh, сетевая файловая система NFS (заимствованная у SunOS) и т. д.
GNU
В 1983 году Ричард Столлман объявил о создании проекта GNU — попытки создания свободной UNIX-подобной операционной системы с нуля, без использования оригинального исходного кода. Столлман работал в это время в лаборатории искусственного интеллекта Массачусетского технологического института (MIT). В той среде, к которой принадлежал Столлман, было принято свободно обмениваться программами и их исходными кодами. Лицензия же на UNIX от AT&T, к примеру, стоила 40 тыс. долларов.
GNU является рекурсивным акронимом, расшифровывающимся как «GNU is Not Unix». Unix всегда была несвободным ПО, то есть она лишает своих пользователей свободы сотрудничества, а также контроля над своими компьютерами. Логотип GNU — голова антилопы гну.
В 1985 году Столлман основал некоммерческую организацию Free Software Foundation. Чуть позже Столлман написал свой знаменитый Манифест GNU, который стал основой для лицензии GPL (GNU General Public License).
Программное обеспечение, распространяемое под лицензией GPL, можно как угодно использовать, копировать, дорабатывать, модифицировать, передавать или продавать модифицированные (или даже немодифицированные) версии другим лицам при условии, что результат такой переработки тоже будет распространяться под лицензией GPL. Последнее условие — самое важное и определяющее в этой лицензии.
К 1990-му году в рамках проекта GNU было создано большинство компонент, необходимых для функционирования свободной операционной системы. Большая часть программного обеспечения, разработанного в рамках данного проекта, — такого как GNU toolchain, Glibc (стандартная библиотека языка C) и Coreutils — играет ключевую роль в других свободных операционных системах. Однако работы по созданию замены для ядра UNIX, необходимые для полного выполнения задач GNU, продвигались крайне медленно. В настоящее время GNU Hurd — попытка создать современное ядро на основе микроядерной архитектуры Mach — всё ещё далека от завершения. Разработка ведётся медленно по причине существования Linux — уже готовой свободной замены ядрам Unix-систем.
MINIX
В течение 1990-х годов персональные компьютеры на основе микропроцессора Intel, оснащённые операционными системами от Microsoft, заняли господствующее положение на рынке настольных систем и захватили также существенную долю рынка серверов — традиционной сферы применения Unix-систем. Компьютеры на основе Intel и Intel-совместимых процессоров достигли вычислительной мощности, сравнимой с мощностью рабочих станций с Unix. Но большинство коммерческих Unix-систем не имели версий, способных работать на оборудовании Intel. Производители Unix обычно тесно сотрудничали с производителями конкретных процессоров или даже имели долю собственности в компаниях, производивших эти процессоры, а поэтому были заинтересованы в использовании своих собственных разработок. Примерами могут служить линейки процессоров SGI и MIPS.
MINIX являлась минимальной UNIX-подобной операционной системой для процессоров x86 (Intel 80286), предназначенной для образовательных целей в области компьютерных наук, написанной Эндрю Таненбаумом (профессором Университета Врие, Амстердам, Нидерланды). Первая версия — 1987 г. Таненбаум изначально относился к MINIX только как к учебному пособию.
Как операционная система, Minix не была верхом совершенства. Но у неё было одно очень важное качество — открытые исходные коды. Каждый, кто имел книгу Таненбаума «Операционные системы», мог изучить и проанализировать 12 тыс. строк кода, написанного на языке C и на ассемблере. Студенты компьютерных факультетов вчитывались в коды с целью понять, как работает та самая система, которая управляет их компьютером. И одним из таких студентов был Линус Торвальдс.
Начиная с версии 3, MINIX была переработана для «серьёзного» применения.
Linux
В 1991 году, во время обучения в Хельсинкском университете Торвальдс заинтересовался операционными системами и был разочарован лицензией MINIX, которая ограничивала её использование только образовательными целями (что исключало любое коммерческое использование), вследствие чего начал работать над своей собственной операционной системой, которая в итоге стала Linux.
Самого Торвальдса несколько смущало созвучие названия Linux с его именем, поэтому он пытался назвать свою разработку Freax. Это название можно обнаружить в файле kernl/Makefile версии 0.11, и в исходных кодах других программ. Но Ари Лемке, который предоставил место для выкладывания системы на FTP-сайте, назвал каталог pub/OS/Linux. И это название закрепилось за новой ОС.
Когда Линус Торвальдс опубликовал ядро Linux и привлёк помощников, использование инструментов, разработанных в рамках проекта GNU, было очевидным выбором. Дополненная массой программ, разработанных в рамках проекта GNU, ОС Linux стала пригодна для практического использования. А то, что ядро системы распространялось под лицензией GNU GPL, гарантировало, что исходные коды системы останутся свободными, то есть смогут копироваться, изучаться и модифицироваться без опасения нарваться на какое-либо преследование со стороны разработчика или какой-то коммерческой фирмы. Этот факт привлекал в ряды пользователей и сторонников Linux всё новых последователей, в первую очередь из числа студентов и программистов.
Логотипом Linux является Tux (Такс). Это пухлый пингвин, выглядящий сытым и довольным. Идею использовать пингвина в качестве талисмана Linux выдвинул Линус Торвальдс. Логотип создан в 1996 г.
Операционная система GNU и ядро Linux вместе составляют ОС, известную как GNU/Linux.
Столлман подчёркивал: «Не существует операционной системы, которая называется Linux. Операционная система Linux — это GNU. Linux это всего лишь программа: ядро. Ядро — это часть операционной системы, самая низкоуровневая программа, которая управляет другими программами, выделяя им процессорное время и другие ресурсы.»
Он настаивал, чтобы операционная система GNU с Linux в качестве ядра непременно называлась GNU/Linux, чтобы «люди понимали, что система существует благодаря идеалистической философии. Назовите ее Linux, и вы нарушите философию. Это очень серьезная проблема. Linux — это не система, а всего лишь ее часть… Именно благодаря той идеалистической позиции, на которой основывается проект GNU, у нас есть эта система.»
В настоящий момент (начало февраля 2019) актуальной версией ядра Linux является 4.20.6.
Стандартизация
Для того чтобы обеспечить совместимость System V и BSD, были созданы рабочие группы POSIX (Portable Operating System Interface for UNIX). Существует много стандартов POSIX, однако наиболее известным является стандарт POSIX 1003.1-1988, определяющий программный интерфейс приложений (API, Application Programming Interface).
POSIX — семейство стандартов. Если вы разрабатываете программу, опираясь на эти стандарты, то с большой вероятностью её можно будет портировать под все Unix-подобные ОС. В то же время, каждая ОС может дополнительно предоставлять нестандартные расширения.
C API
Расширяет ANSI C такими вещами, как сеть, управление процессами, потоками, файловый ввод-вывод, регулярные выражения...
write, open, read, ...
Реализация: glibc, которая в большинстве случаев оборачивает системные вызовы.
Утилиты командной строки
cd, ls, echo, ...
Многие утилиты просто вызывают соответствующую C-функцию из API, например mkdir.
Реализация: GNU Coreutils для малых программ, отдельные проекты GNU для больших: sed, grep, awk, ... Некоторые утилиты реализованы как встроенные команды оболочки.
Язык командной оболочки (шелл)
a=b; echo "$a"
Реализация: GNU Bash.
Переменные окружения
HOME, PATH.
Коды выхода программ
ANSI C утверждает, что 0 или EXIT_SUCCESS — успешный выход, EXIT_FAILURE для неудачи, остальные — в зависимости от реализации.
POSIX также определяет:
- 126: command found but not executable.
- 127: command not found.
- 128: terminated by a signal.
Регулярные выражения
Два типа: BRE (Basic) и ERE (Extended). Basic считается устаревшим и оставлен для совместимости.
Например, grep принимает BRE по умолчанию, ERE с опцией -E.
Реализация: заголовок regex.h в glibc.
Структура каталогов
/dev/null, /tmp
Структура каталогов некоторых систем, в частности, GNU/Linux, определена в стандарте Filesystem Hierarchy Standard.
Название
Название Unics (Uniplexed Information and Computing Service), игра слов с Multics (Multiplexed Information and Computer Services), было изначально предложено в 1970 г.: новая ОС была урезанным Multics. Почему написание названия сменилось на Unix, история умалчивает (вероятно, это придумал Керниган).
Название изначально писалось с большой буквы (Unix), но написание UNIX стало популярно после того, как оригинальное название было напечатано капителью (маленькими латинскими буквами — Unix). Считается, что это впервые сделал Деннис Ритчи, когда готовил доклад на симпозиум по операционным системам (он опробовал новую функцию в тогдашней программе вёрстки). Так название Unix стали писать прописными буквами, хоть оно и не является аббревиатурой.
Формы написания *NIX, Un*x или *N?X используются для обозначения всех ОС семейства Unix.
Бренд UNIX сегодня
Настоящим владельцем товарного знака UNIX является The Open Group, консорциум отраслевых стандартов. Только системы, полностью совместимые и сертифицированные по спецификации Single UNIX, квалифицируются как «UNIX» (другие называются «Unix-like»).
Философия Unix
Дуглас Макилрой (Douglas McIlroy), изобретатель каналов UNIX и один из основателей традиции UNIX, обобщил философию следующим образом:
- «Философия UNIX гласит:
- Пишите программы, которые делают что-то одно и делают это хорошо.
- Пишите программы, которые бы работали вместе.
- Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс».
Обычно эти высказывания сводятся к одному «Делайте что-то одно, но делайте это хорошо».
Из этих трёх принципов только третий является специфичным для UNIX, хотя разработчики UNIX чаще других акцентируют внимание на всех трёх принципах.
В 1994 году Майк Ганцарз (Mike Gancarz) объединил свой опыт работы в UNIX с высказываниями из прений, в которых он участвовал со своими приятелями программистами и людьми из других областей деятельности, так или иначе зависящих от UNIX, для создания Философии UNIX, которая сводится к 9 основным принципам:
- Простые решения красивы (Small is Beautiful).
- Пусть каждая программа делает что-то одно, но хорошо.
- Стройте прототип программы как можно раньше.
- Предпочитайте переносимость эффективности.
- Храните данные в простых текстовых файлах.
- Извлекайте пользу из уже существующих программных решений.
- Используйте скриптовые языки для уменьшения трудозатрат и улучшения переносимости.
- Избегайте пользовательских интерфейсов, ограничивающих возможности пользователя по взаимодействию с системой.
- Делайте каждую программу «фильтром».
В целом можно сказать, что Unix-подобные ОС делались программистами для программистов. Интерфейс не всегда понятен и доступен, требует изучения. Предполагается, что человек должен потратить время, чтобы эффективно пользоваться этими инструментами.
Семейства UNIX-систем
Распространённые семейства:
- Linux
- Debian (Ubuntu, Mint, elementaryOS...)
- RedHat (Fedora, CentOS...)
- SUSE (OpenSUSE...)
- Android, Embedded Linux
- BSD (FreeBSD, OpenBSD, NetBSD)
- Darwin (iOS, OS X)
Дистрибутивы Linux
Ядро Linux разрабатывается одной группой разработчиков, набор пользовательских программ — другими (например, проект GNU). А многочисленные группы собирают это всё в единое целое и выпускают в виде различных дистрибутивов Linux.
Дистрибутив Linux — общее определение операционных систем, использующих ядро Linux, готовых для конечной установки на пользовательское оборудование. Кроме ядра и, собственно, операционной системы, дистрибутивы обычно содержат широкий набор приложений, таких как редакторы документов и таблиц, мультимедиа-проигрыватели, системы для работы с базами данных, и т. д. Поставляемая в рамках дистрибутива операционная система состоит из ядра Linux и, как правило, включает в себя набор библиотек и утилит, выпускаемых в рамках проекта GNU, а также графическую подсистему X Window System. В настоящее время существует более шестисот дистрибутивов Linux; более половины из них поддерживаются в актуальном состоянии, что обеспечивается регулярным выпуском обновлений разработчиками дистрибутива.
DistroWatch — информационный и новостной веб-сайт о различных дистрибутивах Linux и других свободных и открытых операционных системах (UNIX-подобных, например OpenSolaris или BSD). Также на нём ведётся рейтинг популярности различных дистрибутивов на основании посещаемости страниц с их описанием.
Список дистрибутивов Linux на Википедии
Ubuntu
Примером популярного дистрибутива является Ubuntu. Он выпускается компанией Canonical. Версии выходят каждые полгода (в номере указан код и месяц выхода). Релизы, помеченные как LTS (англ. Long Term Support; «поддержка в течение длительного периода») поддерживаются дольше, чем большинство релизов Ubuntu.
Версия Ubuntu | Кодовое имя | Версия ядра Linux |
---|---|---|
16.04 LTS | Xenial Xerus | 4.4 |
16.10 | Yakkety Yak | 4.8 |
17.04 | Zesty Zapus | 4.10 |
18.04 LTS | Bionic Beaver | 4.15 |
18.10 | Cosmic Cuttlefish | 4.18 |
Android
ОС основана на ядре Linux и собственной реализации виртуальной машины Java от Google.
В Android используются ядра Linux из LTS-версий с модификациями от Google.
Версия | Кодовое название | Версия ядра |
---|---|---|
6.0 | Marshmallow | 3.18.10 |
7.0 | Nougat | 4.4.1 |
8.0 | Oreo | 4.10 |
9.0 | Pie | 4.4.107, 4.9.84, 4.14.42 |
Некоторые наработки были обратно портированы в основное ядро (например wakelocks для управления питанием). Android не использует библиотеку GNU C (вместо неё Bionic), не использует GUI-подсистему X Window System.
FreeBSD
FreeBSD — свободная операционная система семейства UNIX, потомок AT&T Unix по линии BSD.
FreeBSD разрабатывается как целостная операционная система. Исходный код ядра, драйверов устройств и базовых пользовательских программ содержится в одном дереве системы управления версиями. Это отличает FreeBSD от GNU/Linux.
FreeBSD хорошо зарекомендовала себя как система для построения интранет и интернет-сетей и серверов. Она предоставляет надёжные сетевые службы и эффективное управление памятью.
Помимо своей стабильности, FreeBSD популярна и благодаря своей лицензии, которая существенно отличается от широко известной лицензии GNU GPL. Лицензия BSD позволяет использовать код не только в свободном ПО, но и в проприетарном. В отличие от GNU LGPL, которая требует раскрытия исходных кодов, лицензия BSD является более простой и непритязательной, требуя лишь упоминания заимствования, авторства и отказ от навязывания ответственности (нельзя отсылать пользователей своего продукта к авторам заимствованного кода).
macOS
Основа системы — POSIX-совместимая операционная система Darwin, являющаяся свободным программным обеспечением. Её ядром является XNU, в котором используется микроядро Mach и стандартные службы BSD. Все возможности Unix в macOS доступны через консоль.
Поверх этой основы в Apple разработано много проприетарных компонентов, таких как Cocoa и Carbon, Quartz.
Актуальной версией является 10.14.3 (22 января 2019 года).
Распространённость UNIX-систем
Десктопы
На настоящий момент Linux является заслуженно популярной ОС для серверов, хотя и куда менее популярной на рабочих столах. Тут лидирует ОС от Microsoft.
По данным Net Applications, декабрь 2017 г., исследование доли рынка ОС. Учитываются десктопные ПК, ноутбуки, нетбуки (кроме Android), подключенные к Интернету (анализируется посещаемость сайтов).
- Linux (Ubuntu, ...) — 2.12%
- OS X — 9.02%
- Windows — 88.51%
Смартфоны, планшеты
Согласно Gartner, в 2015 г. осуществлены поставки 1,3 млрд устройств на базе Android и 297 млн под управлением iOS/OS X.
По данным StatCounter, в апреле 2017 г. Android обошёл Windows по общему использованию в Интернете.
По данным на май 2017 г., у Android было более 2 млрд активных пользователей (которые использовали ОС хотя бы раз в месяц).
Серверы
UNIX-системы широко используются в качестве веб-серверов, почтовых серверов, DNS-серверов в Интернете. По разным данным, как минимум 60% публично доступных веб-серверов работают под управлением UNIX-систем.
Google, Facebook, YouTube, Twitter, Yahoo!, Wikipedia, ..., Яндекс используют ОС Linux. Примеры сайтов на Windows: Microsoft.com, Hotmail, Bing, WindowsLive, Dell, StackOverflow.
Данные W3Tech, февраль 2015 г., по 10 млн веб-серверам: UNIX — 67.8%, Windows — 32.3%.
По состоянию на ноябрь 2017 г., все 100% суперкомпьютеров из списка TOP500 работают на Linux.
Игровые консоли
На июнь 2016 г. доля Sony PlayStation составляет 70%, а там поставляется UNIX-подобная ОС. Есть возможность загрузить свой Linux.
Встраиваемые системы
По данным UBM Electronics (март 2012 г.), доля Linux здесь около 30%.
- Маршрутизаторы, точки доступа Wi-Fi, ADSL-модемы, ... (операционные системы OpenWRT, DD-WRT, ...)
- Медиаплееры, Smart TV, ...
- Автомобильная электроника, навигаторы, ...
- Бытовая техника, «умные дома», ...
- Медицинская техника
- Станки с ЧПУ