logo
Лекции Сети ЭВМ

“Заблудшие" процессы

Иногда в системе появляются процессы, которыми по той или иной причине должен заниматься администратор.

Наиболее распространенная разновидность проблематичных процессов - зависшие. Зависший процесс не выполняется надлежащим образом, не отвечает своему управляющему терминалу и просто "висит", ничего не делая - отсюда название. Более неприятный тип "заблудшего" процесса - неуправляемый процесс. Они бывают двух видов: пользовательские, потребляющие слишком много системных ресурсов, и системные, которые внезапно впадают в буйство и крушат все на своем пути. Неуправляемый процесс первого вида - обыкновенный нахал, не обязательно работающий неправильно.

Контрольные вопросы:

  1. Каковы функции ядра UNIX?

  2. Какие существуют режимы выполнения процесса?

  3. Что такое образ программы?

  4. Какие функции у процесса Init?

  5. Какие основные состояния у процесса?

  6. Как создается новый процесс?

  7. Что такое интерактивный процесс?

  8. Какие функции у командной оболочки?

Лекция 17

ФАЙЛОВАЯ СИСТЕМА.

Файловая система - структура, с помощью которой ядро ОС организует и представляет пользователям ресурсы памяти системы. Ресурсы памяти включают память на различ­ного рода носителях информации (жесткие диски, гибкие диски, магнитные ленты и CD-ROM). Ядро объединяет эти ресурсы в единую иерархическую структуру, которая начи­нается в каталоге "/" и разветвляется, охватывая произвольное число подкаталогов. Ката­лог самого верхнего уровня называется корневым. Цепочка имен каталогов, через которые необходимо пройти для доступа к заданному файлу вместе с именем этого файла называ­ется путевым именем. Путевые имена могут быть абсолютными или относительными. Относительные имена интерпретируются, начиная с текущего каталога.

Файловое дерево ОС UNIX может быть произвольного размера. Однако существуют определенные ограничения: имя каталога должно состоять не более чем из 256 символов, а в определении одного пути не должно быть более 1023 символов. Чтобы получить доступ к файлу, абсолютное путевое имя которого не удовлетворяет этим требованиям, необ­ходимо перейти в промежуточный каталог, а затем воспользоваться относительным путе­вым именем.

Файлы и каталоги UNIX хранятся и считываются с помощью внутренних номеров, которые называются индексными дескрипторами. UNIX отображает имена файлов и катало­гов в их индексные дескрипторы (отслеживая таким образом соответствие имен файлов и каталогов). UNIX знает также, как конкретные индексные дескрипторы соотносятся с те­ми или иными блоками и дорожками на диске. Файловая система в наиболее упрощенной форме это собрание данных. Каждая содержащая Unix ма­шина имеет минимум одну файловую систему на жестком диске. Эта система является корневой и загру­жается при включении компьютера. Она содержит в себе ядро Unix (/unix) и остается активной в течение всего времени работы компьютера.

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

1. Корневая файловая система никогда не может быть

размонтирована.

2. Файловая система не может быть размонтирована пока ее используют.

3. Поврежденная система не может монтироваться.

Когда инсталлируется Unix, решается вопрос о том, какой тип файловой системы требуется исполь­зовать. Его можно выбрать из некоторого количества типов. Наиболее популярные из них описаны далее в этой главе. Все они содержат три неизменных компонента:

1. superblock. Содержит информацию о файловой системе и ее физических данных.

2. inode list. Список индексных дескрипторов.

3. data blocks. Блоки данных.

Для каждого элемента, входящего в состав каталога, соответствующий индексный дескриптор хранит информацию о расположении. Функция индексного дескриптора как указателя — определять, где хранится информация среди блоков данных. Индексные дескрипторы включают девять компонентов:

1. Уникальный номер индексного дескриптора, который увеличивается всякий раз, когда создается новый файл или каталог. Исторически сложилось, что номера 0 и 1 отводятся для специальных целей, а корневой индексный дескриптор начинается с цифры 2.

Номер индексного дескриптора должен быть уникальным для физических данных. Эта уникальность традиционно обеспечивается увеличением номера с появлением каждого нового элемента. Вследствие этого данные, появившиеся в системе ранее, имеют меньшие номера inode.

2. Двузначный номер, описывающий тип элемента:

  1. — именованный канал.

  2. — специальный файл символьного устройства. 04 — каталог.

06 — специальный файл блочного устройства.

10 — обычный файл.

12 — символическая связь.

14 — гнездо (socket).

3. Полномочия. Представляют собой четыре цифры, первая из которых показывает, установлен ли специальный режим (1=бит задержки, 2=SGID, 4=SUID), и остальные три разрешают/запрещают операции Чтение, Запись и Выполнение.

4.Текущий физический размер файла.

5. Количество связей элемента.

6. Владелец файла (часто в числовой форме — информация, возвращаемая командой id).

7. Группа, владеющая файлом (тоже часто в числовом виде).

8.Времена создания, модификации и доступа. Эта информация отражается в листинге каталога, по

ней команда find осуществляет поиск в соответствии с заданным критерием.

9.Текущий физический адрес нахождения файла.

Эти девять пунктов составляют индексный дескриптор, но в зависимости от производителя Unix мо­гут существовать еще некоторые компоненты. Чтобы увидеть поставленную дилером комплектацию, сле­дует посмотреть файл: /usr/include/sys/inode.h.

Жестко связанные файлы (hard-linked files) используют один номер индексного дескриптора и не могут пересекаться в разных файловых системах, потому что каждая файловая система имеет свой собственный список индексных дескрипторов. Поскольку нумерация начинается с двух и увеличивается до уникально­го номера индексного дескриптора, возможно, чтобы одно число было использовано в двух различных файловых системах и указывало на два различных файла.

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

Когда вводится имя файла, то UNIX вы­полняет следующую последовательность шагов:

для получения соответствующей таблицы использует маршрут;

находит введенное имя в этой таблице;

отмечает соответствующий индексный дескриптор,

использует индексный дескриптор для поиска файла на диске;

5. в соответствии с выполняемой командой работает с данными в этом файле (чтение, запись и т.д.).

Файлы UNIX называются простыми или плоскими файлами. Их можно рассматривать как простые байтовые или символьные потоки без какого-либо внутреннего формата или структуры. При работе с ними эти файлы могут свободно увеличиваться или сокра­щаться в размере. UNIX отслеживает размер файла в своих таблицах. Когда программа пытается читать данные после конца файла, UNIX генерирует сообщение EOF (конец файла), завершая чтение.

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

В UNIX структуру байтовой стройки, находящейся в плоском файле этой ОС, определяют сами программисты. При редактировании файлов, можно увидеть обычные коды форматирования, такие как табуляции и возвраты каретки, включенные в файл програм­мой-редактором аналогично обычным символам. Именно редактор, а не UNIX, интерпре­тирует их и позволяет получить превосходно отформатированные документы.

Файловое дерево формируется из отдельных частей, называемых файловыми системами. Каждая файловая система состоит из одного каталога, его подкаталогов и файлов. Файловые системы прикрепляются к файловому дереву в определенной точке.

Термин "файловая система" по сути, имеет два значения. С одной стороны, это составная часть файлового дерева, а с другой - все файловое дерево и алгоритмы, с помо­щью которых ОС UNIX управляет им. Как правило, значение термина становится ясным из контекста.

Корневая файловая система включает в себя коневой каталог и минимальный набор файлов и подкаталогов.

В ОС UNIX существует восемь типов файлов:

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

Байт-ориентированные и блок ориентированные файлы устройств. Файлы устройств позволяют UNIX-программам взаимодействовать с аппаратными средствами и периферийными устройствами системы. При конфигурировании ядра к нему "привязываются" те модули, которые "знают", как взаимодействовать с каждым из устройств системы. За всю

"грязную" работу по управлению конкретным устройством отвечает специальная программа, называемая драйвером устройства.

Драйверы устройств образуют стандартный коммуникационный интерфейс, который выглядит как обычный файл. Когда ядро получает запрос к байт-ориентированному или блок-ориентированному файлу устройства, оно просто передает этот запрос соответствующему драйверу устройства.

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

Чтение из блок ориентированного устройства и запись в него осуществляется по одному блоку (группа байтов, обычно кратная 512) за раз, тогда как чтение из байт-ориентированного устройства и запись в него может производиться по одному байту. В некоторых устройствах предусмотрен доступ, как через блок-ориентированные, так и через байт-ориентированные файлы.

Внутри ядра адреса стандартных функций для каждого драйвера хранятся в таблице переходов. Таких таблиц две: одна для байт-ориентированных устройств, другая - для блок-ориентированных устройств. Старшие номера устройств являются индексами таблиц переходов.

Когда программа выполняет операцию над файлом устройства, ядро автоматически перехватывает ссылку, ищет в таблице переходов соответствующее имя функции и передает ей управление. Для выполнения необычных операций, не имеющих прямых аналогов в модели файловой системы (изъятие гибкого диска), используется системный вызов ioctl, который передает команду из области памяти, выделенной для процедур пользователя, непосредственно в драйвер.

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

Несмотря на то, что другие процессы "видят" файлы гнезд как элементы каталога, процессы, не участвующие в соединении, не могут осуществлять над файлами гнезд операции чтения и записи. Доменные гнезда UNIX создаются системным вызовом socket.

Именованные каналы (АТТ) - как и доменные гнезда (UNIX) обеспечивают взаимодействие двух несвязанных процессов, выполняемых на одной машине.

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

Жесткие ссылки. Ссылка - это скорее не тип файла, а его дополнительное имя. У каждого файла имеется как минимум одна ссылка. Как правило, это имя, под которым он был создан. Добавлением ссылки создается псевдоним файла.

Ссылку невозможно отличить от имени файла, к которому она присоединена: в ОС UNIX они идентичны. UNIX подсчитывает количество ссылок, указывающих на каждый файл, и не освобождает блоки данных до тех пор, пока не удалит его последнюю ссылку. Так как ссылка непосредственно указывает на файл, жесткие ссылки можно задавать только в пределах одной файловой системы.

Символические ссылки (косвенные ссылки) обеспечивают возможность вместо путевого имени файла указывать имя ссылки. Индексный дескриптор ссылки содержит путе­вое имя файла, на который делается ссылка. Создание символических ссылок и работа с ними осуществляется ядром. Различие между жесткими и символическими ссылками со­стоит в том, что жесткая ссылка - прямая (то есть указывает на номер индексного деск­риптора), тогда как символическая представляет собой ссылку по имени. Файл, на кото­рый указывает ссылка, и сама ссылка физически представляют собой разные объекты файловой системы.

Все файлы в файловой системе характеризуются набором атрибутов. Важнейшие из них - атрибуты принадлежности файлов и атрибуты доступа к ним.

Атрибутов принадлежности файла - три. Во-первых, каждый файл имеет своего владельца (owner). Это, как правило - пользователь, создавший его или скопировавший. Во-вторых, файл принадлежит группе пользователей (group) - причем не обязательно к одной из тех, в которые входит его владелец. И, наконец, все прочие пользователи (other), т. е. не являющиеся ни хозяином файла, ни членами группы, к которой файл приписан, также имеют некоторое отношение к данному файлу (и, соответственно, могут иметь некоторые права на него). Атрибутов доступа - также три: право на чтение (read), право на изменение (write) и право на исполнение (execute).

Наиболее важно различие в атрибутах доступа к обычным (regular) файлам и каталогам (directory). Так, право чтения обычного файла означает возмож­ность просмотра его с помощью команд типа cat, more, less, текстовых ре­дакторов или специализированных прикладных пакетов. Кроме того, обла­датель права на чтение может скопировать файл в тот каталог, где он наделен правами записи (изменения). Право на изменение позволяет изменить содержание файла, но не удалить, переместить или переименовать его - для этих операций требуется право изменения не файла, а каталога, в который он входит. В то же время отсутствие права на изменение данного файла не ме­шает его копированию - ведь при этом содержание исходного файла не претерпевает никаких изменений, т. к. создается новый файл, наследующий атрибуты не источника, а пользователя, запустившего процесс копирования. Право на исполнение имеет смысл только для файлов исполняемых, т.е. откомпилированных бинарных программ и сценариев

оболочки.

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

Право на исполнение в отношении каталога означает возможность перехода в него (командой cd имя_каталога) и последующего просмотра содержимого командой ls (при наличии права на чтение). Право исполнения и право чтения для каталога тесно сопряжены друг с другом - возможность перехода в каталог дает мало радости при отсутствии права его просмотреть. Поэтому следует предоставлять для каталога или оба права, или ни одного. Но иногда это может быть использовано для разграничения доступа.

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

Файлы в UNIX организованы в виде файловых систем. Это пони­мается в трех различных значениях:

Структура каталогов в UNIX-системе имеет иерархическую (древовидную) организацию, в основании которой ле­жит корневой каталог. В качестве подкаталогов его выступают:

/bin - каталог для исполняемых (иначе называемых двоичными, или би­нарными, binary) файлов общего назначения; здесь помещаются оболоч­ки командной строки, общие команды управления файлами и их архива­ции, традиционные текстовые редакторы типа vi и т.д.; именно каталог /bin в первую очередь просматривается на предмет поиска вве­денной с клавиатуры команды;

/boot - содержит файлы, отвечающие за загрузку системы;

/cdrom - по умолчанию это точка для монтирования файловой системы соответствующего носителя;

/dev - каталог для файлов устройств;

/dist - каталог, в который монтируется дистрибутивный CD-ROM при вызове программы sysinstall (и только в этом случае - обычная точка монтирования CD-ROM, как уже говорилось, - /cdrom);

/etc - каталог для конфигурационных файлов общего пользования;

/home - включает в себя домашние каталоги пользователей со всеми их программами, личными конфигурационными файлами (имеющими в се­ансе данного пользователя предпочтение перед общими файлами кон­фигурации) и данными;

/mnt - каталог для монтирования сменных накопителей (вроде дискет, Zip-дисков и т. д.) или временно подключаемых файловых систем (например, FAT-раздела диска);

/modules - каталог, в который помещаются загружаемые модули ядра, собираемые при каждой перекомпиляции последнего; при этом модули, собранные при предыдущей компиляции, перемещаются в каталог /modules.old;

/ргос - виртуальная файловая система для чтения информации о про­цессах;

/root - аналог каталога $НОМЕ для суперпользователя; по умолчанию закрыт для просмотра всеми, кроме администратора;

/sbin - содержит бинарные исполняемые файлы, используемые для сис­темного администрирования;

/stand - близкий по назначению каталог, файлы из которого, однако, доступны для исполнения, только будучи вызваны в явном виде, с указа­нием полного пути;

/sys - символическая ссылка на каталог /usr/src/sys, содержащий исход­ные тексты ядра системы;

/tmp - включает в себя всякого рода временные файлы - в частности, те, которые образуются при перекомпиляции ядра или полной пересбор­ке системы;

/usr - каталог для прикладных пользовательских программ со всеми их компонентами - исполняемыми, конфигурационными и разделяемыми файлами (/usr/bin, /usr/etc и /usr/share соответственно), библиотеками (/usr/lib) и т. д.;

/usr/local - подкаталог, имеющий самостоятельное значение; именно него устанавливается все дополнительное программное обеспечение из коллекции пакетов или системы портов, включая их исполняемые файлы (/usr/local/bin), документацию (/usr/local/doc, /user/local/info, /usr/local/man) библиотеки (/usr/local/lib), разделяемые файлы (/user/local/share);

/var - каталог для часто меняющихся файлов: различных системных журналов, почтовых и принтерных спуллингов и т.д.; кроме этого, в нем расположены базы данных устанавливаемых пакетов.

Каталоги /tmp, /usr, /var (а иногда и /usr/local) часто выделяются в само­стоятельные файловые системы, расположенные в отдельных дисковых раз­делах (partitions). Как отдельную файловую систему имеет смысл распола­гать и каталог /home.

Под монтированием понимается включение файловой системы дискового раздела (или иного носителя) в структуру каталогов корневой

файловой системы.

Право монтировать файловую систему предоставляется как правило правами привилегированного пользователя.

Контрольные вопросы:

  1. Что такое индексные дескрипторы?

  2. Что такое superblock?

  3. Что такое inode list?

  4. Какие существуют типы файлов?

  5. Какие функции выполняют sockets?

  1. Какие атрибуты принадлежности и доступа у файлов?

  2. Что такое жесткая и символическая ссылки?

  3. Можно ли размонтировать корневую файловую систему?

1

Если - длина сообщения, то оно занимает канал на время плюс время передачи по каналу(скорость света). Таким образом и - это среднее время обслуживания сообщения каналом.

в (2) - это здесь, так как и то, и другое – это среднее время обслуживания.