Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12603 / 1647 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 5:

UNIX как операционная среда

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Структура UNIX

Рассмотрим теперь вкратце общее устройство UNIX как операционной среды (более подробное описание архитектуры операционной системы UNIX см. [ 25 ] , [ 37 ] или [ 35 ] ).

Ядро

Центром ОС является, как было сказано, менеджер ресурсов и планировщик задач. Функции этих частей системы востребованы, пока есть хоть одна задача (т. е. всегда), функции к тому же работают в режиме супервизора. В UNIX они составляют ядро системы (kernel). Ядро постоянно находится в памяти, обслуживая непрерывный поток запросов на использование универсальных ресурсов системы: памяти и времени. В ядро UNIX, кроме того, входит реализация сетевых протоколов (были попытки выделить стек протоколов TCP/IP в отдельный модуль, но это многократно снижает производительность, поскольку реализация некоторых особенностей TCP/IP, как ни странно, требует жесткой привязки к внешним устройствам и структурам ядра ). Ядро UNIX предоставляет программам пользователя унифицированный интерфейс к ресурсам компьютера (так называемые системные вызовы, system calls) и содержит всю непростую логику распределения ресурсов по задачам, которые в UNIX называются процессами.

Структура UNIX как операционной среды

Рис. 5.1. Структура UNIX как операционной среды

На самом деле далеко не все, что работает в режиме ядра (супервизора), обязано присутствовать в конкретной системе, запущенной на конкретном компьютере. Функции, отвечающие за работу с самыми разнообразными внешними устройствами (которые отличаются логикой работы), бессмысленно включать в ядро все сразу. Отдельно взятый компьютер не содержит и сотой части всех устройств, поддерживаемых системой. Более того, зачастую весьма трудно автоматически определить марку устройства, подключенного к системе; еще труднее, не имея обширнейшей базы данных по всем устройствам, определить, какому из известных устройств соответствует найденное системой неизвестное, и вообще соответствует ли (т. е. можно ли с ним работать как с несколько иным, но известным). А вот администратору системы достаточно для этого посмотреть маркировку на самой плате или почитать документацию. Так мы приходим к понятию драйвера устройства ("драйвер" по-английски будет handler, а слово driver используется для обозначения устройства, которое что-нибудь крутит или тащит, например лентопротяжного. Однако пишущие по-английски носители других языков часто говорят driver вместо handler... Путаница неизбежна, если не вникать каждый раз в то, о чем речь). Драйверы включаются в состав ядра, если соответствующие им устройства входят (или могут входить) в состав компьютера. Одни драйверы (скажем, шины PCI) есть в системе почти всегда, другие написаны специально для контроллера какого-нибудь экзотического устройства. Существуют драйверы, которые не являются интерфейсной частью внешнего устройства, а реализуют дополнительную функциональность самой системы (скажем, драйвер файловой системы ISO9660, которая используется на лазерных дисках).

В старых версиях UNIX (основанных непосредственно на BSD4.3 или UNIX SystemV различных редакций) все драйверы приходилось заранее прикомпоновывать к ядру (т. е. пользоваться компоновщиком ld, таким же, какой применяется при сборке программ). Более того, запуск ld был своеобразной уступкой коммерческих версий UNIX его некоммерческому духу, потому что на самом деле драйверы компилировались из исходных текстов на языке Си, как и все ядро системы (так было, например, в FreeBSD3.* и в Linux до версии 1.2). Процесс компиляции ядра системы из исходных текстов или компоновки его из объектных модулей носит название сборки (пересборки) ядра и во многих системах практикуется и по сей день.

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

Модули ядра

Если базового ядра все-таки недостаточно, в современных системах многие драйверы можно загружать динамически, из модулей ядра. Ядро, уже работающее в памяти, можно дополнить, загрузив такой модуль из файла специального формата, после чего перекомпоновать ядро на ходу (специальным компоновщиком). В эти модули можно вынести необязательные функциональности системы (например, фильтрацию сетевых пакетов ), после чего базовое ядро станет еще меньше, однако процесс загрузки усложнится, так как некоторые из подгружаемых модулей понадобятся ядру уже при старте системы, когда доступа к файлам может и не быть. Типичный пример: для работы с диском ядру нужен драйвер дискового массива (RAID-контроллера), который вместе с программой загрузки и компоновки модулей на этом массиве и находится. Разные системы выходят из этой ситуации по-разному.

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

Демоны

Прочие части UNIX запускаются уже как процессы в режиме пользователя. С ядром взаимодействуют функциональные подсистемы (службы), то есть наборы программных средств, выполняющих определенную функцию (например, система печати, система передачи почты и т. д.). Управляющий центр функциональной подсистемы - так называемый демон (daemon, в переводах с греческого называемый "даймон"). Как сказано в "Руководстве системного администратора UNIX " ( [ 33 ] ), "Даймон не служит ни злу, ни добру, он только определяет характер и личность человека. Он больше похож на ангела-хранителя...". Наличие рогов и трезубца у демонов BSD еще ни о чем не говорит, например, демона FreeBSD зовут совсем по-человечески - Чак (Chuck). Существо, появляющееся в Linux, хоть и зовется Такс (Tux), не имеет ни рогов, ни трезубца, потому что "по национальности" - пингвин. Демон - это процесс, который запускается при старте UNIX для обслуживания запросов к функциональной подсистеме. Пользователю запускать его незачем, он работает всегда. Именно демон обменивается данными с ядром системы, часто он держит очередь пользовательских запросов, работает с сетью и т. д.

Утилиты

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

Слово " утилиты " (utilities) буквально означает "полезности". Утилиты - это программы, которые могут понадобиться при решении всевозможных задач. Если есть высокая вероятность, что некоторая программа может понадобиться более чем одному пользователю для решения более чем одной задачи, то ее стоит включить в систему. Таких пользовательских утилит в UNIX еще больше, чем системных (чем определенно нарушается принцип У контекста; о том, как устранить это нарушение, речь пойдет в лекции 6). Множество пользовательских утилит занимается преобразованием текста, так как текстовый файл - универсальное пространство для создания умопостижимых моделей. Немало утилит помогает при разработке решений: компиляторы, отладчики, редакторы диаграмм, трассировщики и т. д. Почти всеми пользовательскими утилитами пользуется система, потому что при проективном подходе вообще невозможно провести четкую границу между системным и пользовательским наполнением. К обеим категориям, например, относятся утилиты для работы с файлами и файловой системой или интерпретатор командной строки (shell). На shell написаны все системные сценарии, поскольку он представляет собой еще и удобный высокоуровневый язык программирования.

Программные продукты и пакеты

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

Для того чтобы оперативно добавлять программный продукт в систему или удалять его оттуда, необходимо заранее договориться о размещении в файловой системе всех входящих в него файлов. Запомнив каждый файл с полным именем, мы получим архив, целиком определяющий расположение программного продукта в системе. Такой архив в UNIX называется пакетом . Мы можем устанавливать пакет в систему и удалять его, зная, что записываем и удаляем файлы, принадлежащие только ему. В пакете могут храниться не только программные продукты, но и вообще любые "кирпичики", из которых можно складывать систему: утилиты, драйверы, документация, шрифты и все остальное. Если при установке или удалении пакета нужно проделать какие-нибудь действия (например, зарегистрировать устанавливаемый шрифт), к нему прилагаются установочный сценарий и сценарий удаления.

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

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Max Akt
Max Akt

Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает.

Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started