Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 85
Текст из файла (страница 85)
Запрос от системы mount (на установку носителейи т. п.) позволяет встраивать в иерархию файлов файлы на сменных томах. Команда mount имеет несколько аргументов, но обязательных аргументов у стандартноговарианта ее использования два: имя файла блочного устройства и имя каталога.В результате выполнения этой команды файловая подсистема, расположенная науказанном устройстве, подключается к системе таким образом, что ее содержимоезаменяет собой содержимое заданного в команде каталога.
Поэтому для монтирования соответствующего тома обычно используют пустой каталог. Команда umountвыполняет обратную операцию — «отсоединяет» файловую систему, после чегодиск с данными можно физически извлечь из системы. Например, для записи данных на дискету необходимо ее «подмонтировать», а после работы — «размонтировать».Монтирование файловых систем позволяет получить единое логическое файловое пространство, в то время как реально отдельные каталоги с файлами могутнаходиться в разных разделах одного жесткого диска и даже на разных жесткихдисках. Причем, что очень важно, сами файловые системы для монтируемых разделов могут быть разными.
Например, при работе в системе Linux мы можем иметьчасть разделов с файловой системой EXT2FS, а часть разделов — с файловой системой EXT3FS. Важно, чтобы ядро знало эти файловые системы.Защита файловЗащита файлов осуществляется при помощи номера, идентифицирующего пользователя, и десяти битов защиты — атрибутов доступа. Права доступа подразделяются на три типа: чтение (read), запись (write) и выполнение (execute).
Эти типыправ доступа могут быть предоставлены трем классам пользователей: владельцуфайла, группе, в которую входит владелец, и всем прочим пользователям. Девятьиз этих битов управляют защитой по чтению, записи и исполнению для владельцафайла, других членов группы, в которую входит владелец, и всех других пользователей.
Файл всегда связан с определенным пользователем — своим владельцеми с определенной группой, то есть у него есть уже известные нам идентификаторыСемейство операционных систем UNIX327пользователя (UID) и группы (GID). Изменять права доступа к файлу разрешенотолько его владельцу. Изменить владельца файла может только суперпользователь, изменить группу — суперпользователь или владелец файла.Программа, выполняющаяся в системе, всегда запускается от имени определенных пользователя и группы (обычно основной группы этого пользователя), но связьпроцессов с пользователями и группами организована сложнее.
Различают идентификаторы доступа к файловой системе для пользователя (File System access UserID, FSUID) и для группы (File System access Group ID, FSGID), а также эффективные идентификаторы пользователя (Effective User ID, EUID) и группы (Effective Group ID, EGID). Кроме того, при доступе к файлам учитываются полномочия (capabilities), присвоенные самому процессу.При создании файл получает идентификатор UID, совпадающий с FSUID процесса, который его создает, а также идентификатор GID, совпадающий с FSGIDэтого процесса.Атрибуты доступа определяют, что разрешено делать с данным файлом даннойкатегории пользователей. Имеется всего три операции: чтение, запись и выполнение.При создании файла (или при создании еще одного имени для уже существующего файла) модифицируется не сам файл, а каталог, в котором появляются новыессылки на узлы.
Удаление файла заключается в удалении ссылки. Таким образом,право на создание или удаление файла — это право на запись в каталог.Право на выполнение каталога интерпретируется как право на поиск в нем (прохождение через него). Оно позволяет обратиться к файлу с помощью пути, содержащему данный каталог, даже тогда, когда каталог не разрешено читать, и поэтомусписок всех его файлов недоступен.Помимо трех названных основных атрибутов доступа существуют дополнительные, используемые в следующих случаях.
Атрибуты SUID и SGID важны при запуске программы: они требуют, чтобы программа выполнялась не от имени запустившего ее пользователя (группы), а от имени владельца (группы) того файла, вкотором она находится. Если файл программы имеет атрибут SUID (SGID), тоидентификаторы FSUID и EUID (FSGID и EGID) соответствующего процесса ненаследуются от процесса, запустившего его, а совпадают с UID (GID) файла. Благодаря этому пользователи получают возможность запустить системную программу, которая создает свои рабочие файлы в закрытых для них каталогах.Кроме того, если процесс создает файл в каталоге, имеющем атрибут SGID, то файлполучает GID не по идентификатору FSGID процесса, а по идентификатору GIDкаталога.
Это удобно для коллективной работы: все файлы и вложенные каталоги1в каталоге автоматически оказываются принадлежащими одной и той же группе,хотя создавать их могут разные пользователи. Есть еще один атрибут SVTX, который нынче относится к каталогам. Он показывает, что из каталога, имеющего этотатрибут, ссылку на файл может удалить только владелец файла. Существуют двестандартные формы записи прав доступа — символьная и восьмеричная. СимвольВложенные каталоги часто называют подкаталогами (subdirectory).328Глава 10.
Краткий обзор современных операционных системная запись представляет собой цепочку из десяти знаков, первый из которых неотносится собственно к правам, а обозначает тип файла. Используются следующие обозначения:•- (дефис) — обычный файл;Q d — каталог;•с — символьное устройство;Q b — блочное устройство;•р — именованный канал (named pipe);1Qs — сокет (socket) ;a I — символическая ссылка.Далее следуют три последовательности, каждая из трех символов, соответствующие правам пользователя, группы и всех остальных. Наличие права на чтениеобозначается символом г, на запись — символом w, на выполнение — символом х,отсутствие какого-либо права — символом - (дефис) в соответствующей позиции.Наличие атрибута SUID (SGID) обозначается прописной буквой S в позиции права на выполнение для владельца (группы), если выполнение не разрешено, и строчной буквой s, если разрешено.Восьмеричная запись — это шестизначное число, первые два знака которого обозначают тип файла и довольно часто опускаются, третья цифра — атрибуты GUID(4), SGID (2) и SVTX (1), оставшиеся три — права владельца, группы и всех остальных соответственно.
Очевидно, что право на чтение можно представить числом 4, право на запись — числом 2, а право на выполнение — числом 1.Например, стандартный набор прав доступа для каталога /tmp в символьной форме выглядит как drwxrwxrwx, а в восьмеричной — как 041777 (каталог; чтение, запись и поиск разрешены всем; установлен атрибут SVTX). А набор прав -r-S-xw-,или в числовом виде — 102412, означает, что это обычный файл, владельцу разрешается читать его, но не выполнять и не изменять, пользователям из группы (заисключением владельца) — выполнять (причем во время работы программа получит права владельца файла), но не читать и не изменять, а всем остальным — изменять, но не читать и не выполнять.Большинство программ создают файлы с разрешением на чтение и запись для всехпользователей, а каталоги — с разрешением на чтение, запись и поиск для всехпользователей.
Этот исходный набор атрибутов логически складывается с пользовательской маской создания файла (user file-creation mask, umask), которая обычноограничивает доступ. Например, значения u=rwx, g=rwx, o=r-x для пользовательскоймаски следует понимать так: у владельца и группы остается полный набор прав, авсем остальным запрещается запись. В восьмеричном виде оно запишется как 002(первая цифра — ограничения для владельца, вторая — для группы, третья — для' Сокет — это понятие, связанное со стеком протоколов TCP/IP, который является «родным» дляUNIX.
Его следует понимать как некий адрес или порт, через который связываются удаленные программы.Семейство операционных систем UNIX329остальных; запрещение чтения — 4, записи — 2, выполнения — 1). Владелец файламожет изменить права доступа к нему командой chmod.Взаимодействие между процессамиОперационная система UNIX в полной мере отвечает требованиям технологииклиент-сервер. Эта универсальная модель служит основой построения любых скольугодно сложных систем, в том числе и сетевых.
Разработчики СУБД, коммуникационных систем, систем электронной почты, банковских систем и т. д. во всем мирешироко используют технологию клиент-сервер. Для построения программныхсистем, работающих по принципам модели «клиент-сервер», в UNIX существуютследующие механизмы:•сигналы;•семафоры;Q программные каналы;•очереди сообщений;•сегменты разделяемой памяти;Q вызовы удаленных процедур.Многие из этих механизмов нам уже знакомы, поэтому рассмотрим их вкратце.Для более глубокого изучения этих вопросов можно рекомендовать известнуюработу [43].СигналыЕсли рассматривать выполнение процесса на виртуальном компьютере, которыйпредоставляется каждому пользователю, то в такой системе должна существоватьсистема прерываний, отвечающая стандартным требованиям:•обработка исключительных ситуаций;•средства обработки внешних и внутренних прерываний;Q средства управления системой прерываний (маскирование и демаскирование).Всем этим требованиям в UNIX отвечает механизм сигналов, который позволяетне только воспринимать и обрабатывать сигналы, но и порождать их и посылать надругие машины (процессы).
Сигналы могут быть синхронными, когда инициаторсигнала — сам процесс, и асинхронными, когда инициатор сигнала — интерактивный пользователь, сидящий за терминалом. Источником асинхронных сигналовможет быть также ядро, когда оно контролирует определенные состояния аппаратуры, рассматриваемые как ошибочные.Сигналы можно рассматривать как простейшую форму взаимодействия между процессами.
Они используются для передачи от одного процесса другому или от ядраОС какому-либо процессу уведомления о возникновении определенного события.СемафорыМеханизм семафоров, реализованный в UNIX-системах, является обобщениемклассического механизма семафоров, предложенного известным голландским спе-330Глава 10. Краткий обзор современных операционных системциалистом профессором Дейкстрой. Семафор в операционной системе семействаUNIX состоит из следующих элементов:Q значения семафора;•идентификатора процесса, который хронологически последним работал с семафором;•числа процессов, ожидающих увеличения значения семафора;•числа процессов, ожидающих нулевого значения семафора.Для работы с семафорами имеются следующие три системных вызова:Q semget — создание и получение доступа к набору семафоров;О semop — манипулирование значениями семафоров (именно этот системныйвызов позволяет с помощью семафоров организовать синхронизацию процессов);•semctl — выполнение разнообразных управляющих операций над набором семафоров.Системный вызов semget имеет следующий синтаксис:id = semget(key, count, flag);Здесь параметры key и flag определяют ключ объекта и дополнительные флаги.Параметр count задает число семафоров в наборе семафоров, обладающих одним итем же ключом.