1 история развития ос семейства unix
1 история развития ос семейства unix
UNIX имеет долгую и интересную историю. Начавшись как несерьезный и почти «игрушечный» проект молодых исследователей, UNIX стал многомиллионной индустрией, включив в свою орбиту университеты, многонациональные корпорации, правительства и международные организации стандартизации.
Первыми пользователями UNIX’а стали сотрудники отдела патентов Bell Labs, которые нашли ее удобной средой для создания текстов.
Большое влияние на судьбу UNIX оказала перепись ее на языке высокого уровня С, разработанного Денисом Ритчи специально для этих целей. Это произошло в 1973 году, UNIX насчитывал к этому времени уже 25 инсталляций, и в Bell Labs была создана специальная группа поддержки UNIX.
Широкое распространение UNIX получил с 1974 года, после описания этой системы Томпсоном и Ритчи в компьютерном журнале CACM. UNIX получил широкое распространение в университетах, так как для них он поставлялся бесплатно вместе с исходными кодами на С. Широкое распространение эффективных C-компиляторов сделало UNIX уникальной для того времени ОС из-за возможности переноса на различные компьютеры. Университеты внесли значительный вклад в улучшение UNIX и дальнейшую его популяризацию. Еще одним шагом на пути получения признания UNIX как стандартизованной среды стала разработка Денисом Ритчи библиотеки ввода-вывода stdio. Благодаря использованию этой библиотеки для компилятора С, программы для UNIX стали легко переносимыми.
Рис. 5.1. История развития UNIX
Наибольшее влияние на унификацию версий UNIX оказали такие стандарты как SVID фирмы AT&T, POSIX, созданный под эгидой IEEE, и XPG4 консорциума X/Open. В этих стандартах сформулированы требования к интерфейсу между приложениями и ОС, что дает возможность приложениям успешно работать под управлением различных версий UNIX.
Далее мы подробно остановимся на основных концепциях версии UNIX System V Release 4, которая вобрала в себя лучшие черты линий UNIX System V и UNIX BSD.
Что такое UNIX и зачем он нужен
Операционная система, которая изменила мир, хотя в ней почти никто не работал
В 1970-х годах в мире появился UNIX — операционная система, из которой растут ноги у большинства современных операционок. Для своего времени это был технологический прорыв, а заложенные там принципы мы используем до сих пор. В этой статье — что же там было такого революционного.
👍 Статья расширяет кругозор и помогает лучше понять информатику, но не имеет прикладной ценности. Если вам нужно что-то прикладное — прочитайте про размеры элементов в CSS.
Однозадачные компьютеры
Когда компьютеры только начали появляться, то работали они примерно так:
Получается, что они работали в однозадачном режиме: работает только одна программа, а для запуска второй нужно остановить первую. По этому принципу до сих пор работают контроллеры в ваших микроволновках и холодильниках, а также контроллеры типа Arduino.
Сначала такой подход всех устраивал, потом стало неудобно.
Многозадачные компьютеры
Чтобы компьютер работал более эффективно, программисты написали код, который управляет работой всего компьютера — операционную систему.
Первые операционные системы были псевдомногозадачными. Это значит, что они не запускали одновременно несколько программ, а в цикле по очереди брали по одной команде из каждой программы и выполняли их. Так как переключение между командами из разных программ происходит быстро, то создаётся впечатление, что они работают одновременно.
Потом эту проблему тоже решили, и компьютер мог выполнять несколько программ действительно одновременно, чтобы они не мешали друг другу. Так появились многозадачные операционные системы.
Но в то время домашних компьютеров не было, а желающих поработать за университетским компьютером было много, поэтому все работали по очереди. Например, один лаборант работал на нём с часу до двух, второй — с двух до трёх, а научный руководитель работал за компьютером с трёх до шести.
При этом мощности компьютеров уже хватало на то, чтобы с ним мог работать второй пользователь, не замедляя работу первого. А вот операционных систем, которые бы так умели, — не было. И здесь появляется UNIX.
UNIX — многопользовательская операционная система
Создатели UNIX Кен Томпсон и Деннис Ритчи (который потом напишет язык C) решили проблему так:
Со стороны пользователя кажется, что весь сервер в его распоряжении, но на самом деле сервером могут пользоваться одновременно десятки человек и не знать о том, что сервер выполняет что-то ещё. Сейчас это звучит обычно и примитивно, но для того времени это был прорыв.
Операционную систему, которая умеет всё это делать, назвали UNIX — сокращение от Uniplexed Information and Computing Service (единый информационно-вычислительный сервис). Изначально это называлось UNICS, но потом последние две буквы превратились в одну.
Что нового появилось в UNIX, чего до неё не было
Вот что впервые появилось именно в UNIX — и в виде идей, и в виде готового кода:
Файловая система с любой глубиной вложенности. Мы сейчас привыкли к папкам, в которых можно создавать другие папки, а в них третьи и так почти до бесконечности. Но до UNIX глубина вложенности была ограничена — нельзя было создать, например, папку внутри другой папки.
Модель работы с файлами. Пользователю раньше нужно было самому предусмотреть формат, размер и физическое размещение файлов на диске. В UNIX это всё взяла на себя операционная система.
Работа с программами напрямую. До UNIX настройку работы всех программ можно было сделать только в командной строке: запустил → компьютер что-то посчитал → показал результат. Если нужно изменить параметры, то это надо было делать через командную строку. В новой системе можно было менять настройки программ прямо внутри них — именно так и устроены сейчас все программы.
Вывод всего как текста. Раньше компьютеры работали с битами и выводили битовые последовательности. Их нужно было отдельно разбивать на нужные фрагменты или использовать встроенные программы для перевода битов в байты, а из них — в текст.
В UNIX единица вывода — это не бит, а байт. А в байт как раз умещается символ текста, а значит, с ним можно работать как с текстом: искать, склеивать с другими, отправлять в файл и так далее.
Регулярные выражения стали использоваться не только в профессиональных задачах, но и как основа для обработки вывода программ.
Язык C. Этот язык появился в UNIX как замена языка B. Но B был интерпретируемым языком (как Python), и для запуска программ нужен был его интерпретатор. Язык C — компилируемый, а значит, готовые программы можно запускать на любом совместимом компьютере, даже если на нём нет компилятора C.
Протокол TCP/IP. До UNIX этот протокол не был популярен, и компьютеры связывались друг с другом по более старому протоколу, который не имел столько возможностей. Теперь благодаря этой операционной системе весь мир пользуется интернетом, построенным на протоколе TCP/IP. Справедливости ради, этот протокол появился не в первой поставке UNIX.
Как работают в UNIX
Для управления этой системой почти всегда используется командная строка. Есть, конечно, и графический интерфейс для некоторых систем и задач, но штука в том, что UNIX заточен на работу в серверах. А у серверов чаще всего нет ни клавиатуры, ни монитора — только сетевые соединения, через которые пользователи и соединяются с сервером, чтобы им управлять.
Как UNIX стал стандартом
С середины 1970-х годов идёт довольно мутная история, в которой компания
AT&T долго и небезуспешно пытается заработать на UNIX, а американские университеты и инженеры-любители делают свою открытую версию. Идёт конкуренция между стандартами, инструментами, поставками и протоколами.
Конкуренция выливается в то, что у UNIX появляется множество более совершенных потомков. Их мы называем Unix-подобными системами.
Можно сказать, что Unix-подобность — это такой набор правил, условностей и стандартов, которых должны придерживаться новые операционки, чтобы сохранять преемственность и некоторую совместимость. То есть такой ГОСТ для операционных систем. Операционка может быть и без ГОСТа, но с ним лучше.
Где сегодня используется UNIX
В чистом виде UNIX сейчас используется только на серверах и оборудовании связи. Всё дело в том, что для домашнего использования эта система подходит слабо: у неё нет встроенного графического интерфейса и все операции и программы нужно настраивать вручную.
Зато если нужна гарантированная надёжность, производительность и масштабируемость, особенно при сетевых нагрузках, — используют UNIX или производные от неё. Про них сейчас тоже расскажем.
UNIX-подобные системы
На основе оригинальных версий Юникса появилось много разных операционных систем: BSD, Solaris, HP-UX и даже MacOS, который сделан на основе BSD версии 4.4. Идеи, которые были заложены 50 лет назад, оказались настолько рабочими, что применяются до сих пор.
А ещё есть Linux и его производные — RedHat, Calculate, Ubuntu и ещё сотня дистрибутивов. Многие думают, что Линукс — это развитие Юникса, но на самом деле это полностью самостоятельное и независимое от него семейство операционных систем, хотя и слова похожие. Про Линукс обязательно расскажем в следующей статье.
Основные этапы развития Unix
ОС как расширенная машина.
2. ОС как система управления ресурсами.
Идея о том, что ОС прежде всего система, обеспечивающая удобный интерфейс пользователям, соответствует рассмотрению сверху вниз. Другой взгляд, снизу вверх, дает представление об ОС как о некотором механизме, управляющем всеми частями сложной системы. Современные вычислительные системы состоят из процессоров, памяти, таймеров, дисков, накопителей на магнитных лентах, сетевых коммуникационной аппаратуры, принтеров и других устройств. В соответствии со вторым подходом функцией ОС является распределение процессоров, памяти, устройств и данных между процессами, конкурирующими за эти ресурсы. ОС должна управлять всеми ресурсами вычислительной машины таким образом, чтобы обеспечить максимальную эффективность ее функционирования. Критерием эффективности может быть, например, пропускная способность или реактивность системы. Управление ресурсами включает решение двух общих, не зависящих от типа ресурса задач:
Эволюция ОС.
На этапе разработки Unix ставилась задача создать операционную среду для проведения научных исследований. Разработчики не только успешно справились с этой задачей, но и добились гораздо большего. В настоящее время Unix с успехом применяется в бизнесе, архитектуре, медицине и многих других сферах деятельности.
История Unix началась в конце 60-х годов в AT&T Bell Laboratories с операционной системы под названием Multics. В 1969г. Bell Labs отошла от проекта Multics и вплотную занялась разработкой того, что впоследствии превратилось в операционную систему Unix.
Сотрудник компании Кен Томпсон решил построить операционную систему, которая поддерживала бы совместную работу коллектива программистов при проведении исследований и разработке новых программных продуктов.
В 1973г. сотрудник Bell Labs Деннис Ритчи переписал систему на созданном им языке программирования Си. В результате использования языка Си система стала легко переносимой, и в настоящее время её можно сравнительно небольшими усилиями адаптировать для машины новой архитектуры.
Основные этапы развития Unix
Классификация ОС.
По числу одновременно выполняемых процессов ОС делятся на два вида:
— однозадачные (MS DOS) – допускают только последовательное выполнение задач;
— многозадачные (UNIX, WINDOWS) – допускают параллельное выполнение задач.
Основное отличие многозадачных ОС от однозадачных в том, что программы работают параллельно, не мешая друг другу. Например, вы можете одновременно играть с компьютером в шахматы и слушать музыку, запущенную с компьютера.
Вторым признаком классификации является поддержка многопользовательского режима. Различают:
— однопользовательские (MS DOS) – обеспечивают работу на компьютере только одного пользователя;
— в многопользовательской операционной системе с мощным компьютером поддерживают одновременно работу нескольких пользователей (UNIX, WINDOWS).
Следующим признаком классификации ОС является командный и графический интерфейс, о которых мы говорили ранее.
Концептуальная модель ОС Unix. Основные свойства ОС Unix.
Основные свойства Unix
Как пользователю, так и системному программисту Unix представляется в виде очень простой системы.
Простота была, по-видимому, одним из важнейших критериев при выборе того или иного решения.
Основные свойства Unix определяются тремя главными составляющими:
· Языком Си, обусловливающим мобильность системы;
· Файловой системой, унифицирующей все средства передачи информации в Unix;
· Командным языком, поднимающим интерфейс пользователя с системой до уровня современных языков программирования.
2.2.1. Мобильность операционных систем
Мобильность (переносимость на компьютер другой архитектуры) системного программного обеспечения определяется прежде всего мобильностью операционной системы (ОС). Перенос проблемных программ существенно упрощается, если ОС, для которой рассчитаны эти программы, обладает свойством мобильности.
Требования к мобильным системам:
· Система должна быть написана на машинно-независимом языке программирования (неизбежные машинно-зависимые части системы должны быть четко выделены);
· Язык программирования, на котором пишется система, должен допускать разнообразные типы данных, обязательно включающие структуры и данные типа указателя, и содержать аппарат адресной арифметики.
Наличие этих возможностей, как правило, обеспечивает качество трансляции, сравнимое с качеством программирования на языке Ассемблера. (Таким языком программирования является, например, язык Си.)
· Система должна быть спроектирована так, чтобы выполнять все традиционно присущие операционным системам функции. Она должна быть универсальна по своим функциональным возможностям (например, в пределах систем разделения времени).
Ввиду постановки мобильной ОС на ЭВМ с различной архитектурой система должна решать наиболее общий класс задач, удовлетворяющий пользователей любой профессиональной ориентации.
Но такой системой может быть только инструментальная система разделения времени, т.к.:
· Высокий уровень сервисных возможностей, …
… всё это нужно всем пользователям на определенных этапах их деятельности.
Требование мобильности ведет к отказу от использования каких-либо специфических особенностей конкретной машинной архитектуры.
Отсюда: снижение надежности и снижение реактивности ОС.
Технические решения, позволяющие улучшить названные параметры, приведены ниже.
2.2.2. Особенности файловой системы Unix
Традиционно в операционных системах существуют 3 различных механизма управления потоками информации:
· Обмен с внешними устройствами;
· Обмен с дисковыми файлами;
· Обмен информацией между процессами.
В результате такого подхода, как правило, существуют 3 различных языковых интерфейса между пользователем и системой.
В Unix существует единый интерфейс для выполнения любого из 3-х способов передачи информации. Обмен данными в рамках указанных 3-х механизмов выполняется с помощью одних и тех же операций ввода/вывода (внешние устройства представлены в Unix специальными файлами).
Такой подход позволил разместить программы обслуживания этих механизмов непосредственно в ядре Unix.
2.2.3. Командный язык
Командный язык Unix позволяет разрабатывать развитые командные процедуры, в которых могут быть использованы уже существующие команды и вновь разработанные программы. Это позволяет быстро решать оперативные задачи управления сервером или сетью, а также решать задачи эффективной обработки данных.
Отличительной особенностью командного языка Unix является наличие управляющих структур, свойственных языкам высокого уровня (операторы цикла, ветвления, выбора).
Подробнее с командным языком Unix можно познакомиться в Модуле 4.
Концептуальная модель Unix
Ниже приведены основные особенности Unix.
1). Все работы в системе представлены множеством конкурирующих процессов. Существует единственная операция, порождающая процесс – системный вызов fork(). При порождении процессу присваивается числовая характеристика – идентификатор.
Если процессу требуется назвать другой процесс, например, при посылке ему сигнала, он указывает идентификатор требуемого процесса. Другого способа именования процессов в системе нет.
2). Аналогичным способом именуются файлы:
· при создании файлу присваивается индекс;
· при открытии файл получает номер дескриптора.
Подобное динамическое именование – часть общей стратегии виртуализации в Unix. В результате реализации этой стратегии прикладные программы становятся болеенезависимыми от конкретных объектов, с которыми они работают.
3). В Unix также принято следующее техническое решение: большие массивыданных рассматриваются как файлы. Такой подход, замедляющий работу программы, нуждается в некоторых оптимизирующих приемах:
· с точки зрения ядра системы все файлы рассматриваются как бесструктурныеодномерные массивы байтов с прямым доступом;
· обмен с магнитными носителями подвергается тотальной системной буферизации. Часто используемые блоки оседают в буфере (КЭШе), что уменьшает число обращений к дискам и позволяет повысить реактивность операционной системы.
Современные версии Unix
Почти сразу после рождения Unix раскололся на две ветви:
· прародительская ветвь, которой владела Unix System Laboratory (фактически коммерческая ветвь);
· проект исследовательского института Беркли — ветвь в основном свободных (беcплатных) Unix’ов.
Особенности и различия этих ветвей прослеживаются и в современных реализациях Unix. Ниже в таблице приведены основные современные реализации Unix и указана принадлежность той или иной реализации к определенной ветви.
Ветви Unix | |
ATT | BSD |
Solaris 2.0 (Sun) UnixWare (Novell) IRIX (Silicon Graphics) SCO (Santa Cruz Operations) HP-UX (Hewlett Packard) | SunOS или Solaris 1.x BSD/OS OSF/1 Ultrix Linux |
Основное отличие различных реализаций Unix состоит в том, как проводится начальная загрузка системы (этот вопрос рассматривается во второй части курса). В остальном различия реализаций Unix можно считать несущественными.
Архитектура ОС Unix
Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей её архитектуры.
Ядро имеет набор услуг, предоставляемых прикладным программам:
· создание и управление процессами, их синхронизация и межпроцессное взаимодействие.
Все приложения запрашивают услуги ядра посредством «системных вызовов».
Второй (после ядра) уровень составляют приложения или задачи, как системные, определяющие функциональность системы, так и прикладные, обеспечивающие пользовательский интерфейс Unix. Несмотря на внешнюю разнородность приложений, схемы их взаимодействия с ядром одинаковы.
Архитектура ядра Unix
Ядро состоит из трёх основных подсистем:
· Подсистема управления процессами и памятью;
1) Файловая подсистема:
· Обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисках и к периферийным устройствам;
· Контролирует права доступа к файлу;
· Обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
2) Подсистема управления процессами
Запущенная на выполнение программа порождает в системе один или более процессов (или задач).
Подсистема управления процессами контролирует:
· Создание и удаление процессов;
· Распределение системных ресурсов (памяти, вычислительных процессов) между процессами;
3) Подсистема ввода/вывода.
Выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам.
Она обеспечивает необходимую буферизацию данных и взаимодействует с драйверами устройств — специальными модулями ядра, непосредственно обслуживающими внешние устройства.
Структура файловой системы
Как и во многих современных ОС, в Unix файлы организованы в виде дерева (рис. 2.3). Полное имя файла содержит путь (список каталогов (ветвей)), которые необходимо пройти, чтобы достичь файла.
Рис. 2.3. Типичная файловая система Unix
Так как в Unix все доступное пользователем файловое пространство объединено в единое дерево каталогов, то полное имя любого файла начинается с символа ‘/’ и НЕ содержит идентификатора устройства.
Типы файлов
В Unix существуют 6 типов файлов, различающихся по функциональному назначению и действиям ОС при выполнении тех или иных операций над файлами:
· Специальный файл устройства
· FIFO или именованный программный канал
Обычный файл. Обычный файл в ОС Unix является бесструктурным массивом байтов с прямым доступом. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К файлам этого типа относятся текстовые файлы, бинарные данные, исполняемые программы.
Специальный файл устройства.Внешние устройства в Unix тоже считаются файлами, чтобы с ними можно было работать посредством обычных файловых операций. Файлы, представляющие внешние устройства, бывают двух типов: блок-ориентированные и байт ориентированные.
Обмен с блок-ориентированным специальным файлом происходит таким образом, что особенности аппаратуры устройства остаются для пользователя невидимыми.
Одно и то же внешнее устройство может одновременно быть представлено как блок-ориентированным, так и байт-ориентированным специальным файлом.
Синтаксис имен, защита, способы доступа и операции для специального файла те же, что и для обычного файла. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.
FIFO или именованный программный канал.Этот тип файла характеризуется тем, что данные из него читаются в том порядке, в каком они были в него записаны. Служит для организации взаимодействия процессов и не может существовать без тех процессов, которые его используют.
Связь (link).В файловой системе ОС Unix каталог содержит имена файлов и указатели на их метаданные (тип файла, права доступа к нему, длина, дата создания). Такой подход позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе.
Такая связь имени файла с его данными называется жесткой связью.
Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует файл, который в свою очередь, ссылается на другой файл. Данные файла, являющегося символической связью, содержат только имя целевого файла.
Сокет (socket-гнездо).Гнёзда предназначены для взаимодействия между процессами. Интерфейс гнёзд часто используется для доступа к сети TCP/IP. В системах ветви BSD Unix на базе гнёзд реализована система межпроцессного взаимодействия, с помощью которой работают многие системные сервисы, например, система печати.
Выход из системы
Конвейеры
Интерпретатор командного языка Unix позволяет перенаправлять выход одной команды на вход другой. Для этого служит операция ‘|’ – вертикальная черта.
Примечания. 1). Команды или программы, которые вводят данные со стандартного ввода, а выводят на стандартный вывод – называются фильтрами. 2). Синхронизация работы фильтров в конвейере производится ядром ОС Unix.
вариант с конвейером:
Как только команда ls начинает выдавать результаты, они сразу поступают на вход фильтра wc. Никакого рабочего промежуточного файла не требуется.
Фоновые команды
В ОС Unix можно указать выполнение команды в «фоновом» режиме. Для этого необходимо после команды через пробел набрать символ ‘&’.
«Попросим» компилятор языка Си изготовить исполняемый файл (см. раздел 3.7) в фоновом режиме.
%cc prog.c & | запуск программы cc в фоновом режиме |
№ процесса, который выполняет процесс cc (выводится для контроля за его работой) | |
% | подсказка операционной системы |
Теперь можно вводить новую команду (в то время как программа выполняется в фоновом режиме).
Группирование команд
Если последовательность команд, которую вы собираетесь ввести, вам хорошо известна, можно ввести их в одной строке, разделяя точкой с запятой: