Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Стоулинг ГЛАВА 2 Обзор ОС.doc
Скачиваний:
30
Добавлен:
11.05.2015
Размер:
510.46 Кб
Скачать

2.7. Современные системы unix

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

А теперь перейдем к рассмотрению некоторых примеров современных сис­тем UNIX.

System V Release 4 (SVR4)

Версия SVR4, разработанная совместно компаниями AT&T и Sun Microsys­tems, сочетает в себе особенности версий SVR3, 4.3 BSD, Microsoft Xenix System V и SunOS. Ядро System V было почти полностью переписано, в результате чего появилась очищенная от всего лишнего, хотя и сложная реализация. Среди но­вых возможностей этой версии следует отметить поддержку обработки данных в реальном времени, наличие классов планирования процессов, динамически рас­пределяемые структуры данных, управление виртуальной памятью, наличие виртуальной файловой системы и ядра с вытеснением.

При создании системы SVR4 объединились усилия как коммерческих, так и академических разработчиков; разработка системы велась, чтобы обес­печить унифицированную платформу для коммерческих реализаций опера­ционной системы UNIX. Эта цель была достигнута, a SVR4 на данный мо­мент, по-видимому, является важнейшей версией UNIX. В ней удачно (с точки зрения конкурентоспособности) сочетаются наиболее важные возмож­ности, реализованные во всех предыдущих системах UNIX. Система SVR4 может работать на компьютерах самых разнообразных типов, начиная с ма­шин, в которых установлены 32-разрядные процессоры, и заканчивая супер­компьютерами; эта система является важнейшей из всех ранее разработан­ных операционных систем. Именно из нее взяты многие примеры, приведен­ные в этой книге для иллюстрации работы системы UNIX.

Рис. 2.17. Ядро современной системы UNIX [VAHA96]

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, куда вошли новая система управления виртуальной памятью, ядро с измененной структурой, а также длинный список улучшений других возможностей.

Linux

История возникновения

Система Linux возникла как вариант операционной системы UNIX, предназначенный для персональных компьютеров с IBM-совместимой архитектурой. Первоначальная версия была написана Линусом Торвальдсом (Linus Torvalds), финским студентом, изучающим теорию вычислительных машин. В 1991 году Торвальдс представил в Internet первую версию системы Linux. С тех пор мно­жество людей, сотрудничая посредством Internet, развивают Linux под руково­дством ее создателя. Благодаря тому что система Linux является бесплатной и можно беспрепятственно получить ее исходный код, она стала первой альтерна­тивой рабочим станциям UNIX, предлагавшимся фирмами Sun Microsystems, Digital Equipment Corp (теперь Compaq) и Silicon Graphics. На сегодняшний день Linux является полнофункциональной системой семейства UNIX, способной ра­ботать на всех этих и других платформах.

Залогом успеха системы Linux является то, что она бесплатно распростра­няется при поддержке Фонда бесплатно распространяемых программ (Free Soft­ware Foundation — FSF). Целью этой организации является создание надежного аппаратно-независимого программного обеспечения, которое было бы бесплат­ным, обладало высоким качеством и пользовалось широкой популярностью сре­ди пользователей. Фонд предоставляет инструменты для разработки программ­ного обеспечения под эгидой общедоступной лицензии GNU (GNU Public License — GPL). Таким образом, система Linux в таком виде, в котором она су­ществует сегодня, является продуктом, появившимся в результате усилий Торвальдса, а затем и многих других его единомышленников во всем мире, и распространяющимся в рамках проекта GNU.

Linux используется не только многими отдельными программистами; она проникла и в корпоративную среду [MANCOO]. В основном это произош­ло благодаря высокому качеству ядра операционной системы Linux, а не из-за того, что эта система является бесплатной. В эту популярную версию вне­сли свой вклад многие талантливые программисты, в результате чего поя­вился впечатляющий технический продукт. К достоинствам системы Linux можно отнести то, что она является модульной и легко настраивается. Бла­годаря этому можно достичь высокой производительности ее работы на са­мых разнообразных аппаратных платформах. К тому же получая в свое рас­поряжение исходный код, производители программного обеспечения могут улучшать качество приложений и служебных программ, с тем чтобы они удовлетворяли определенным требованиям. В этой книге изложены подроб­ности внутреннего устройства ядра Linux.

Модульная структура

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

Для решения этой проблемы система Linux организована в виде набора относительно независимых блоков, которые называются загружаемыми модулями (loadable modules) [GOYE99]. Загружаемые модули Linux имеют две отличитель­ные особенности.

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

  • Стековая организация. Модули организованы в виде определенной иерархиче­ской структуры. Отдельные модули могут выполнять роль библиотек при обращении к ним модулей более высоких уровней в рамках этой структуры; они сами также могут обращаться к модулям на более низких уровнях.

Динамическое связывание [FRAN97] облегчает настройку системы и эконо­мит память, которую занимает ядро. В системе Linux программа пользователя или сам пользователь может загружать или выгружать модули с помощью ко­манд insmod и rmmod. Само ядро управляет работой отдельных функций и по мере надобности загружает нужные модули или выгружает те, нужда в которых уже отпала. Кроме того, стековая организация позволяет задавать зависимости модулей, что дает два основных преимущества.

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

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

На примере, приведенном на рис. 2.18, показаны структуры, которые ис­пользуются операционной системой Linux для управления модулями. На рисун­ке приведен список модулей ядра после загрузки модулей FAT и VFAT. Каждый модуль задается двумя таблицами: таблицей модулей и таблицей символов. В таблицу модулей входят перечисленные ниже элементы.

  • next. Указатель на следующий модуль. Все модули организованы в виде связанного «писка. Этот список начинается псевдомодулем (на рис. 2.18 он не показан).

  • ref. Список модулей, которые используются данным модулем.

  • symtab. Указатель на таблицу символов данного модуля.

  • name. Имя модуля.

  • size. Размер модуля в страницах памяти.

  • addr. Начальный адрес модуля.

  • state. Текущее состояние модуля.

  • *cleanup(). Указатель на программу, которая запускается при выгрузке данного модуля.

Рис. 2.18. Пример списка модулей ядра операционной системы Linux

Таблица символов определяет символы, контролируемые данным модулем и используемые где-либо еще. В таблицу входят такие элементы.

  • size. Полный размер таблицы.

  • n_symbols. Количество символов.

  • n_refs. Количество ссылок,

  • symbols. Таблица символов.

  • references. Список модулей, зависящих от данного.

На рис. 2.18 модуль VFAT загружается после модуля FAT и зависит от него.