разработанных
в корпорации AT&T, в один, получивший коммерческое название UNIX версия
III.
В дальнейшем фирма Bell Laboratories добавила в версию III несколько
новых
особенностей, назвав новый продукт UNIX версия V (((), и эта версия
стала
официально распространяться корпорацией AT&T с января 1983 года. В то
же
время сотрудники Калифорнийского университета в Бэркли разработали
вариант
системы UNIX, получивший название BSD 4.3 для машин серии VAX и
отличающийся некоторыми новыми, интересными особенностями.
К началу 1984 года система UNIX была уже инсталлирована
приблизительно
на 100000 машин по всему миру, при чем на машинах с широким диапазоном вы-
числительных возможностей - от микропроцессоров до больших ЭВМ - и
разных
изготовителей. Ни о какой другой операционной системе нельзя было бы
сказать
того же. Популярность и успех системы UNIX объяснялись несколькими причина-
ми:
. Система написана на языке высокого уровня, благодаря чему ее легко
читать, понимать, изменять и переносить на другие машины. По оценкам,
сделанным Ричи, первый вариант системы на Си имел на 20-40 % больший
объем и работал медленнее по сравнению с вариантом на ассемблере,
однако преимущества ис- пользования языка высокого уровня намного
перевешивают недостатки [Ritchie 78b], стр. 1965).
. Наличие довольно простого пользовательского интерфейса, в котором имеется
возможность предоставлять все необходимые пользователю услуги.
. Наличие элементарных средств, позволяющих создавать сложные программы
из более простых.
. Наличие иерархической файловой системы, легкой в сопровождении и эффектив-
ной в работе.
. Обеспечение согласования форматов в файлах, работа с последовательным
потоком байтов, благодаря чему облегчается чтение прикладных программ.
. Наличие простого, последовательного интерфейса с периферийными устройства-
ми.
. Система является многопользовательской, многозадачной; каждый
пользователь может одновременно выполнять несколько процессов.
. Архитектура машины скрыта от пользователя, благодаря этому облегчен про-
цесс написания программ, работающих на различных конфигурациях
аппаратных средств.
Простота и последовательность вообще отличают систему UNIX и
объясняют
большинство из вышеприведенных доводов в ее пользу.
Хотя операционная система и большинство команд написаны на Си,
система
UNIX поддерживает ряд других языков, таких как Фортран, Бейсик,
Паскаль,
Ада, Кобол, Лисп и Пролог. Система UNIX может поддерживать любой язык прог-
раммирования, для которого имеется компилятор или интерпретатор, и обеспечи-
вать системный интерфейс, устанавливающий соответствие между пользователь-
скими запросами к операционной системе и набором запросов, принятых в UNIX.
2. СТРУКТУРА СИСТЕМЫ
На Рисунке 1.1 изображена архитектура верхнего уровня системы UNIX. Тех-
нические средства, показанные в центре диаграммы, выполняют функции, обеспе-
чивающие функционирование операционной системы. Операционная система
взаимодействует с аппаратурой непосредственно((((), обеспечивая
обслуживание программ и их независимость от деталей аппаратной
конфигурации. Если представить систему состоящей из пластов, в нейможно
выделить системное ядро, изолированное от пользовательских
[pic]
Рисунок 1.1. Архитектура системы UNIX
программ. Поскольку программы не зависят от аппаратуры, их легко
переносить
из одной системы UNIX в другую, функционирующую на другом комплексе техни-
ческих средств, если только в этих программах не подразумевается работа
с
конкретным оборудованием. Например, программы, расчитанные на
определенный
размер машинного слова, гораздо труднее переводить на другие машины по срав-
нению с программами, не требующими подобных установлений.
Программы, подобные командному процессору shell и редакторам (ed и vi)
и
показанные на внешнем по отношению к ядру слое, взаимодействуют с ядром
при
помощи хорошо определенного набора обращений к операционной системе.
Обращения к операционной системе понуждают ядро к выполнению различных
операций, которых требует вызывающая программа, и обеспечивают обмен данны-
ми между ядром и программой. Некоторые из программ, приведенных на рисунке,
в стандартных конфигурациях системы известны как команды, однако на одном
уровне с ними могут располагаться и доступные пользователю программы, такие
как программа a.out, стандартное имя для исполняемого файла, созданного
компилятором с языка Си. Другие прикладные программы располагаются выше
указанных программ, на верхнем уровне, как это показано на рисунке.
Например, стандартный компилятор с языка Си, cc, располагается на самом
внешнем слое: он вызывает препроцессор для Си, ассемблер и загрузчик
(компоновщик), т.е. отдельные программы предыдущего уровня. Хотя на
рисунке приведена двухуровневая иерархия прикладных программ, пользователь
может расширить иерархическую структуру на столько уровней, сколько
необходимо. В самом деле, стиль программирования, принятый в системе UNIX,
допускает разработку комбинации программ,выполняющих одну и ту же, общую
задачу.
Многие прикладные подсистемы и программы, составляющие верхний
уровень
системы, такие как командный процессор shell, редакторы, SCCS (система обра-
2ботки исходных текстов программ) и пакеты программ подготовки
документации,
постепенно становятся синонимом понятия "система UNIX". Однако все они поль-
зуются услугами программ нижних уровней и в конечном счете ядра с
помощью
набора обращений к операционной системе. В версии V принято 64 типа обраще-
ний к операционной системе, из которых немногим меньше половины
используются
часто. Они имеют несложные параметры, что облегчает их использование, пре-
доставляя при этом большие возможности пользователю. Набор обращений к опе-
рационной системе вместе с реализующими их внутренними алгоритмами составля-
ют "тело" ядра, в связи с чем рассмотрение операционной системы UNIX
сводится к подробному изучению и анализу обращений к системе и их
взаимодействия между собой. Короче говоря, ядро реализует функции, на
которых основывается выполне-ние всех прикладных программ в системе UNIX, и
им же определяются эти функции. Использование терминов "система
UNIX","ядро" или "система", имеется ввиду ядро операционной системы UNIX,
что и должно вытекать из контекста.
3. ОБЗОР С ТОЧКИ ЗРЕНИЯ ПОЛЬЗОВАТЕЛЯ
3.1 Файловая система
Файловая система UNIX характеризуется:
. иерархической структурой,
. согласованной обработкой массивов данных,
. возможностью создания и удаления файлов,
. динамическим расширением файлов,
. защитой информации в файлах,
. трактовкой периферийных устройств (таких как терминалы и ленточные ус-
тройства) как файлов.
Файловая система организована в виде дерева с одной исходной
вершиной,
которая называется корнем (записывается: "/"); каждая вершина в
древовидной
структуре файловой системы, кроме листьев, является каталогом файлов, а фай-
[pic]
Рисунок 1.2. Пример древовидной структуры файловой системы
лы, соответствующие дочерним вершинам, являются либо каталогами, либо обыч-
ными файлами, либо файлами устройств. Имени файла предшествует указание
пути
поиска, который описывает место расположения файла в иерархической
структуре
файловой системы. Имя пути поиска состоит из компонент, разделенных
между
собой наклонной чертой (/); каждая компонента представляет собой набор
символов, составляющих имя вершины (файла), которое является уникальным
для каталога (предыдущей компоненты), в котором оно содержится. Полное имя
пути поиска начинается с указания наклонной черты и идентифицирует
файл (вершину), поиск которого ведется от корневой вершины дерева
файловой системы с обходом тех ветвей дерева файлов, которые соответствуют
именам отдельных компонент. Так, пути "/etc/passwd", "/bin/who" и
"/usr/src/cmd/who.c" указывают на файлы, являющиеся вершинами дерева,
изображенного на Рисунке 1.2, а пути "/bin/passwd" и "/usr/ src/date.c"
содержат неверный маршрут. Имя пути поиска необязательно должно начинаться
с корня, в нем следует указывать маршрут относительно текущего для
выполняемого процесса каталога, при этом предыдущие символы "наклонная
черта" в имени пути опускаются. Так, например, если мы находимся в
каталоге "/dev", то путь "tty01" указывает файл, полное имя пути поиска для
которого "/dev/tty01".
Программы, выполняемые под управлением системы UNIX, не содержат
никакой
информации относительно внутреннего формата, в котором ядро хранит
файлы
данных, данные в программах представляются как бесформатный поток
байтов.
Программы могут интерпретировать поток байтов по своему желанию, при
этом
любая интерпретация никак не будет связана с фактическим способом
хранения
данных в операционной системе. Так, синтаксические правила, определяющие за-
дание метода доступа к данным в файле, устанавливаются системой и
являются
едиными для всех программ, однако семантика данных определяется
конкретной
программой. Например, программа форматирования текста troff ищет в
конце
каждой строки текста символы перехода на новую строку, а программа
учета
системных ресурсов acctcom работает с записями фиксированной длины.
Обе
программы пользуются одними и теми же системными средствами для осуществле-
ния доступа к данным в файле как к потоку байтов, и внутри себя
преобразуют
этот поток по соответствующему формату. Если любая из программ
обнаружит,
что формат данных неверен, она принимает соответствующие меры.