Семейство операционных систем UNIX

Общая характеристика семейства операционных систем UNIX, особенности архитектуры семейства ОС UNIX

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

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

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

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

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

• одни и те же механизмы работают в отношении программно и аппаратно ини­циируемых прерываний.

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

Важным, хотя и простым с позиций его реализации, является тот факт, что сис­тема UNIX предоставляет пользователям возможность направить выход одной программы непосредственно на вход другой (речь идет о программных каналах (pipe). В результате большие программные системы можно создавать путем ком­позиции имеющихся небольших программ, а не путем написания новых, что в большинстве случаев упрощает задачу. UNIX-системы существуют уже 30 лет, и к настоящему времени имеется чрезвычайно большой набор легко переноси­мых из системы в систему отлично отлаженных и проверенных временем прило­жений.

UNIX-системы поставляются с большим набором системных и прикладных программ, включающим редакторы текстов, программируемые интерпретаторы командного языка, компиляторы с нескольких популярных языков программи­рования, включая С, C++, ассемблер, PERL, FORTRAN и многие другие, компоновщики (редакторы межпрограммных связей), отладчики, многочисленные библиотеки системных и пользовательских программ, средства сортировки и ве­дения баз данных, многочисленные административные и обслуживающие про­граммы. Для абсолютного большинства этих программ имеется документация, включающая в себя такие важные документы, как исходные (как правило, снаб­женные хорошими комментариями) тексты программ. Кроме этого, описание и документация в большей части доступны пользователю непосредственно за эк­раном в интерактивном режиме. Используется иерархическая файловая система с полной защитой, работа со съемными томами, обеспечивается независимость от устройств.

Центральной частью системы UNIX является ядро (kernel).

Основные понятия системы UNIX

Виртуальная машина

Система UNIX – многопользовательская. Каждому пользователю после регист­рации (входа в систему) предоставляется виртуальный компьютер, в котором есть все необходимые ресурсы: процессор (процессорное время выделяется на основе «карусельной» диспетчеризации (RR – round robin) и с использованием динамических приоритетов с тем, чтобы обеспечить равенство в обслуживании), память, устройства, файлы. Текущее состояние такого виртуального компьютера, предоставляемого пользователю, называется образом. Можно сказать, что процесс – это выполнение образа. Образ состоит из:

• образа памяти;

• значений общих регистров процессора;

• состояния открытых файлов;

• текущей директории (каталога файлов) и другой информации.

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

Пользователь

UNIX предназначен для мультитерминальной работы. Чтобы начать работать, человек должен «войти» в систему, введя со свободного терминала свое учетное имя (account name) и, возможно, пароль (password). Человек, зарегистрированный в учетных файлах системы и, следовательно, имеющий учетную запись (account), называется зарегистрированным пользователем системы. Регистрацию новых пользователей обычно выполняет администратор системы. Пользователь не может изменить свое учетное имя, но может установить и/или изменить свой пароль. Пароли хранятся в отдельном файле в закодированном виде.

Все пользователи ОС UNIX явно или неявно работают с файлами. Файловая система ОС UNIX имеет древовидную структуру. Промежуточными узлами дерева являются каталоги со ссылками на другие каталоги или файлы, а листья дерева соответствуют файлам или пустым каталогам. Каждому зарегистрирован­ному пользователю соответствует некоторый каталог файловой системы, который называется «домашним» (home) каталогом пользователя. При входе в систему пользователь получает неограниченный доступ к своему домашнему каталогу и всем каталогам и файлам, содержащимся в нем. Пользователь может создавать, удалять и модифицировать каталоги и файлы, содержащиеся в домашнем ката­логе. Потенциально возможен доступ и ко всем другим файлам, однако он может быть ограничен, если пользователь не имеет достаточных привилегий.

Интерфейс пользователя

Традиционный способ взаимодействия пользователя с системой UNIX основы­вается на использовании командных языков. После входа пользователя в систе­му для него запускается один из командных интерпретаторов. Обычно в системе поддержива­ется несколько командных интерпретаторов с похожими, но различающимися своими возможностями командными языками. Общее название для любого ко­мандного интерпретатора ОС UNIX – shell (оболочка), поскольку любой интерпретатор представляет внешнее окружение ядра системы.

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

Командные языки, используемые в ОС UNIX, достаточно просты, чтобы новые пользователи могли быстро начать работать, и достаточно мощны, чтобы можно было использовать их для написания сложных программ. Последняя возмож­ность опирается на механизм командных файлов (shell scripts), которые могут содержать произвольные последовательности командных строк. При указании имени командного файла вместо очередной команды интерпретатор читает файл строка за строкой и последовательно интерпретирует команды.

Привилегированный пользователь

Ядро ОС UNIX идентифицирует каждого пользователя по его идентификатору (UID – user identifier), уникальному целому значению, присваиваемому пользо­вателю при регистрации в системе. Кроме того, каждый пользователь относится к некоторой группе пользователей, которая также идентифицируется некоторым целым значением (GID – group identifier). Значения UID и GID для каждого за­регистрированного пользователя сохраняются в учетных файлах системы и при­писываются процессу, в котором выполняется командный интерпретатор, запу­щенный при входе пользователя в систему. Эти значения наследуются каждым новым процессом, запущенным от имени данного пользователя, и используют­ся ядром системы для контроля правомочности доступа к файлам, выполнения программ и т. д.

Очевидно, что администратор системы, который тоже является зарегистрирован­ным пользователем, должен обладать большими возможностями, чем обычные пользователи. В ОС UNIX эта задача решается путем выделения единственного нулевого значения UID. Пользователь с таким UID называется суперпользова­телем (superuser) или root. Он имеет неограниченные права на доступ к любому файлу и на выполнение любой программы. Кроме того, такой пользователь име­ет возможность полного контроля над системой. Он может остановить ее и даже разрушить.

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

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

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

Командная строка состоит из имени команды (то есть имени выполняемого фай­ла), за которым следует список аргументов, разделенных пробелами. Оболочка разбивает командную строку на компоненты. Указанный в команде файл загру­жается, и ему обеспечивается доступ к заданным в команде аргументам.

Любой командный язык семейства shell фактически состоит из трех частей:

1) служебных конструкций, позволяющих манипулировать с текстовыми стро­ками и строить сложные команды на основе простых команд;

2) встроенных команд, выполняемых непосредственно интерпретатором команд­ного языка;

3) команд, представляемых отдельными выполняемыми файлами.

В свою очередь, набор команд последнего вида включает стандартные команды (системные утилиты) и команды, созданные пользовате­лями системы. Для того чтобы выполняемый файл, разработанный пользовате­лем ОС UNIX, можно было запускать как команду shell, достаточно определить в одном из исходных файлов функцию с именем main. Если употребить в качестве имени команды имя такого выполняемого файла, команд­ный интерпретатор создаст новый процесс и запустит в нем указанную выпол­няемую программу начиная с вызова функции main.

Процессы

Процесс в ОС UNIX понимается в классическом смысле этого термина, то есть как программа, выполняемая в собственном виртуальном адресном пространст­ве. Когда пользователь входит в систему, автоматически создается процесс, в ко­тором выполняется программа командного интерпретатора. Если командному интерпретатору встречается команда, соответствующая выполняемому файлу, то он создает новый процесс и запускает в нем соответствующую программу, начи­ная с функ­ции main. Эта запущенная программа, в свою очередь, может создать процесс и запустить в нем другую программу (она тоже должна содержать функ­цию main) и т. д.

Наши рекомендации