Основные черты UNIX, определяющие ее долгожительство.
1. Код ОС написан на языке высокого уровня С, что сделало ее простой для понимания, изменений и переноса на другие платформы.
Система на языке С имеет на 20-40% больший размер, а производительность ее на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость сыграли решающую роль в ее популярности.
2. UNIX – многозадачная многопользовательская система с широким спектром услуг. Один мощный сервер может обслужить запросы большого количества пользователей. Система может выполнять различные функции – работать как вычислительный сервер, обслуживающий сотни пользователей, как сервер базы данных, как сетевой сервер, поддерживающий важнейшие сервисы сети (telnet, ftp, электронную почту, службу имен DNS и т. д.), или даже как сетевой маршрутизатор.
3. Наличие стандартов. Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без большого труда может обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным.
4. Простой, но мощный модульный пользовательский интерфейс. Имеется ряд утилит, каждая из которых решает узкую специализированную задачу, из них можно конструировать сложные комплексы.
5. Использование единой, легко обслуживаемой иерархической файловой системы. Файловая система – это не только доступ к данным, хранящимся на диске. Через унифицированный интерфейс файловой системы осуществляется доступ к терминалам, принтерам, магнитным лентам, сети и даже к памяти.
6. Большое количество приложений, в том числе свободно распространяемых, начиная от простейших текстовых редакторов и заканчивая мощными системами управления базами данных.
ОС UNIX многозадачная система, предназначенная для работы на станциях, имеющих множество подключенных терминалов. Для обслуживания терминалов в мультипрограммном режиме требуется большой объем оперативной и внешней памяти (8 Мбайт ОЗУ, 1-100 Гбайт ПЗУ) и достаточное быстродействие. В качестве терминалов могут быть различные периферийные устройства: ПК, модемы, факсы, принтеры. Программы могут запускаться с терминала и использовать все доступные в данный момент ресурсы рабочей станции. Поэтому нет необходимости доводить ПК до большой мощности. Особенно эффективны UNIX-сервера для распределенной обработки данных. Для них разработаны СУБД типа Oracle, Informix, которые информацию, разбросанную по разным рабочим станциям, разными знаками представляют одной единой БД.
При обработке больших массивов информации используется интерфейс клиент-сервер, когда пользователь работает только с той информацией, которая его интересует, а не со всем объемом.
ОС UNIX является альтернативой вычислительной сети. Скорость передачи данных на порядок выше чем в ВС.
Подключение ПК в локальную сеть с UNIX-серверами осуществляется по протоколу TCP/IP с помощью пакета PC-NFS. При этом пользователи могут использовать:
а) рабочую станцию как файл-сервер.
б) могут эмулировать на ПК терминал UNIX-сервера (режим TELNET).
в) организовать систему клиент-сервер (ПК формирует SQL-запросы, UNIX-сервер их обрабатывает).
г) непосредственный обмен файлами между ПК по протоколу FTP.
Процесс – одно из основных понятий этой системы. Процесс представляет собой совокупность выполняющейся программы или нескольких программ, которые вызываются при исполнении команды, и данных, обрабатываемых программой: здесь имеются в виду не машинные команды, а системные. Все действия в ОС UNIX определены как процессы. Функционирование ОС можно рассматривать как взаимодействие нескольких связанных процессов. Характерным является наличие механизмов межпроцессорной связи для организации взаимодействия параллельных процессов (каналы, сигналы, очереди сообщений, семафоры, разделение сегментов памяти). Их тип можно выбирать с учетом специфики решаемых задач. Программа, построенная из одновременно выполняющихся процессов называется параллельной, что значительно сокращает время выполнения задачи. Положенные в основу UNIX механизмы поддерживают многопроцессорность. При наличии одного процессора процессы выполняются в режиме разделения времени.
С каждым процессом связаны открытые файлы:
- стандартного ввода (дескриптор 0) – терминал или файл.
- стандартного вывода (дескриптор 1) – терминал или файл.
- сообщений об ошибках (дескриптор 2) – терминал или файл.
Часть процессов не может быть размещена в оперативной памяти из-за ее ограниченного объема и перемещается в область внешней памяти (свопинг). Процесс для выполнения выбирается на основании вычисленного приоритета.
При выполнении программы в среде ОС UNIX взаимодействуют ядро, оболочка Shell и прикладные программы.
Ядро – управляющая программа, взаимодействующая с аппаратными средствами. Ее функции:
1. Управление памятью и процессором.
2. Обслуживание внешних устройств.
3. Обслуживание исполнения всех программ.
Все действия, связанные с вводом-выводом и вызовом программ, выполняются в ОС UNIX с помощью системных вызовов. Системные вызовы реализуют интерфейс между программами и ядром (программный интерфейс).
Интерпретатор команд Shell (оболочка) обеспечивает интерфейс пользователь-ядро при введении пользователем команд с терминала (командный интерфейс). Shell интерпретирует такие команды, вводимые из командного файла.
Существуют различные типы интерпретаторов команд Shell: B-Shell фирмы Telephone Laboratories – бурновский интерпретатор; C-Shell – новая редакция B-Shella: V-Shell – визуальный Shell и т. д.
Shell выполняет следующие функции:
- в начале работы выводит на терминал знак-приглашение;
- интерпретирует введенную с терминала или из файла строку (командная строка содержит имя команды, может включать обозначаемые знаком минус флаги (опции), задающие различные варианты работы команды, параметры и специальные символы – метасимволы);
- ищет файл команды, вызывает его на выполнение и передает его параметры;
- выдает сообщение об ошибке, если что-нибудь выполняется неверно;
- после выполнения команды выдаем на терминал знак-приглашение.
Shell является также языком программирования, на котором пишут командные файлы (Shell-файлы). Язык содержит конструкции, характерные для языка высокого уровня: условный оператор, операторы циклов, команду ветвления по многим направлениям, команду управления прерыванием и другие.
При входе в ОС пользователь получает копию интерпретатора Shell в качестве родительского процесса. Далее после ввода команды пользователем создается порожденный процесс. Это называется порождением процесса, а порожденный процесс – процессом-потомком или дочерним процессом. То есть после запуска ОС каждый новый процесс функционирует только как процесс-потомок уже существующего процесса.
Встроенные команды интерпретатор выполняет сам(без создания нового процесса), в остальных случаях вызывается файл команды для выполнения и анализа.
Если файл команды является скомпилированной и скомпонованной программой, то порожденный процесс будет выполнять файл команды и родительский процесс будет ждать завершения процесса-потомка. Программист может создавать свои собственные команды, помещая их в файл.
Программные средства ОС UNIX позволяют динамически порождать процессы и организовывать взаимодействие параллельных процессов.
Для порождения процессов используются системные вызовы.
Атрибутами процесса являются: идентификатор процесса (каждый процесс имеет уникальный номер); идентификатор родительского процесса; набор открытых файлов; текущий каталог, переменные округления; идентификаторы пользователя и группы (пользователь, принадлежащий некоторой группе).
Порожденный процесс наследует у родительского большинство атрибутов.
Механизм коллективного использования файлов позволяет объединять действия пользователей. Возможность работы в составе локальных и распределенных сетей разных UNIX-обеспечивается наличием стандартных сетевых и телекоммуникационных средств. В UNIX периферийные устройства называются именами специальных файлов и обмен информации с ними осуществляется также как с файлами. Пользователь может переводить выдачу результатов работы программы с одного ПУ на другие. Можно послать информацию по E-mail другому пользователю. Есть так называемая прямая связь с пользователем и средства общения с пользователями, работающими в другой системе.
Архитектура UNIX.
Обычно модель системы UNIX представляют в виде двухуровневой конструкции:
В центре находится ядро системы (kernel). Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры.
Ядро имеет набор услуг, предоставленных прикладными программами. К услугам ядра относятся операции ввода-вывода (открытия, чтения, записи и управления файлами), создания и управления процессами, их синхронизации и межпроцессорного взаимодействия. Все приложения запрашивают услуги ядра посредством системных выводов.
Второй уровень составляют приложения или задачи, как системные, определяющие функциональность системы, так и прикладные, обеспечивающие пользовательский интерфейс UNIX. Однако, несмотря на внешнюю разнородность приложений, схемы их взаимодействия с ядром одинаковы.
Рассмотрим отдельные компоненты ядра системы:
Ядро системы.
Ядро обеспечивает базовую функциональность операционной системы: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.
Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формы запросов на услуги. Процесс запрашивает услугу посредством системного вызова определенной процедуры ядра, внешне похожего на обычный вызов библиотечной функции. Ядро от имени процесса выполняет запрос и возвращает процессу необходимые данные.
main ()
{ int fd;
char buf [80];
/* откроем файл – получим ссылку (файловый дескриптор) fd*/
fd = open (“file1”,”2+”); режим открытия (для чтения и записи)
/* считаем в буфер buf 80 символов */
read (fd, buf, sizeoff(buf));
/* Закроем файл */
close (fd);
}
В приведенном примере программа открывает файл, считывает из него данные и закрывает этот файл. При этом операции открытия, чтения и закрытия файла выполняются ядром по запросу задачи, и функции open(2), read(2) и close(2) являются системными вызовами.
Структура ядра представлена на схеме:
Ядро состоит из трех основных подсистем:
1. Файловая подсистема.
2. Подсистема управления процессами и памятью.
3. Подсистема ввода-вывода.
Файловая подсистема.
Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал.
Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла, а также выполняет запись/чтение данных файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы (в том числе и доступ к периферийным устройствам), права доступа к файлам определяют привилегии пользователя в системе.
Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.