А. Робачевский - Операционная система UNIX (1114671), страница 19
Текст из файла (страница 19)
Работа в операционнойUNIXАдминистраторфашист. Помещает правила использования вычислитель!ных ресурсов в сообщение дня motd. Активно пользуется квотированиемпроцессорных ресурсов. Не допускает никаких исключений, чем полно!стью останавливает деятельность разработчиков к немалой радости по!клонников игры вМаньяк:# kill !9Идиот:# compressI awk '|sort !rn +8 !9!augxww|1head !1s o r t !rn +8 !9||head !1$2}Ситуация З. Регистрация новых пользователейТехнический бандит. Пишет скрипт на языке Perl, создающий домашнийкаталог пользователя, определяющий непонятное окружение и помещаю!щий записи в файлы /etc/passwd, /etc/shadow и /etc/group.
Устанавливаетна скрипт бити обязывает секретаршу обеспечить регистрацию но!вых пользователей. Поскольку обычно секретарша так и не может разо!браться в разнице междуини один новый пользовательне зарегистрирован.Администраторфашист. Помещает правила регистрации пользователей всообщение дня motd. Поскольку незарегистрированные пользователи немогут прочитать это сообщение, никто не выполняет бюрократическихтребований, и, как следствие, ни один новый пользователь не зарегистри!рован.Маньяк.
"Если ты настолько глуп, что не можешь взломать машину и са!мостоятельно зарегистрироваться, тебе нечего делать в моей системе. Вэтом ящике и так слишком много придурков".Идиот:# cd /home; mkdirecho "Bob/etc/passwdhome d i r e c t o r y "!f" >Ситуация 4. Авария загрузочного дискаТехнический бандит. Чинит диск.
Обычно ему удается восстановить фай!ловую систему прямо из приглашения загрузки. Если это не помогает, за!пускает микроядро, которое запускает на соседнем компьютере скрипт,копирующий на аварийную машину загрузочный код, переформатирую!щий диск и инсталлирующий операционную систему. Оставляет скриптработать до конца уик!энда, а сам отправляется в поход в горы.Администраторфашист. Начинает расследование аварии.
Отказывается ис!править аварию до тех пор, пока виновный не найден, и с него не взыска!на стоимость сломанного оборудования.www.books-shop.comсреда UNIXМаньяк. Извлекает диск. С помощью кузнечного молота пытается подо!гнать отдельные пластины. Звонит производителю. Во время установкинового диска и операционной системы наносит оскорбления присланномуинженеру.Идиот. Не замечает ничего необычного.Ситуация 5. Слабая производительность сетиТехнический бандит. Пишет скрипт для мониторинга сети, переписываетпрограммное обеспечение, чем повышает производительность на 2%.
По!жимает плечами, говорит: "Я сделал все, что мог", и отправляется в походв горы.Администраторфашист. Помещает правила работы в сети в сообщение дняЗвонит в Беркли и в AT&T, приставая к ним, как установить сете!вые квоты. Пытается уволить поклонников игры в xtrek.Маньяк. Каждые два часа размыкает кабель Ethernet и ждет тайм!аута насетевых соединениях.Идиот: # compress !f / d e v / e n OСитуация 6.
"Глупые" вопросы пользователейТехнический бандит. Отвечает на вопросы вили дво!ичном виде, иногда по!французски, пока пользователь не уходит.Администраторфашист. Блокирует вход пользователя в систему, пока тотне представит веские доказательства своей квалификации.Маньяк: # catalias vifcshrcv BoZo> ~/.z;Идиот.
Отвечает на все вопросы в меру своего понимания. Приглашаетпользователя в группу администрирования системы.Ситуация 7. Установка новой версии операционной системыТехнический бандит. Изучает исходные тексты новой версии и выбирает изних только то, что ему нравится.Администраторфашист.
В первую очередь изучает законодательные акты про!тив производителя, поставляющего программное обеспечение с ошибками.Маньяк: # uptimel : 3 3 p m up 19 days, 2 2 : 4 9 ,6.45,users, load average: 6 . 4 9 ,6.31www.books-shop.com92ГлаваРабота в операционной системе UNIXwallИтак, настало время установки новой версии.
Займетнесколько часов, и если нам повезет — управимся к 500. Мыработаем дляИдиот:#Ситуация 8. Пользователям необходима электронная телефонная книгаТехнический бандит. Пишет программу на RDBMS, perl и Smalltalk. Отча!явшиеся пользователи возвращаются к использованию записных книжек.Администраторфашист. Устанавливает Oracle.
Отчаявшиеся пользователивозвращаются к использованию записных книжек.Маньяк. Предлагает пользователям хранить данные в едином сплошномфайле и применять grep(l) для поиска телефонных номеров.Идиот: % dd ibs=80 i f = / d e v / r d i s k 0 0 1 s 7 | grep "Fred"ЗаключениеЭта глава знакомит с пользовательской средой UNIX, а также с основны!ми подсистемами этой операционной системы — файловой подсистемой,подсистемой управления процессами и памятью, и с подсистемой вво!да/вывода.Большое внимание уделено командному интерпретатору shell, и его языкупрограммирования.
Это, как вы убедились, достаточно мощный инстру!мент, который, в частности, используется при администрировании систе!мы и конфигурации процесса инициализации UNIX. В конце главы при!ведены наиболее распространенные утилиты, которые можно найти в лю!бой версии UNIX.www.books-shop.comпрограммированияUNIXОдной из целей, которые изначально ставились перед разработчикамиUNIX, являлось создание удобной среды программирования. Во многомэто справедливо и сегодня.Разговор в данной главе пойдет о программировании в UNIX. Может по!казаться, что предлагаемый материал интересен лишь разработчикам про!граммного обеспечения.
Это не совсем так. Безусловно, разработка про!грамм невозможна без знания интерфейса системных вызовов и без пони!мания внутренних структур и функций, предоставляемых операционнойсистемой. Однако осмысленное администрирование системы также за!труднительно без представления о том, как работает UNIX. Программныйинтерфейс UNIX позволяет наглядно показать внутренние механизмыэтой операционной системы.В начале главы дана общая характеристика программного интерфейсаUNIX и связанной с ним среды разработки; затронуты такие важные те!мы, как обработка ошибок, различия между системными вызовами ифункциями стандартных библиотек, форматы исполняемых файлов и раз!мещение образа программы в памяти; также описано, как происходит за!пуск и завершение программы с точки зрения программиста.Следующие два раздела посвящены подробному обсуждению программ!ного интерфейса двух важнейших подсистем операционной системыUNIX: файловой подсистемы и подсистемы управления процессами и па!мятью.
В них рассматриваются важнейшие системные вызовы работы с фай!лами, функции стандартной библиотеки ввода/вывода, системные вызовысоздания процесса, запуска новой программы и управления процессами.В заключение приводятся два типичных приложения: демон и командныйинтерпретатор, на примере которых проиллюстрированы темы, затронутыев данной главе.Программный интерфейс UNIXСистемные вызовы и функции стандартных библиотекВсе версии UNIX предоставляют строго определенный ограниченный на!бор входов в ядро операционной системы, через которые прикладные за!www.books-shop.com94Глава 2.
Среда программирования UNIXдачи имеют возможность воспользоваться базовыми услугами, предостав!ляемыми UNIX. Эти точки входа получили название системных вызовов(system calls). Системный вызов, таким образом, определяет функцию, вы!полняемую ядром операционной системы от имени процесса, выполнив!шего вызов, и является интерфейсом самого низкого уровня взаимодейст!вия прикладных процессов с ядром. Седьмая редакция UNIX включалаоколо 50 системных вызовов, современные версии, например, SVR4, пред!лагают более 120.Системные вызовы обычно документированы в разделе 2 электронногосправочника. В среде программирования UNIX они определяются какфункции С, независимо от фактической реализации вызова функции ядраоперационной системы. В UNIX используется подход, при котором каж!дый системный вызов имеет соответствующую функцию (или функции) стем же именем, хранящуюся в стандартной библиотеке языка С (в даль!нейшем эти функции будем для простоты называть системными вызова!ми).
Функции библиотеки выполняют необходимое преобразование аргу!ментов и вызывают требуемую процедуру ядра, используя различныеприемы. Заметим, что в этом случае библиотечный код выполняет толькороль оболочки, в то время как фактические инструкции расположены вядре операционной системы.Помимо системных вызовов программисту предлагается большой наборфункций общего назначения. Эти функции не являются точками входа вядро операционной системы, хотя в процессе выполнения многие из нихвыполняют системные вызовы. Например, функцияиспользуетсистемный вызовдля записи данных в файл, в то время как функ!ции strcpy(3C) (копирование строки) или(преобразование символав его числовое значение) вообще не прибегают к услугам операционнойсистемы. Функции, о которых идет речь, хранятся в стандартных библио!теках С и наряду с системными вызовами составляют основу среды про!граммирования в UNIX. Подробное описание этих функций приведено вразделе 3 электронного справочника.Таким образом, часть библиотечных функций является "надстройкой" надсистемными вызовами, обеспечивающей более удобный способ получениясистемных услуг.
В качестве примера рассмотрим процесс получения те!кущей даты и времени. Соответствующий системный вызоввоз!вращает время в секундах, прошедшее с момента Epoch: 1 января 1970 го!да. Дополнительная интерпретация этого значения, такая как преобразо!вание в вид, удобный для восприятия (дата и время) с учетом временнойзоны, осуществляется библиотечными функциямии т. д.). К этим функциям можно отнести функции библиотеки вво!да/вывода, функции распределения памяти, часть функций управленияпроцессами и т.
д.www.books-shop.com95Программный интерфейс UNIXНа рис. 2.1 показана схема взаимодействия приложения с ядром операци!онной системы при использовании системных вызовов и библиотечныхфункций.ПроцессИнтерфейссистемныхвызововРис.Системные вызовы и библиотечные функцииОбработка ошибокВ предыдущем разделе мы обсудили разницу между системными вызовамии библиотечными функциями. Они также различаются по способу переда!чи процессу информации об ошибке, произошедшей во время выполнениясистемного вызова или функции библиотеки.Обычно в случае возникновения ошибки системные вызовы возвращаюти устанавливают значение переменной errno, указывающее причину воз!никновения ошибки. Так, например, существует более десятка причин за!вершения вызовас ошибкой, и все они могут быть определены спомощью переменной errno.
Файл заголовков <errno.h> содержит кодыошибок, значения которых может принимать переменная errno, с кратки!ми комментариями.Библиотечные функции, как правило, не устанавливают значение пере!менной errno, а код возврата различен для разных функций. Для уточне!ния возвращаемого значения библиотечной функции необходимо обра!титься к электронному справочникуПоскольку базовым способом получения услуг ядра являются системныевызовы, рассмотрим более подробно обработку ошибок в этом случае.Переменная errno определена следующим образом:externalint errno;www.books-shop.com96Глава 2.программирования UNIXСледует обратить внимание, что значениене обнуляется следующимнормально завершившимся системным вызовом.