Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Развитие и архитектура UNIX




ВОПРОС 2

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

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

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

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

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

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

Прочие части UNIX запускаются уже как процессы в режиме пользователя. С ядром взаимодействуют функциональные подсистемы (службы), тот есть наборы программных средств, выполняющих определенную функцию (например, система печати, система передачи почты и т.д.). Управляющий центр функциональной подсистемы – так называемый демон (daemon, в переводах с греческого называемый «даймон»). Демон – это процесс, который запускается при старте UNIX для обслуживания запросов к функциональной подсистеме. Пользователю запускать его незачем, он работает всегда. Именно демон обменивается данными с ядром системы, часто он держит очередь пользовательских запросов, работает с сетью и т.д.

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

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

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

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

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

Для диалога с пользователем в UNIX выбран интерфейс командной строки. Человек вводит команду с клавиатуры, машина его выполняет. Команды могут быть совсем короткими (одно нажатие), могут содержать имя запускаемой утилиты несколько коротких параметров, а могут быть даже небольшими программами (символов в сто). Команды большего размера неудобно вводить и справлять прямо в командной строке, их стоит складывать в файл, называемый сценарием (script). Такой сценарий тоже считается программой, его можно вызывать по имени, передавать параметры и т.д. Все эти команды распознает и выполняет интерпретатор командной строки (shell, «оболочка»), в которой встроены специальные возможности, помогающие очень быстро набирать командную строку и оперативно объединять и использовать результаты выполнения других программ.

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

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

В роли задач в UNIX выступают процессы. Процесс – это программа, запущенная пользователем, которая находится в памяти., как полагается задаче, потребляет ресурсы: выполняется, требует памяти обменивается данными с системой, внешними устройствами и другими процессами. При запуске процесс получает уникальный идентификатор процесса (Process Identifyer, PID), по которому он становится доступен другим процессам и планировщику. Главное отличие планировщика UNIX заключается в том, что каждая задача из очереди работает в течение всего отведенного ей промежутка времени, только если ей есть чем заняться. Если задача к этому времени работать не может (например, ожидает завершения операции ввода/вывода, или сигнала, или освобождения какого-либо ресурса), она из начала очереди перемещается в конец «очереди для тех, кто без очереди» или очреди «спящих» задач. Как только какая-нибудь задача из очереди спящих просыпается, ей тут же отводится место в начале обычной очереди. Таким образом максимально сокращается время простоя (idle) системы, если конечно, выполняемых задач достаточно для того, чтобы полностью ее загрузить. Сверх того процессы в UNIX могут иметь разные приоритеты, сообразно которым идет планирование очередного запуска процесса (напрмер, поностью отработав свой промежуток времени, процесс может помещаться не в конец очереди).

Между собой процессы могут обмениваться данными не только стандартными пользовательскими средствами (посредством файлов, каналов или сокетов, но и с помощью более быстрых системных, именуемых средствами межпроцессного взаимодействия (Interprocess Communication, IPC). Процессы могут заказать у системы общую память (тогда часть адресного пространства каждого будет ссылаться на один и тот же кусок реальной памяти), для индикации занятости ресурса использовать семафор (система гарантирует, что запрошенный ресурс действительно будет свободен, пока процесс не откроет семафор) и посылать друг другу сигналы и сообщения.

 

Принципы формирования проективных систем:

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

- принцип минимизации затрат (З) последовательно реализован в интерфейсе командной строки. В соответствии с этим принципом пользователь всякий раз решает некую мыслительную задачу, с тем чтобы быстро реализовать ее решение на выбранном им командном языке (чаще всего это shell, но и для иных задач полезнее sed или awk, а для задач побольше perl, python, tcl, ruby и т.п.); при этом дальнейшее использование этого решения можно целиком доверить компьютеру (написать сценарий). Как следует из З, такие решения не всегда можно воспринять «с первого взгляда», их надо «читать», с другой стороны, читать их приходится несравненно реже, чем последовательность писать (прямое построение проекта). Большинство демонов и утилит UNIX пользуется для настройки своей работы текстовыми файлами, т.е. управляется проектами

- принцип умопостижимости контекста (У) включает правило, которому очень тяжело следовать: «7+-2». Добавляя в систему из семи элементов еще пять, мы перегружаем контекст. По-хорошему, после этого требуется реструктуризация перегруженного уровня системы, а это может повлечь за собой изменение структуры всей системы (что есть. В сущности, балансировка Б-дерева). Поэтому однотипных частей обычно набирается до дюжины, прежде чем разработчики решаются всерьез заняться реструктуризацией. В UNIX редко встречаются перегруженные неструктурированные инструментарии: если человек создает какой-либо предмет для того, чтобы им пользоваться, он делает его удобным. Зато другие правила соблюдаются гораздо строже. Практически все демоны и приложения UNIX используют так называемые файлы настроек (или rc-файлы, от resource container. Это текстовые файлы (требование human readable), и, если количество содержащейся в них информации достаточно велико, они разбиты на секции и подсекции, чтобы соблюсти требование human writeable/ В самых сложных из них, например в файле настройки Web-сервера Apache, предусмотрена инструкция include, чтобы помещать различные по контексту группы настроек в разные файлы и даже в отдельные каталоги. В текстовом виде хранятся и системные журналы, и документация. Множество средств переработки и фильтрации текстов позволяет создать умопостижимый контекст, разумно ограничивая большие объемы данных и отсекая заведомо ненужное.

- принцип персональной ответственности (О) предполагает, что чем больше человек знает о системе, тем больше у него возможностей влиять на ее поведение. С другой стороны, если человек совершает некоторое действие, значит, он знает, что делает, и берет на себя ответственность за это действие. Примеры с удалением всех файлов – они наглядно демонстрируют вторую часть этого принципа (правило «захотел – получил». Вообще, составляя всякий раз команду в shell, пользователь должен быть уверен в ее правильности или по крайней мере безвредности. Команда при этом не обязана быть «значком», т.е. может легко читаться, но не являть собою обозначение какого-либо конкретного решения. Стало быть, пользователь-новичок должен перечитывать ее до тех пор, пока не убедится в ее правильности. Но от ответственности ему не уйти. Первая часть принципа ответственности выражена в UNIX тем, что существует пользователь, которому вообще никакие действия по изменению системы не запрещены. Как правило, правами суперпользователя наделяют человека настолько опытного, что он в состоянии нести ответственность за любое поведение вверенной ему системы. Он имеет такую возможность в силу соблюдения всех предыдущих принципов: И – у него есть достаточно информации, чтобы разобраться в поведении любой части системы, З – ему не надо часами давить на клавиши, чтобы перенастроить ту ее часть, которая работает недостаточно хорошо, У – сама система организована так, что один человек способен (по крайней мере на уровне проекта) решить любую возникшую задачу.

Набор программных продуктов для UNIX наглядно иллюстрирует первое следствие принципов организации проективной ОС: основное направление развития - инструментарии. В полном дистрибутиве типичной UNIX-системы от шестой до третьей части всего списка пакетов относится к области разработки. Например, на 8268 пакетов в официальном дистрибутиве FreeBSD-5.2 в категории devel (средства разработки), lang (язык программирования) и x11-toolkits (графические инструментарии) входит в общей сложности 1506 пакетов. В ALT Linux Master 2.2 доля библиотек превышает 20%. Стоит заметить, что в специализированные дистрибутивы или в системы, не распространяемые по свободной лицензией, средства разработки могут не входить: в один - за ненадобностью, в другие – из-за желания авторов заработать на продаже инструментов.

Как и во всякой проективной системе, в UNIX «велосипедный парк» - весьма обычное явление. Сталкиваясь с задачей «здесь и сейчас», бывает непросто выбрать между самостоятельным поиском решения и изучением способов перестройки чужого. Чтобы понять, насколько имеющийся инструмент поможет в решении задачи, и стоит ли конструировать новый, нужен опыт, который приходит только со временем. По истечении этого времени в гараже каждого пользователя UNIX будет пылиться известное количество велосипедов всевозможной кривизны. Как правило, все эти 10, 50 и 1000-строчные сценарии на shell, sed, awk или perl очень дороги сердцу автора, и он переносит их на каждое новое рабочее место.

Дело еще и в том, что система рассчитана на профессиональное решение даже самой пустяковой задачи. Это значит, что стратегию «исследование – выбор – реализация – решение», стоит применять во всех случаях, даже когда кажется, что можно начать сразу с «решения». В UNIX работа вручную всегда хуже автоматической. Говорят «Юниксоид за три часа напишет программу, и она за пять секунд сделает работу, на которую вручную ушел бы час». Любой, кому приходится повторять одни и те же действия в четвертый, пятый, десятый раз, довольно быстро приходит к идее командного сценария.

Г. Курячий. ОС UNIX. Учебное пособие. М.: Интернет-Университет информационных технологий, 2004. с. 68-77.

ВЫВОД:

 




Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 616; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.026 сек.