Тарифы Услуги Сим-карты

Пример операционной системы unix. OC UNIX, основные характеристики, файловая структура

История UNIX® начинается в 1969 г. Большинство современных UNIX-систем являются коммерческими версиями исходных дистрибутивов UNIX. Solaris от Sun, HP-UX Hewlett-Packard, AIX® от IBM являются лучшими представителями UNIX, которые, кроме того, имеют свои собственные уникальные элементы и свои собственные фундаментальные решения. Например, Sun Solaris - это UNIX, но, кроме того, она содержит много инструментов и расширений, разработанных специально в расчете на рабочие станции и серверы производства Sun.

Linux® был разработан в попытке создать бесплатную альтернативу коммерческим UNIX-средам. Его история начинается в 1991 или даже в 1983 гг., когда был создан проект GNU, чьей исходной целью было предоставить бесплатную альтернативу UNIX. Linux работает на гораздо большем количестве платформ, например на Intel®/AMD x86. Большинство ОС UNIX способны работать только на одной платформе.

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

Администратор или разработчик, который привык работать с Linux, система UNIX может показаться не очень удобной для использования. С другой стороны, фундамент UNIX-подобной операционной системы (инструменты, файловая система, интерфейсы API) достаточно стандартизирован. Однако некоторые детали систем могут иметь существенные различия. Далее в статье будут рассмотрены эти различия.

Технические различия

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

Разработка GNU/Linux, с другой стороны, не ориентирована на конкретные платформы и круг клиентов и разработчики GNU/Linux имеют различные опыт и взгляды. В Linux-сообществе не существует строгого стандартного набора инструментов или сред. Для решения этой проблемы был запущен проект Linux Standards Base (LSB), но он оказался не столь результативным, как хотелось бы.

Эта недостаточная стандартизованность приводит к значительным несогласованностям внутри Linux. Для некоторых разработчиков возможность использовать лучшие достижения других операционных систем является плюсом, однако не всегда удобно копирование в Linux элементов UNIX, например, когда имена устройств внутри Linux могут быть взяты из AIX, тогда как инструменты для работы с файловой системой ориентированы на HP-UX. Несовместимости такого рода встречаются также между различными дистрибутивами Linux. Например, Gentoo и RedHat реализуют различные методы обновлений.

Для сравнения - каждый новый релиз UNIX-системы выходит с хорошо документированным описанием новых особенностей и изменений UNIX. Команды, инструменты и другие элементы редко меняются, и часто те же аргументы командной строки для приложений остаются неизменными на протяжении многих версий этого программного обеспечения. Когда же происходят значительные изменения в этих элементах, поставщики коммерческих UNIX-систем часто предоставляют оболочку, необходимую для обеспечения совместимости с ранними версиями этого инструмента.

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

Архитектура аппаратного обеспечения

Большинство коммерческих версий UNIX созданы для одного или небольшого количества архитектур аппаратного обеспечения. HP-UX работает только на платформах PA-RISC и Itanium, Solaris - на SPARC и x86, а AIX предназначен только для процессоров POWER.

Благодаря этим ограничениям, UNIX-производители могут относительно свободно модифицировать свой код для этих архитектур и использовать любое преимущество своей архитектуры. Поскольку они прекрасно знают поддерживаемые ими устройства, то их драйверы работают лучше, и им не нужно учитывать ограничения BIOS, характерные для ПК.

Linux, с другой стороны, исторически разрабатывался для обеспечения максимальной совместимости. Linux доступен на различных архитектурах, а число устройств ввода/вывода и прочей периферии, которая может использоваться с этой ОС, почти безгранично. Разработчики не могут заранее знать, какое конкретное оборудование будет установлено в компьютере, и часто не могут обеспечить его эффективное использование. Одним из примеров является управление памятью на Linux. Ранее Linux использовал сегментную модель памяти, первоначально разработанную для x86. Сейчас он адаптирован для использования страничной памяти, но все еще сохраняет некоторые требования к сегментной памяти, что вызывает проблемы, если архитектура не поддерживает сегментированную память. Это не является проблемой для UNIX-производителей. Они точно знают, на каком оборудовании будет работать их UNIX.

Ядро

Ядро является сердцем операционной системы. Исходный код ядра коммерческих дистрибутивов UNIX является собственностью их разработчиков и не распространяется за пределы компании. Полностью противоположная ситуация с Linux. Процедуры для компиляции и исправления ядер и драйверов весьма различны. Для Linux и других операционных систем с открытым исходным кодом патч может быть выпущен в виде исходного кода, и конечный пользователь может установить, проверить и даже модифицировать его. Эти патчи обычно проверены не так тщательно как патчи от поставщиков коммерческих ОС UNIX. Поскольку нет полного списка приложений и сред, которые должны быть оттестированы для корректной работы на Linux, Linux-разработчики зависят от конечных пользователей и других разработчиков, которые будут отлавливать ошибки.

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

Все коммерческие версии UNIX в некоторой степени эволюционировали до модульного ядра. Драйверы и отдельные особенности ОС доступны как отдельные компоненты и могут быть по необходимости загружены или выгружены из ядра. Но открытая модульная архитектура Linux гораздо гибче. Однако гибкость и адаптируемость Linux означают и постоянное изменение. Исходный код Linux постоянно меняется, и, по прихоти разработчика, может поменяться API. Когда модуль или драйвер написан для коммерческой версии UNIX, он проработает гораздо дольше, чем тот же драйвер для Linux.

Поддержка файловой системы

Одной из причин, благодаря которой Linux стал достаточно мощной ОС, является его широкая совместимость с другими операционными системами. Одна из самых очевидных особенностей - это изобилие файловых систем, которые являются доступными. Большинство коммерческих версий UNIX поддерживают два или три типа файловой системы. Linux, однако, поддерживает большинство из современных файловых систем. показывает, какие файловые системы поддерживаются ОС UNIX. Любую из этих файловых систем можно смонтировать на Linux, хотя не все из этих систем поддерживают в полном объеме чтение и запись данных.

Таблица 1. Файловые системы, которые являются стандартными для UNIX

Большинство коммерческих версий UNIX поддерживают журналируемые файловые системы. Например, HP-UX в качестве стандартной файловой системы использует hfs, но он также поддерживает журналируемую файловую систему vxfs. Solaris поддерживает ufs и zfs. Журналируемая файловая система является важным компонентом любой серверной среды для предприятия. В Linux поддержка журналируемых файловых систем была реализована поздно, но теперь есть несколько вариантов – от клонов коммерческих файловых систем (xfs, jfs) до специфических для Linux файловых систем (ext3, reiserfs).

Другие особенности файловых систем включают в себя поддержку квот, список контроля доступа к файлам, зеркальное копирование, снимки системы и изменение размеров. В той или иной форме они поддерживаются файловыми системами Linux. Большинство из этих особенностей не являются стандартными для Linux. Одни особенности могут работать на одной файловой системе, тогда как другие потребуют другой файловой системы. Некоторые из этих особенностей просто недоступны на определенных файловых системах Linux, а другие требуют дополнительной установки инструментов, например, определенной версии LVM или поддержку дисковых массивов (software raid package). Исторически так сложилось, что в Linux совместимость программных интерфейсов и стандартных инструментов достигается с трудом, поэтому множество файловых систем реализуют эти особенности поразному.

Поскольку коммерческие UNIX-системы поддерживают ограниченное количество файловых систем, их инструменты и методики работы с ними более стандартизованы. Например, так как в Irix поддерживалась только одна главная файловая система, то был только один способ задания списков контроля доступа. Это гораздо удобнее для конечного пользователя и для дальнейшей поддержки этой ОС.

Доступность приложений

Большинство базовых приложений одинаковы как на UNIX, так и на Linux. Например, команды cp , ls , vi и cc доступны на UNIX и Linux, и очень похожи, если не полностью идентичны. Linux-версии этих инструментов основаны на GNU-версиях этих инструментов, тогда как версии этих инструментов для UNIX основаны на традиционных UNIX-инструментах. Эти инструменты для UNIX имеют длительную историю и редко менялись.

Но это вовсе не означает, что коммерческие версии UNIX не могут использоваться с GNU-инструментами. Фактически много производителей коммерческих UNIX ОС включают в свои дистрибутивы много GNU-инструментов или предлагают их как бесплатное дополнение. GNU-инструменты не просто стандартные инструментальные средства. Некоторые из таких бесплатных утилит не имеют коммерческих аналогов (emacs или Perl). Большинство производителей предустанавливают эти программы, и они либо автоматически устанавливаются вместе с системой, или доступны в качестве дополнительного компонента.

Бесплатные приложения с открытым исходным кодом почти всегда встраиваются во все Linux-дистрибутивы. Существует большое количество бесплатного программного обеспечения, доступного для Linux, и многие из этих приложений были портированы на коммерческие версии ОС UNIX.

Коммерческие и/или с закрытым исходным кодом приложения (CAD, финансовые программы, графические редакторы) могут не иметь аналогов для Linux. Хотя некоторые производители выпускают версии своих приложений для Linux, большинство производителей не торопится делать этого, пока популярность Linux у пользователей не возрастет.

С другой стороны, коммерческие версии UNIX исторически имеют поддержку большого количества приложений уровня предприятия, например, Oracle или SAP. Linux сильно проигрывает из-за трудности сертификации больших приложений, тогда как коммерческие версии UNIX не меняются сильно от релиза к релизу. Linux может сильно измениться не только с каждым новым дистрибутивом, но иногда и в промежутке между релизами одного и того же дистрибутива. Поэтому производителю программного обеспечения очень трудно понять, в какой именно среде будет использоваться их приложение.

Системное администрирование

Хотя некоторые дистрибутивы Linux поставляются со стандартным набором инструментов для управления системой, например, SUSE"s YaST, не существует общего для Linux стандарта инструментальных средств системного администрирования. Доступны текстовые файлы и инструменты командной строки, но иногда их применение может быть неудобным. Каждая коммерческая версия UNIX имеет свой собственный интерфейс управления системой. С помощью этого интерфейса можно управлять элементами системы и изменять их. Ниже приведен пример Менеджера системного администрирования для HP-UX.

Данный SAM содержит следующие модули:

  • Пользователи или группы, которыми надо управлять.
  • Параметры ядра, которые можно изменить.
  • Настройка сети.
  • Настройка и инициализация дисков.
  • Конфигурирование X server.

Качество этого пакета утилит великолепно, причем этот пакет утилит хорошо взаимодействует с текстовыми файлами. Аналога этого инструмента для Linux не существует. Даже YaST в SUSE не обладает такой же функциональностью.

Еще один аспект в UNIX и Linux, который, кажется, меняется почти с каждой версией ОС – расположение сценариев инициализации системы. К счастью, /sbin/init и /etc/inittab являются стандартными каталогами. Но сценарии запуска системы находятся в различных каталогах. показывает места, где хранятся сценарии инициализации системы для различных дистрибутивов UNIX и Linux.

Таблица 2. Расположение сценариев инициализации системы для различных версий UNIX
HP-UX /sbin/init.d
AIX /etc/rc.d/init.d
Irix /etc/init.d
Solaris /etc/init.d
Redhat /etc/rc.d/init.d
SUSE /etc/rc.d/init.d
Debian /etc/init.d
Slackware /etc/rc.d

Из-за большого количества дистрибутивов Linux и почти бесконечного числа доступных приложений (с учетом того, что версий этого приложения тоже много) для этой ОС, управление программами на Linux становится сложной задачей. Выбор правильного инструмента зависит от того, с каким дистрибутивом вы работаете. Далее неудобства проистекают из того, что некоторые дистрибутивы используют формат файлов Redhat Package Manager (RPM), в то время как их программы несовместимы. Такое разделение приводит к появлению огромного количества опций работы с пакетами, и не всегда понятно, какая система используется в конкретной среде.

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

Производители коммерческих дистрибутивов UNIX поставляют также и аппаратное обеспечение, для работы на котором предназначена их ОС, поэтому в своих ОС они могут внедрять какие-либо новые устройства, что гораздо труднее сделать для Linux. Например, в последних версиях Linux были попытки реализовать поддержку компонентов с возможностью их "горячей замены" (с переменным успехом). Коммерческие версии UNIX обладают такой возможностью уже много лет. Также в коммерческих версиях UNIX лучше, чем в Linux, реализован мониторинг за аппаратным обеспечением. Производители могут написать драйверы и внедрить их в свою операционную систему, которая будет вести мониторинг состояния системы, например, число ошибок памяти ECC, параметры энергопотребления или любого другого компонента аппаратного обеспечения. Поддержка такого рода для Linux ожидается только в отдаленном будущем.

Аппаратное обеспечение для коммерческих UNIX-систем также имеет более продвинутые опции загрузки. Прежде чем операционная система загрузится, существует много возможностей настроить ее загрузку, проверить "здоровье" системы или настроить параметры аппаратного обеспечения. BIOS стандартного персонального компьютера PC имеет меньшую часть, если вообще имеет, этих опций.

Поддержка

Одно из наиболее значительных различий между Linux и UNIX состоит в стоимости. Поставщики коммерческих UNIX-систем установили высокую цену на свой UNIX, хотя его можно использовать только с их аппаратными платформами. Дистрибутивы Linux, с другой стороны, стоят сравнительно недорого, если вообще не бесплатны.

При покупке коммерческой версии UNIX производители обычно предоставляют техническую поддержку. Большинство пользователей Linux лишено поддержки компании-производителя ОС. Они могут получить поддержку только с помощью электронной почты, из форумов и от различных сообществ пользователей Linux. Однако эти группы предназначены не только для пользователей Linux. Многие администраторы коммерческих операционных систем семейства UNIX участвуют в этих открытых группах поддержки для того чтобы иметь возможность как оказывать помощь, так и, при необходимости, пользоваться ею. Много людей находят такие группы взаимопомощи даже более полезными, чем система поддержки, предлагаемая изготовителем ОС.

Заключение

Фундаментальные основы UNIX и Linux очень схожи. Пользователю или системному администратору переход с Linux на UNIX добавит в работу некоторые неудобства, но в целом переход окажется безболезненным. Даже если файловые системы и ядра у них будут отличаться и для их освоения потребуется некоторое время, инструменты и API остаются неизменными. В основном эти различия существенны не более чем различия между основными версиями UNIX. Все ветви UNIX и Linux постепенно развиваются и будут незначительно отличаться друг от друга, но из-за зрелости концепций UNIX основы ОС не изменятся очень сильно.

Если вы недавно начали изучать Linux и осваиваться в этой огромной вселенной, то наверное, часто встречали термин Unix. Звучит очень похоже на Linux, но что же оно значит? Наверное, вам интересно чем отличается unix от linux. Ответ на этот вопрос зависит от того что вы понимаете под этими словами. Ведь каждое из них может интерпретироваться по-разному. В этой статье мы рассмотрим упрощенную историю Linux и Unix чтобы помочь вам понять что это и как они между собой связаны. Как всегда вы можете задавать вопросы или добавить дополнительную информацию в комментариях.

Свою историю Unix начал в конце 1960-х и в начале 1970-х в научно-исследовательских вычислительных лабораториях AT&T Bell Labs в Соединенных штатах. Вместе с MIT и General Electric исследовательская лаборатория Bell Labs начала разработку новой операционной системы. Некоторые исследователи были недовольны ходом разработки этой операционной системы. Они отошли от работы над основным проектом и начали разрабатывать собственную ОС. В 1970 году эта система получила название Unix, а два года спустя она была полностью переписана на языке программирования Си.

Это позволило распространять и портировать Unix на различные устройства и вычислительные платформы.

Так как Unix продолжал развиваться, AT&T начал продавать лицензии на использование ее в университетах, а также в коммерческих целях. Это означало что не все могли, как сейчас, свободно изменять и распространять код операционной системы Unix. Вскоре начало появляться много редакций и вариантов операционной системы Unix, предназначенной для решения различных задач. Самой известной из них была BSD.

Linux похож на Unix по функциональности и возможностям, но не кодовой базой. Эта операционная система была собрана из двух проектов. Первый - проект GNU, разработанный Ричардом Столлманом в 1983, второй - ядро Linux, написанное Линусом Торвальдсом в 1991.

Целью проекта GNU было создать систему похожую на Unix, но не зависящую от него. Иными словами, операционную систему, не содержащую код Unix, которая могла бы свободно распространяться и модифицироваться без ограничений, как свободное программное обеспечение. Так как свободное ядро Linux не могло работать само по себе, проект GNU объединился с ядром Linux, и так родилась операционная система Linux.

Конструировался Linux под влиянием системы Minix, потомка Unix, но весь код был написан с нуля. В отличие от Unix, который использовался на серверах и больших мэйнфреймах различных предприятий, Linux был рассчитан для использования на домашнем компьютере с более простым аппаратным обеспечением.

На сегодняшний день Linux работает на огромном количестве платформ, большем чем любая другая ОС, это сервера, встраиваемые системы, микрокомпьютеры, модемы и даже мобильные телефоны. Теперь будет более подробно рассмотрена разница linux и unix.

Что такое Unix

Термин Unix может относиться к таким понятиям:

  • Оригинальная операционная система, разработанная в AT&T Bell Labs, на основе которой развиваются другие ОС.
  • Товарный знак, написано заглавными буквами. UNIX принадлежит The Open Group, которая разработала набор стандартов для операционных систем - Single UNIX Specification. Только те системы, которые соответствуют стандартам могут законно называться UNIX. Сертификация не бесплатная и требует от разработчиков платить за использование этого товарного знака.
  • Все операционные системы зарегистрированы с именем Unix. Потому что они соответствуют вышеупомянутым стандартам. Это AIX, A/UX, HP-UX, Inspur K-UX, Reliant UNIX, Solaris, IRIX, Tru64, UnixWare, z/OS и OS X - да, даже те что работают на компьютерах Apple.

Что такое Linux

Термин Linux относится только к ядру. Операционная система не будет полной без настольной среды и приложений. Поскольку большинство приложений были разработаны и сейчас разрабатываются в рамках проекта GNU, полное название операционной системы - GNU / Linux.

Сейчас множество людей используют термин Linux для обозначения всех, основанных на ядре Linux, дистрибутивов. На данный момент самая новая версия ядра Linux - 4.4, версия 4.5 находится на стадии разработки. Смена нумерации релизов ядра с 3.х на 4.х состоялась не так уж давно.

Linux - это Unix подобная операционная система, которая ведет себя как Unix, но не содержит его код. Unix подобные ОС часто называют Un*x, *NIX и *N?X, или даже Юниксоидами. У Linux нет сертификации Unix, а GNU расшифровывается как GNU not Unix, так что в этом отношении Mac OS X больше Unix чем Linux. Но тем не менее ядро Linux и ОС GNU Linux очень похожи на Unix по функциональности, реализуют большинство принципов философии Unix. Это удобочитаемый код, хранение конфигурации системы в отдельных текстовых файлах, а также использование небольших инструментов командной строки, графическая оболочка и менеджер сеансов.

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

Надеюсь, теперь стало более понятно, чем отличается unix от linux. Но пойдем еще дальше и подведем итоги.

Основные отличия

  • Linux - свободная операционная система с открытым исходным кодом, а оригинальная Unix - нет, кроме некоторых ее производных.
  • Linux - это клон оригинального Unix, но он не содержит его код.
  • Главное отличие unix от linux, в том что Linux - это только ядро, в то время как Unix была и есть полноценной операционной системой.
  • Linux был разработан для персональных компьютеров. А Unix ориентирован в первую очередь на крупные рабочие станции и сервера.
  • Сегодня Linux поддерживает больше платформ чем Unix.
  • Linux поддерживает больше типов файловых систем чем Unix.

Как видите, путаница обычно возникает из-за того, что linux vs unix могут означать совершенно разные вещи. Какое бы значение ни имелось в виду, факт остается фактом - Unix был первым, а Linux появился позже. Linux родился из стремления к свободе программного обеспечения и мобильности, вдохновленный подходом Unix. Можно смело сказать что мы все в долгу перед движением свободного программного обеспечения, потому что мир был бы намного хуже без него.

Эта система прошла испытание временем и выжила.

Применительно к этой системе была разработана система стандартов:

POSIX 1003.1-1988, 1990 - описаны системные вызовы ОС UNIX (точки входа в систему)

(Application Programming Interface - API)

POSIX 1003.2-1992 - определяет командный интерпретатор и набор утилит ОС UNIX

POSIX 1003.1b-1993 - дополнения, относящиеся к приложениям реального времени

X/OPEN - группа, координирующая разработку стандартов под ОС UNIX

Отличительные черты ос unix

    Система написана на языке высокого уровня (Си), что делает её доступной к пониманию, изменению и переносу на другие аппаратные платформы. UNIX является одной из наиболее открытых систем.

    UNIX - многозадачная, многопользовательская система с широким спектром услуг. Один сервер может обслуживать запросы большого количества пользователей. При этом необходимо администрирование только одной пользовательской системы.

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

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

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

    Достаточно большое количество приложений, в том числе свободно распространяемых.

Основы архитектуры операционной системы unix Модель системы unix.

Структура ядра ос unix.

UNIX представляет собой двухуровневую модель системы: ядро и приложения.

Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от аппаратных особенностей вычислительной системы.

Ядро имеет набор услуг, предоставляемых прикладным программам. К ним относятся операции ввода/вывода, порождение и управление процессами, взаимодействие между процессами, сигналами и т.п.

Все приложения запрашивают услуги ядра посредством системы вызовов.

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

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

Процесс запрашивает услугу определенной процедуры через стандартизированный системный вызов, внешне похожий на обычный вызов библиотечной функции языка Си. Ядро от имени процесса обрабатывает запрос и возвращает процессу необходимые данные.

Ядро состоит из основных трех подсистем:

1) файловая подсистема;

2) подсистема ввода-вывода;

3) подсистема управления процессами и памятью.

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

Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файлов, запись и чтение данных.

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

С каждым файлом связаны 3 категории пользователей:

Владелец;

Группа-владелец;

Остальные пользователи.

Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистем ввода/вывода.

Подсистема ввода/вывода обрабатывает запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам, обеспечивает необходимую буферизацию данных и взаимодействие с драйверами устройств.

Драйверы – это специальные модули ядра, непосредственно обслуживающие внешние устройства.

Подсистема управления процессами и памятью контролирует создание и удаление процессов, распределение системных ресурсов, памяти и процессора между процессами, синхронизацию процессов, межпроцессорное взаимодействие.

Распределяет системные ресурсы специальная задача ядра, называемая планировщиком процессов. Планировщик запускает системные процессы и следит за тем, чтобы процесс не захватил разделяемые системные ресурсы.

Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач, в том числе и виртуальной. Это значит, что он предоставляет возможность размещать часть процесса во вторичной памяти (т.е. на жестком диске) и перемещать её в оперативную память по мере необходимости.

Процесс освобождает процессор перед длительной операцией ввода/вывода или по прекращению кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.

Модуль межпроцессорного взаимодействия отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность передачи данных между различными процессами.

Что такое Unix (для начинающих)


Дмитрий Ю. Карпов


О чем это я?


Этот опус не претендует на полноту описания. Более того, в целях упрощения сознательно опущены некоторые подробности. Сначала цикл задумывался как FAQ (ЧаВо - часто задаваемые вопросы), но видимо получится "Курс молодого бойца" или "Сержантская школа".

Я попытался дать сравнительное описание разных операционных систем - именно этого на мой взгляд не хватает большинству учебников и технических пособий.

Не дожидаясь разоблачения со стороны опытных Unix"оидов, делаю добровольное признание - я не могу претендовать на роль великого знатока Unix, а мои знания в основном вокруг FreeBSD. Надеюсь, это не помешает.

Этот файл еще долго будет находиться в состоянии "under construction". :-)

Что такое Unix?


Unix - полноценная, изначально многопользовательская, многозадачная и многотерминальная операционная система. Точнее, это целое семейство систем, почти полностью совместимых друг с другом на уровне исходных текстов программ.

Какие бывают Unix"ы и на каких машинах они запускаются?


Этот список не претендует на полноту, ибо кроме перечисленных есть еще множество менее распространенных Unix"ов и Unix-подобных систем, не говоря уже о древних Unix"ах для устаревших машин.

Условно можно выделить семейства System V и Berkeley. System V (читается "System Five") имеет несколько вариантов, последний по моим сведениям System V Release 4. Университет Berkeley славен не только разработкой BSD, но и большинства протоколов Internet. Впрочем, многие Unix"ы сочетают свойства обеих систем.

Где взять бесплатный Unix?


  • Семейство BSD: FreeBSD , NetBSD , OpenBSD .
  • Семейство Linux : RedHat , SlackWare , Debian , Caldera ,
  • SCO и Solaris доступны бесплатно для некоммерческого использования (в основном - для учебных заведений).

    Каковы основные отличия Unix от других OS?


    Unix состоит из ядра с включенными в него драйверами и из утилит (внешних по отношению к ядру программ). Если надо изменить конфигурацию (добавить устройство, изменить порт или прерывание), то ядро пересобирают (перелинковывают) из обьектных модулей или (напр., во FreeBSD) из исходников. /* Это не совсем верно. Некоторые параметры можно поправить без пересборки. Существуют также loadable kernel modules. */

    В противоположность Unix"у Windows (если не уточняется, какая, то имеются в виду 3.11, 95 и NT) и OS/2 при загрузке фактически на ходу прилинковывают драйверы. При этом компактность собранного ядра и повторное использование общего кода на порядок ниже, чем у Unix. Кроме того, при неизменной конфигурации системы ядро Unix без переделки (потребуется изменить только стартовую часть BIOS) может быть записан в ПЗУ и выполняться _не_загружаясь_ в ОЗУ. Компактность кода особенно важна, т.к. ядро и драйверы никогда не покидают физическую оперативную память, не свопятся на диск.

    Unix - самая многоплатформенная OS. WindowsNT пытается подражать ему, но пока это плохо удается - после отказа от MIPS и POWER-PC, W"NT остались всего на двух платформы - традиционная i*86 и DEC Alpha. Разумеется, переносимость программ с одной версии Unix на другую ограничена. Неаккуратно написанная программа, не учитывающая различий в реализациях Unix, делающая необоснованные предположения типа "переменная integer должна занимать четыре байта", может потребовать серьезной переделки. Но все равно это на много порядков легче, чем например пернести с OS/2 на NT.

    Почему Unix?


    Unix используется как в качестве как сервера, так и рабочей станции. В номинации серверов с ним конкурируют MS WindowsNT, Novell Netware, IBM OS/2 Warp Connect, DEC VMS и операционные системы мэйнфреймов. Каждая система имеет свою область применения, в которой она лучше других.

  • WindowsNT - для администраторов, которые предпочитают привычный интерфейс экономному расходованию ресурсов и высокой производительности.
  • Netware - для сетей, где нужна высокая производительность файлового и принтерного сервиса и не столь важны остальные сервисы. Главный недостаток - на сервере Netware трудно запускать приложения.
  • OS/2 хороша там, где нужен "легкий" сервер приложений. Ресурсов требует меньше чем NT, в управлении гибче (хотя в настройке может и сложнее), а многозадачность очень хорошая. Авторизация и разграничение прав доступа не реализованы на уровне ОС, что с лихвой окупается реализацией на уровне приложений-серверов. (Впрочем, зачастую остальные OS делают то же самое). Многие станции FIDOnet и BBS сделаны на базе OS/2.
  • VMS - мощный, ничем не уступающий Unix"ам (а во многом и превосходящий его) сервер приложений, но только для платформ VAX и Alpha фирмы DEC.
  • Мэйнфреймы - для обслуживания очень большого количества пользователей (порядка нескольких тысяч). Но работа этих пользователей как правило организована в виде не клиент-серверного взаимодействия, а в виде хост-терминального. Терминал же в этой паре скорее не клиент, а сервер (Мир Internet, N3 за 1996-й год). К преимуществам мэйнфреймов надо отнести более высокую защищенность и устойчивость к сбоям, а к недостаткам - соответствующую этим качествам цену.

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

    Недостаточная гибкость предоставления прав доступа пользователей к файлам по сравнению с WindowsNT затрудняет организацию _на_уровне_файловой_системы_ группового доступа к данным (точнее, к файлам), что на мой взгляд компенсируется простотой реализации, а значит меньшими требованиями к аппаратуре. Впрочем, такие приложения, как SQL-сервер решают проблему группового доступа к данным своими силами, так что отсутствующая в Unix возможность запретить доступ к _файлу_ конкретному пользователю на мой взгляд является явно избыточной.

    Практически все протоколы, на которых основан Internet, были разработаны под Unix, в частности стек протоколов TCP/IP придуман в университете Berkeley.

    Защищенность Unix при правильном администрировании (а когда это не так?) ни в чем не уступает ни Novell, ни WindowsNT.

    Важным свойством Unix, которое приближает его к мэйнфреймам, является его многотерминальность, много пользователей могут одновременно запускать программы на одной Unix-машине. Если не требуется использовать графику, можно обойтись дешевыми текстовыми терминалами (специализированными или на базе дешевых PC), подключенными по медленным линиям. В этом с ним конкурирует только VMS. Можно использовать и графические X-терминалы, когда на одном экране присутствуют окна процессов, выполняющихся на разных машинах.

    В номинации рабочих станций с Unix конкурируют MS Windows*, IBM OS/2, Macintosh и Acorn RISC-OS.

  • Windows - для тех, кто ценит совместимость больше эффективности; для тех, кто готов купить большое количество памяти, дискового пространства и мегагерц; для тех, кто любит не вникая в суть, щелкать мышкой по кнопочкам в окошке. Правда, рано или поздно все равно придется изучить принципы работы системы и протоколов, но тогда уже будет поздно - выбор сделан. Немаловажным преимуществом Windows надо признать также возможность украсть кучу программного обеспечения.
  • OS/2 - для любителей OS/2. :-) Хотя по некоторым сведениям OS/2 лучше других взаимодействует с мэйнфреймами и сетями IBM.
  • Macintosh - для графических, издательских и музыкальных работ, а также для тех, кто любит понятный, красивый интерфейс и не хочет (не может) разбираться в подробностях функционирования системы.
  • RISC-OS, прошитая в ПЗУ, позволяет не тратить время на инсталляцию операционной системы и восстановление ее после сбоев. Кроме того, практически все программы под ней очень экономно расходуют ресурсы, благодаря чему не нуждаются в свопинге и работают очень быстро.

    Unix функционирует как на PC, так и на мощных рабочих станциях с RISC-процессорами, под Unix написаны действительно мощные САПР и геоинформационные системы. Своей масштабируемостью Unix из-за его многоплатформенности на порядок превосходит любую другую операционную систему из известных мне.

    Основные понятия Unix


    Unix базируется на двух основных понятиях: "процесс" и "файл". Процессы являют собой динамическую сторону системы, это субьекты; а файлы - статическую, это обьекты действия процессов. Почти весь интерфейс взаимодействия процессов с ядром и друг с другом выглядит как запись/чтение файлов. /* Хотя надо добавить такие вещи, как сигналы, разделяемая память и семафоры. */

    Процессы нельзя путать с программами - одна программа (как правило с различными данными) может выполняться в разных процессах. Процессы можно весьма условно разделить на два типа - задачи и демоны. Задача - это процесс, который выполняет свою работу, стремясь побыстрее закончить ее и завершиться. Демон ждет событий, которые он должен обработать, обрабатывает произошедшие события и снова ждет; завершается он как правило по приказу другого процесса, чаще всего его убивает пользователь, дав команду "kill номер_процесса". /* В этом смысле получается, что интерактивная задача, обрабатывающая ввод пользователя, скорее похожа на демона, чем на задачу. :-) */

    Файловая система


    В старых Unix"ах отводилось 14 букв на имя, в новых это ограничение снято. В директории кроме имени файла находится его идентефикатор inode - целое число, определяющее номер блока, в котором записаны атрибуты файла. Среди них: номер пользователя - хозяина файла; номер группы; количество ссылок на файл (см.далее) даты и время создания, последней модификации и последнего обращения к файлу; атрибуты доступа. Атрибуты доступа содержат тип файла (см.далее), атрибуты смены прав при запуске (см.далее) и права доступа к нему для хозяина, одногрупника и остальных на чтение, запись и выполнение. Право на стирание файла определяется правом записи в вышележащую директорию.

    Каждый файл (но не директория) может быть известен под несколькими именами, но обязательно лежащими на одном разделе. Все ссылки на файл равноправны; файл стирается, когда удаляется последняя ссылка на файл. Если файл открыт (для чтения и/или записи), то число ссылок на него увеличивается еще на единицу; так многие программы, открывающие временный файл, сразу удаляют его, чтобы при аварийном завершении, когда операционная система закрывает открытые процессом файлы, этот временный файл был удален операционной системой.

    Есть еще одна интересная особенность файловой системы: если после создания файла запись в него шла не подряд, а с большими интервалами, то для этих интервалов место на диске не выделяется. Таким образом суммарный обьем файлов в разделе может быть больше обьема раздела, а при удалении такого файла освобождается меньше места, чем его размер.

    Файлы бывают следующих типов:

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

    Специальные файлы, предназначенные для работы с устройствами, как правило, сосредоточены в директории " /dev ". Вот некоторые из них (в номинации FreeBSD):

    • tty* - терминалы, в т.ч.:
      • ttyv - виртуальная консоль;
      • ttyd - DialIn терминал (обычно последовательный порт);
      • cuaa - DialOut линия
      • ttyp - сетевой псевдо-терминал;
      • tty - терминал, с которым ассоциирована задача;
    • wd* - жесткие диски и их подразделы, в т.ч.:
      • wd - жесткий диск;
      • wds - партиция этого диска (именуемая здесь "slice");
      • wds - раздел партиции;
    • fd - floppy-диск;
    • rwd*, rfd* - то же самое, что wd* и fd*, но с последовательным доступом;

    Иногда требуется, чтобы программа, запущенная пользователем, имела не права запустившего ее пользователя, а какие-то другие. В этом случае устанавливается атрибут смены прав на права пользователя - хозяина программы. (В качестве примера приведу программу, которая читает файл с вопросами и ответами и на основании прочитанного тестирует запустившего эту программу студента. Программа должна иметь право читать файл с ответами, а запустивший ее студент - нет.) Так, например, работает программа passwd, с помощью которой юзер может изсменить свой пароль. Юзер может запустить программу passwd, она может произвести изменения в системной базе данных - а пользователь не может.

    В отличие от DOS, в котором полное имя файла выглядит как "диск:\путь\имя", и RISC-OS, в которой оно выглядит "-файловая_система-диск:$.путь.имя" (что вообще говоря имеет свои преимущества), Unix использует прозрачную нотацию в виде "/путь/имя". Корень отсчитывается от раздела, с которого было загружено ядро Unix. Если мы собираемся использовать другой раздел (а на загрузочном разделе как правило находится только самое необходимое для загрузки), используется команда `mount /dev/файл_раздела директория`. При этом файлы и поддиректории, ранее находившиеся в этой директории, становятся недоступными, пока не раздел не будет размонтирован (естественно, все нормальные люди используют для монтирования разделов пустые директории). Производить монтирование и размонтирование имеет право только супервизор.

    При запуске каждый процесс может расчитывать, что для него уже открыты три файла, которые ему известны как стандартный ввод stdin по дескриптору 0; стандартный вывод stdout по дескриптору 1; и стандартный вывод stderr по дескриптору 2. При регистрации в системе, когда пользователь вводит имя и пароль, а ему запускается shell, все трое направлены на /dev/tty; позже любой из них может быть перенаправлен в любой файл.

    Комадный интерпретатор


    В Unix практически всегда входят два командных интерпретатора - sh (shell) и csh (C-подобный shell). Кроме них еще бывают bash (Bourne), ksh (Korn), и другие. Не вдаваясь в подробности, приведу общие принципы:

    Все команды, кроме изменения текущей директории, установки переменных окружения (environment) и операторов структурного программирования - внешние программы. Программы эти как правило располагаются в каталогах /bin и /usr/bin. Программы системного администрирования - в каталогах /sbin и /usr/sbin.

    Команда состоит из имени запускаемой программы и аргументов. Аргументы отделяются от имени команды и друг от друга пробелаим и табуляциями. Некоторые спецсимволы интерпретируются самим shell"ом. Спецсимволами являются " " ` \ ! $ ^ * ? | & ; (еще какие?).

    В одной командной строке можно дать несколько команд. Команды могут быть разделены; (последовательное выполнение команд), & (асинхронное одновременное выполнение команд), | (синхронное выполнение, стандартный вывод stdout первой команды будет подан на стандартный ввод stdin второй).

    Кроме того, можно брать стандартный ввод из файла, включив в качестве одного из аргументов "<файл" (без кавычек); можно направить стандартный вывод в файл, используя ">файл" (файл будет обнулен) или ">>файл" (запись будет произведена в конец файла). Сама программа не получит этого аргумента; чтобы узнать, что ввод или вывод переназначены, программа должна сама предпринять некоторые весьма нетривиальные телодвижения.

    Руководства - man


    Если надо получить информацию по какой-либо команде, дайте команду "man имя_команды". На экран это будет выдаваться через программу "more" - посмотрите, как с ней управляться на вашем Unix"е командой `man more`.

    Дополнительная документация

  • UNIX имеет долгую и интересную историю. Начавшись как несерьезный и почти "игрушечный" проект молодых исследователей, UNIX стал многомиллионной индустрией, включив в свою орбиту университеты, многонациональные корпорации, правительства и международные организации стандартизации.

    UNIX зародился в лаборатории Bell Labs фирмы AT&T более 20 лет назад. В то время Bell Labs занималась разработкой многопользовательской системы разделения времени MULTICS (Multiplexed Information and Computing Service) совместно с MIT и General Electric, но эта система потерпела неудачу, отчасти из-за слишком амбициозных целей, не соответствовавших уровню компьютеров того времени, а отчасти и из-за того, что она разрабатывалась на языке PL/1, а компилятор PL/1 задерживался и вообще плохо работал после своего запоздалого появления. Поэтому Bell Labs вообще отказалась от участия в проекте MULTICS, что дало возможность одному из ее исследователей, Кену Томпсону, заняться поисковой работой в направлении улучшения операционной среды Bell Labs. Томпсон, а также сотрудник Bell Labs Денис Ритчи и некоторые другие разрабатывали новую файловую систему, многие черты которой вели свое происхождение от MULTICS. Для проверки новой файловой системы Томпсон написал ядро ОС и некоторые программы для компьютера GE-645, который работал под управлением мультипрограммной системы разделения времени GECOS. У Кена Томпсона была написанная им еще во времена работы над MULTICS игра "Space Travel" - "Космическое путешествие". Он запускал ее на компьютере GE-645, но она работала на нем не очень хорошо из-за невысокой эффективности разделения времени. Кроме этого, машинное время GE-645 стоило слишком дорого. В результате Томпсон и Ритчи решили перенести игру на стоящую в углу без дела машину PDP-7 фирмы DEC, имеющую 4096 18-битных слов, телетайп и хороший графический дисплей. Но у PDP-7 было неважное программное обеспечение, и, закончив перенос игры, Томпсон решил реализовать на PDP-7 ту файловую систему, над который он работал на GE-645. Из этой работы и возникла первая версия UNIX, хотя она и не имела в то время никакого названия. Но она уже включала характерную для UNIX файловую систему, основанную на индексных дескрипторах inode, имела подсистему управления процессами и памятью, а также позволяла двум пользователям работать в режиме разделения времени. Система была написана на ассемблере. Имя UNIX (Uniplex Information and Computing Services) было дано ей еще одним сотрудником Bell Labs, Брайаном Керниганом, который первоначально назвал ее UNICS, подчеркивая ее отличие от многопользовательской MULTICS. Вскоре UNICS начали называть 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 породило проблему несовместимости его многочисленных версий. Очевидно, что для пользователя весьма неприятен тот факт, что пакет, купленный для одной версии UNIX, отказывается работать на другой версии UNIX. Периодически делались и делаются попытки стандартизации UNIX, но они пока имели ограниченный успех. Процесс сближения различных версий UNIX и их расхождения носит циклический характер. Перед лицом новой угрозы со стороны какой-либо другой операционной системы различные производители UNIX-версий сближают свои продукты, но затем конкурентная борьба вынуждает их делать оригинальные улучшения и версии снова расходятся. В этом процессе есть и положительная сторона - появление новых идей и средств, улучшающих как UNIX, так и многие другие операционные системы, перенявшие у него за долгие годы его существования много полезного.

    На рисунке 5.1 показана упрощенная картина развития UNIX, которая учитывает преемственность различных версий и влияние на них принимаемых стандартов. Наибольшее распространение получили две весьма несовместимые линии версий UNIX: линия AT&T - UNIX System V, и линия университета Berkeley-BSD. Многие фирмы на основе этих версий разработали и поддерживают свои версии UNIX: SunOS и Solaris фирмы Sun Microsystems, UX фирмы Hewlett-Packard, XENIX фирмы Microsoft, AIX фирмы IBM, UnixWare фирмы Novell (проданный теперь компании SCO), и список этот можно еще долго продолжать.

    Наибольшее влияние на унификацию версий UNIX оказали такие стандарты как SVID фирмы AT&T, POSIX, созданный под эгидой IEEE, и XPG4 консорциума X/Open. В этих стандартах сформулированы требования к интерфейсу между приложениями и ОС, что дает возможность приложениям успешно работать под управлением различных версий UNIX.

    Независимо от версии, общими для UNIX чертами являются:

    • многопользовательский режим со средствами защиты данных от несанкционированного доступа,
    • реализация мультипрограммной обработки в режиме разделения времени, основанная на использовании алгоритмов вытесняющей многозадачности (preemptive multitasking),
    • использование механизмов виртуальной памяти и свопинга для повышения уровня мультипрограммирования,
    • унификация операций ввода-вывода на основе расширенного использования понятия "файл",
    • иерархическая файловая система, образующая единое дерево каталогов независимо от количества физических устройств, используемых для размещения файлов,
    • переносимость системы за счет написания ее основной части на языке C,
    • разнообразные средства взаимодействия процессов, в том числе и через сеть,
    • кэширование диска для уменьшения среднего времени доступа к файлам.

    Версия UNIX System V Release 4 - это незаконченная коммерческая версия операционной системы, т.к. в ее кодах отсутствуют многие системные утилиты, необходимые для успешной эксплуатации ОС, например утилиты администрирования или менеджер графического интерфейса. Версия SVR4 является скорее стандартной реализацией кода ядра, вобравшая в себя наиболее популярные и эффективные решения из различных версий ядра UNIX, такие как виртуальная файловая система VFS, отображаемые в память файлы и т.п. Код SVR4 (частично доработанный) лег в основу многих современных коммерческих версий UNIX, таких как HP-UX, Solaris, AIX и т.д.