Unix2019a/Введение в UNIX

Материал из iRunner Wiki

Понятие и функции ОС

Вспоминаем курсы «Архитектура компьютеров» и «Операционные системы».

Операционная система, сокр. ОС (operating system, OS) — комплекс взаимосвязанных программ, предназначенных для управления ресурсами компьютера и организации взаимодействия с пользователем.

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

Современные универсальные операционные системы можно охарактеризовать, прежде всего, как:

  • использующие универсальный механизм доступа к данным (на основе файловой системы),
  • многопользовательские (с разделением полномочий: обеспечивают разграничение прав доступа к ресурсам),
  • многозадачные (с разделением времени: дают возможность имитации «одновременного» исполнения нескольких программ).

В составе операционной системы различают три группы компонентов:

  • ядро операционной системы, содержащее планировщик; драйверы устройств, непосредственно управляющие оборудованием; сетевая подсистема, файловая система;
  • системные библиотеки;
  • оболочку операционной системы с утилитами.

Большинство программ, как системных (входящих в операционную систему), так и прикладных, исполняются в непривилегированном («пользовательском») режиме работы процессора и получают доступ к оборудованию (и, при необходимости, к другим ресурсам ядра, а также ресурсам иных программ) только посредством системных вызовов. Ядро исполняется в привилегированном режиме: именно в этом смысле говорят, что система (точнее, её ядро) управляет оборудованием.

Этот курс посвящён прикладным аспектам использования и настройки операционных систем. Вопросам функционирования ОС и системному программированию будет посвящён следующий курс, который будет изучаться в весеннем семестре.

Оригинальный UNIX и UNIX-подобные системы

Операционная система под названием UNIX была разработана в Bell Labs в конце 1960-х. Она предназначалась для компьютеров PDP-11, используемых в те времена. Последняя версия оригинального UNIX от Bell Labs вышла в конце 1980-х, это была система с закрытым исходным кодом для коммерческого использования. Этот UNIX не заработает на современном «железе», только в эмуляторе.

Затем в 1990-е торговая марка UNIX перешла в организацию по стандартизации The Open Group. На сегодняшний день официально UNIX — это не конкретная операционная система. Называться UNIX'ом юридически имеет право ОС, отвечающая стандарту Single UNIX Specification. Этому стандарту соответствуют такие системы, как macOS от Apple, HP/UX от Hewlett-Packard, Solaris от Sun (теперь уже Oracle), AIX от IBM. До сих пор продаются серверы, работающие под управлением этих закрытых, проприетарных UNIX'ов. Популярные системы, использующие сходные концепции и технологии, такие как FreeBSD, OpenBSD, дистрибутивы Linux и пр., не проходили сертификацию по стандарту (часто из-за высокой цены на сертификацию и высокой скорости изменений в этих системах) и не могут называться «UNIX». Их обычно называют UNIX-подобными (UNIX-like).

В рамках данного курса будем рассматривать понятие UNIX в широком смысле, используя термины «UNIX-система», «система семейства UNIX», «UNIX-подобная система» как синонимы.

Формы написания *NIX, Un*x или *N?X используются для обозначения всех ОС семейства Unix.

Семейство UNIX

UNIX-системы — изначально многопользовательские и многозадачные системы. То есть в один и тот же момент времени сразу множество людей может выполнять множество вычислительных задач (процессов).

Системы UNIX работают на множестве разнообразных платформ.

UNIX имеет и другие характерные особенности:

  • использование простых текстовых файлов для настройки и управления системой;
  • широкое применение утилит, запускаемых из командной строки;
  • взаимодействие с пользователем посредством виртуального устройства — терминала;
  • представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия в виде файлов;
  • использование конвейеров из нескольких программ, каждая из которых выполняет одну задачу.

История

Оригинальный UNIX

Кен Томпсон и Деннис Ритчи — создатели UNIX

В конце 1960-х в подразделении Bell Labs (исследовательский центр) компании AT&T (США) был начат проект новой операционной системы.

Разработчики: Кен Томпсон (Ken Thompson), Деннис Ритчи (Dennis Ritchie), Дуглас Макилрой (Douglas McIlroy) и др. Писалась на ассемблере для миникомпьютера PDP-7 фирмы DEC. Компилятора языка высокого уровня не было.

За основу брались идеи из ОС Multics (Multiplexed Information and Computer Services), которую раньше делали в том же Bell Labs. Новая система была урезанным и однозадачным Multics, поэтому её назвали Unics (Uniplexed Information and Computing Service). Это название было изначально предложено в 1970 г. Почему написание названия сменилось на Unix, история умалчивает (вероятно, это придумал Керниган).

«Миникомпьютер» PDP-7

1970 год считается началом «эпохи Unix». Системное время все реализации Unix отсчитывают с 1 января 1970 года (Unix time).

Тогда же, примерно в 1969 году, Кен Томпсон при содействии Денниса Ритчи разработал и реализовал интерпретируемый язык Би (B). В 1969—1973 гг. на основе Би был разработан компилируемый язык, получивший название Си (C).

Система была адаптирована под более мощный компьютер PDP-11. В 1973 году вышла третья редакция Unix, со встроенным компилятором языка C. Затем появилась четвёртая редакция, с переписанным на C системным ядром (в духе системы Multics), а в 1975 — пятая редакция, полностью переписанная на C. Тем самым код Unix стал переносимым (хотя было ещё много кода, заточенного под PDP-11).

Система Unix была впервые представлена миру на симпозиуме по операционным системам в 1973 г. В докладе название было напечатано капителью (маленькими латинскими буквами — Unix): считается, что Деннис Ритчи, когда готовил доклад, опробовал новую функцию в тогдашней программе вёрстки. Так название Unix стали писать прописными буквами как UNIX, хоть оно и не является аббревиатурой.

С тех пор Unix стал распространяться среди университетов и академических учреждений. По законам компании AT&T было нельзя заниматься деятельностью, не связанной с телефонными и телеграфными сетями, поэтому они передавали исходники в университеты по либеральным условиям. Одним из первых исходные коды получил университет Беркли. К 1978 году система была установлена более чем на 600 машинах, прежде всего, в университетах.

В начале 1980-х компания AT&T осознала ценность UNIX и начала создание коммерческой версии ОС. Bell Labs отделилась от AT&T. Избавившись от необходимости бесплатного лицензирования системы, Bell Labs начала продажи Unix как проприетарного продукта. Версия под названием UNIX System III поступила в продажу в 1982 году.

В то же время с 1978 года начинает свою историю BSD UNIX, развиваемый в университете Беркли. Например, там был создан интерфейс сокетов, который использовал стек протоколов TCP/IP. До этого межмашинное взаимодействие пребывало в зачаточном состоянии.

Впоследствии, многие компании, лицензировав систему у AT&T, разработали собственные коммерческие разновидности UNIX, такие как AIX, CLIX, HP-UX, IRIX, Solaris.

Таким образом, появилось много подобных проприетарных операционных систем. Их эволюцию можно проследить по картинке.

GNU

Ричард Столлман

В 1983 году Ричард Столлман объявил о создании проекта GNU — попытки создания свободной UNIX-подобной операционной системы с нуля, без использования оригинального исходного кода. Столлман работал в это время в лаборатории искусственного интеллекта Массачусетского технологического института (MIT). В той среде, к которой принадлежал Столлман, было принято свободно обмениваться программами и их исходными кодами. Лицензия же на UNIX от AT&T, к примеру, стоила 40 тыс. долларов.

GNU является рекурсивным акронимом, расшифровывающимся как «GNU is Not Unix». Unix всегда была несвободным ПО, то есть она лишает своих пользователей свободы сотрудничества, а также контроля над своими компьютерами. Логотип GNU — голова антилопы гну.

Heckert GNU white.svg.png

В 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 г.

400px-NewTux.svg.png

Операционная система GNU и ядро Linux вместе составляют ОС, известную как GNU/Linux.

Столлман подчёркивал: «Не существует операционной системы, которая называется Linux. Операционная система Linux — это GNU. Linux это всего лишь программа: ядро. Ядро — это часть операционной системы, самая низкоуровневая программа, которая управляет другими программами, выделяя им процессорное время и другие ресурсы.»

Он настаивал, чтобы операционная система GNU с Linux в качестве ядра непременно называлась GNU/Linux, чтобы «люди понимали, что система существует благодаря идеалистической философии. Назовите ее Linux, и вы нарушите философию. Это очень серьезная проблема. Linux — это не система, а всего лишь ее часть… Именно благодаря той идеалистической позиции, на которой основывается проект GNU, у нас есть эта система.»

В настоящий момент (начало ноября 2019) актуальной версией ядра Linux является 5.3.10.

Стандартизация

Для того чтобы обеспечить совместимость 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.

Философия Unix

Дуглас Макилрой (Douglas McIlroy), изобретатель каналов UNIX и один из основателей традиции UNIX, обобщил философию следующим образом:

«Философия UNIX гласит:
Пишите программы, которые делают что-то одно и делают это хорошо.
Пишите программы, которые бы работали вместе.
Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс».

Обычно эти высказывания сводятся к одному «Делайте что-то одно, но делайте это хорошо».

Из этих трёх принципов только третий является специфичным для UNIX, хотя разработчики UNIX чаще других акцентируют внимание на всех трёх принципах.

В 1994 году Майк Ганцарз (Mike Gancarz) объединил свой опыт работы в UNIX с высказываниями из прений, в которых он участвовал со своими приятелями программистами и людьми из других областей деятельности, так или иначе зависящих от UNIX, для создания Философии UNIX, которая сводится к 9 основным принципам:

  1. Простые решения красивы (Small is Beautiful).
  2. Пусть каждая программа делает что-то одно, но хорошо.
  3. Стройте прототип программы как можно раньше.
  4. Предпочитайте переносимость эффективности.
  5. Храните данные в простых текстовых файлах.
  6. Извлекайте пользу из уже существующих программных решений.
  7. Используйте скриптовые языки для уменьшения трудозатрат и улучшения переносимости.
  8. Избегайте пользовательских интерфейсов, ограничивающих возможности пользователя по взаимодействию с системой.
  9. Делайте каждую программу «фильтром».

В целом можно сказать, что 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-logo.png

Примером популярного дистрибутива является 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
17.10 Artful Aardvark 4.13
18.04 LTS Bionic Beaver 4.15
18.10 Cosmic Cuttlefish 4.18
19.04 Disco Dingo 5.0
19.10 Eoan Ermine 5.3
20.04 LTS Focal Fossa

Android

Android.png

ОС основана на ядре 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
10.0 Android 10 4.9.191 4.14.142 4.19.71

Некоторые наработки были обратно портированы в основное ядро (например wakelocks для управления питанием). Android не использует библиотеку GNU C (вместо неё Bionic), не использует GUI-подсистему X Window System.

FreeBSD

FreeBSD.png

FreeBSD — свободная операционная система семейства UNIX, потомок AT&T Unix по линии BSD.

FreeBSD разрабатывается как целостная операционная система. Исходный код ядра, драйверов устройств и базовых пользовательских программ содержится в одном дереве системы управления версиями. Это отличает FreeBSD от GNU/Linux.

FreeBSD хорошо зарекомендовала себя как система для построения интранет и интернет-сетей и серверов. Она предоставляет надёжные сетевые службы и эффективное управление памятью.

Помимо своей стабильности, FreeBSD популярна и благодаря своей лицензии, которая существенно отличается от широко известной лицензии GNU GPL. Лицензия BSD позволяет использовать код не только в свободном ПО, но и в проприетарном. В отличие от GNU LGPL, которая требует раскрытия исходных кодов, лицензия BSD является более простой и непритязательной, требуя лишь упоминания заимствования, авторства и отказ от навязывания ответственности (нельзя отсылать пользователей своего продукта к авторам заимствованного кода).

macOS

MacOS.png

Основа системы — POSIX-совместимая операционная система Darwin, являющаяся свободным программным обеспечением. Её ядром является XNU, в котором используется микроядро Mach и стандартные службы BSD. Все возможности Unix в macOS доступны через консоль.

Поверх этой основы в Apple разработано много проприетарных компонентов, таких как Cocoa и Carbon, Quartz.

Актуальной версией является 10.15 (8 октября 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 млрд активных пользователей (которые использовали ОС хотя бы раз в месяц).

World Wide Smartphone Sales.png

Серверы

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.

ОС на суперкомпьютерах из TOP500

Игровые консоли

На июнь 2016 г. доля Sony PlayStation составляет 70%, а там поставляется UNIX-подобная ОС. Есть возможность загрузить свой Linux.

Встраиваемые системы

По данным UBM Electronics (март 2012 г.), доля Linux здесь около 30%.

  • Маршрутизаторы, точки доступа Wi-Fi, ADSL-модемы, ... (операционные системы OpenWRT, DD-WRT, ...)
  • Медиаплееры, Smart TV, ...
  • Автомобильная электроника, навигаторы, ...
  • Бытовая техника, «умные дома», ...
  • Медицинская техника
  • Станки с ЧПУ