Историческая справка
Историю возникновения операционной системы UNIX часто можно встретить во многих книгах, поэтому здесь она приводится лишь схематично — основные этапы развития изображены на рис. 2.14, взятом из [SALU94].9
Изначально операционная система UNIX была разработана компанией Bell Labs и запущена в эксплуатацию в 1970 году на системе PDP-7. Некоторые сотрудники Bell Labs принимали участие также в работе над системой разделения времени, выполняемой в рамках проекта MAC в Массачусетском технологическом институте. В результате выполнения этого проекта возникла операционная система CTSS, а затем Multics. Хотя часто говорят, что система UNIX — это уменьшенная версия Multics, сами разработчики UNIX утверждали, что на них в большей степени повлияла работа над CTSS [RITC78b]. Тем не менее в системе UNIX воплощено много идей, позаимствованных от Multics.
В результате разработки системы UNIX в компании Bell Labs, а впоследствии — ив других местах, появились различные версии этой операционной системы. Первой значительной вехой стал перенос системы UNIX с PDP-7 на PDP-11. Это послужило первым указанием на тот факт, что система UNIX может быть использована в качестве операционной системы на всех компьютерах.
Вторым важным этапом развития этой системы стало то, что она была переписана на языке программирования С. Для того времени это было неслыханно. Считалось, что такая сложная программа, какой является операционная система, для которой важным параметром является время ее работы, должна быть написана только на языке ассемблера. Реализация на языке С продемонстрировала преимущество языка программирования высокого уровня если не для всех, то для подавляющего большинства фрагментов системного кода. В настоящее время почти все реализации операционной системы UNIX написаны на С
V1
Linux
Рис. 2.14. История развития системы UNIX
Ранние версии UNIX были очень популярны в пределах компании Bell Labs. В 1974 году система UNIX была впервые описана в техническом журнале [RITC74], что вызвало к ней большой интерес. Лицензии на UNIX были предоставлены коммерческим организациям и университетам. Версия 6 этой системы, появившаяся в 1976 году, стала первой широко используемой за пределами Bell Labs версией. Следующая версия, версия 7, выпущенная в 1978 году, стала прототипом большинства современных систем UNIX. Наиболее важные системы, не являющиеся продуктами фирмы AT&T, были разработаны в Калифорнийском университете в Беркли и получили название UNIX BSD; они эксплуатировались на машинах PDP и VAX. Фирма AT&T доработала и улучшила эти системы. В 1982 году компания Bell Labs скомбинировала несколько вариантов системы UNIX фирмы AT&T в единую систему, которая появилась в продаже под названием UNIX System III. Впоследствии к этой операционной системе было добавлено несколько новых возможностей, в результате чего появилась система UNIX System V.
Описание
Рис. 2.15 дает общее представление об архитектуре системы UNIX. Лежащее в основе аппаратное обеспечение окружено программным обеспечением операционной системы. Операционную систему часто называют системным ядром или просто ядром, чтобы подчеркнуть ее изолированность от пользователя и приложений. Именно эта часть системы UNIX будет представлять для нас интерес в данной книге. Однако UNIX снабжается различными пользовательскими сервисами и интерфейсами, которые рассматриваются как часть этой системы. Их можно сгруппировать в оболочку, интерфейс и компоненты компилятора С (компилятор, ассемблер, загрузчик). Внешний по отношению к этой части системы уровень состоит из приложений пользователя и интерфейса компилятора С.
Рис. 2.15. Общая архитектура системы UNIX
Рис. 2.16 дает более полное представление о системе. Программы пользователя могут вызывать сервисы операционной системы непосредственно либо с помощью библиотечных программ. Интерфейс системных вызовов позволяет программам высших уровней получить доступ к определенным функциям ядра. Нижние уровни операционной системы содержат простые программы, которые непосредственно взаимодействуют с аппаратным обеспечением. Между этими уровнями находятся компоненты системы; их можно разделить на две основные части, одна из которых относится к управлению процессами, а другая — к вводу-выводу. Подсистема управления процессами отвечает за управление памятью, распределение ресурсов между процессами, диспетчеризацию, синхронизацию и за взаимодействие разных процессов. Файловая система производит обмен данными между памятью и внешними устройствами либо в виде потоков символов, либо в виде блоков с использованием различных драйверов устройств. Поблочная передача данных осуществляется с участием дискового кэша — системного буфера основной памяти, являющегося промежуточным звеном между адресным пространством пользователя и внешним устройством.
Программы пользователя
Рис. 2.16. Ядро традиционной системы UNIX [BACH86]
В этом разделе рассказывается о тех системах UNIX, которые можно назвать традиционными; в [VAHA96] этот термин используется, когда речь идет о System V Release 3 (SVR3), 4.3BSD и более ранних версиях. Ниже приведены общие положения, касающиеся традиционных систем UNIX. Они предназначены для работы на однопроцессорных системах и не обладают достаточной возможностью по защите своих структур данных от одновременного доступа при работе на нескольких процессорах. Их ядра не слишком разносторонни; они поддерживают один тип файловой системы, стратегии распределения ресурсов между процессами и формата исполняемых файлов. Ядро традиционной системы UNIX не является наращиваемым, в нем мало возможностей повторного использования кода. Все это приводило к тому, что при добавлении в очередных версиях UNIX новых возможностей приходилось в больших количествах писать новый код. В результате ядро оказывалось громоздким и немодульным.
СОВРЕМЕННЫЕ СИСТЕМЫ UNIX
В процессе развития операционной системы UNIX появилось много ее реализаций, каждая из них обладала своими полезными возможностями. Впоследствии возникла необходимость создать реализацию, в которой были бы унифицированы многие важные нововведения, добавлены возможности других современных операционных систем и которая бы обладала модульной архитектурой. Архитектура типичного современного ядра системы UNIX изображена на рис. 2.17. В этой архитектуре имеется небольшое ядро, которое может работать с различными модулями, предоставляющими различным процессам операционной системы необходимые функции и сервисы. Каждый внешний круг рисунка соответствует различным функциям и интерфейсу, которые можно реализовать самыми различными способами.
А теперь перейдем к рассмотрению некоторых примеров современных систем UNIX.
System V Release 4 (SVR4)
Версия SVR4, разработанная совместно компаниями AT&T и Sun Microsystems, сочетает в себе особенности версий SVR3, 4.3 BSD, Microsoft Xenix System V и SunOS. Ядро System V было почти полностью переписано, в результате чего появилась очищенная от всего лишнего, хотя и сложная реализация. Среди новых возможностей этой версии следует отметить поддержку обработки данных в реальном времени, наличие классов планирования процессов, динамически распределяемые структуры данных, управление виртуальной памятью, наличие виртуальной файловой системы и ядра с вытеснением.
При создании системы SVR4 объединились усилия как коммерческих, так и академических разработчиков; разработка системы велась, чтобы обеспечить унифицированную платформу для коммерческих реализаций операционной системы UNIX. Эта цель была достигнута, a SVR4 на данный момент, по-видимому, является важнейшей версией UNIX. В ней удачно (с точки зрения конкурентоспособности) сочетаются наиболее важные возможности, реализованные во всех предыдущих системах UNIX. Система SVR4 может работать на компьютерах самых разнообразных типов, начиная с машин, в которых установлены 32-разрядные процессоры, и заканчивая суперкомпьютерами; эта система является важнейшей из всех ранее разработанных операционных систем. Именно из нее взяты многие примеры, приведенные в этой книге для иллюстрации работы системы UNIX.
сетевого устройства Драйвер
телетайп
Рис. 2.17. Ядро современной системы UNIX [VAHA96J
Solaris 2.x
Система Solaris — это версия операционной системы UNIX, разработанная фирмой Sun на основе SVR4. На время написания книги последней вышедшей версией Solaris была версия 2.8. Реализации системы Solaris версии 2 обладают всеми возможностями системы SVR4, а также некоторыми дополнительными, такими, как полная вытесняемость, наличие многопоточного ядра, полнофункциональная поддержка SMP и объектно-ориентированный интерфейс файловых систем. Solaris — это наиболее широко применяемая и пользующаяся коммерческим успехом реализация операционной системы UNIX. Некоторые примеры возможностей операционных систем, встречающиеся в этой книге, взяты из Solaris.
4.4BSD
Важную роль в развитии теории устройства операционных систем сыграла серия версий системы UNIX, разработанных в Калифорнийском университете. Серия 4.xBSD широко используется в академических организациях; она послужила основой для создания многих коммерческих продуктов UNIX. По мнению автора, именно благодаря версиям этой серии UNIX приобрела свою популярность, а многие улучшения этой операционной системы впервые появились в версиях BSD.
Последней версией этой серии, выпущенной в Беркли, является система 4.4BSD. Эта версия является основным обновлением версии 4.3BSD, куда вошли новая система управления виртуальной памятью, ядро с измененной структурой, а также длинный список улучшений других возможностей.