Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Файловая система ОС UNIX

Читайте также:
  1. ERP — информационная система масштаба предприятия
  2. I Операционная система ОС Unix
  3. I Операционная система ОС Unix
  4. I Операционная система ОС Unix
  5. I. Система социального регулирования общественных отношений.
  6. I. Система социального регулирования общественных отношений.
  7. II. Общество как социальная система, её основные системные признаки
  8. II. Система культуры и её структура.
  9. III. Систематизація і доповнення знань
  10. Internet и система права.

2.1 Структура файловой системы

Файловая система UNIX характеризуется:

- иерархической структурой;

- согласованной обработкой массивов данных;

- возможностью создания и удаления файлов;

- динамическим расширением файлов;

- защитой информации в файлах;

- трактовкой периферийных устройств (таких как терминалы, принтеры, ленточные устройства и т.п.) как файлов.

 

Файловая система организована в виде дерева с одной исходной вершиной, которая называется корнем (root – записывается: «/»); каждая вершина в древовидной структуре файловой системы, кроме листьев, является каталогом файлов, а файлы, соответствующие дочерним вершинам, являются либо каталогами, либо обычными файлами, либо файлами устройств. Имени файла предшествует указание пути поиска, который описывает место расположения файла в иерархической структуре файловой системы. Имя пути поиска состоит из компонент, разделенных между собой наклонной чертой (/); каждая компонента представляет собой набор символов, составляющих имя вершины (файла), которое является уникальным для каталога (предыдущей компоненты), в котором оно содержится. Полное имя пути поиска начинается с указания наклонной черты и идентифицирует файл (вершину), поиск которого ведется от корневой вершины дерева файловой системы с обходом тех ветвей дерева файлов, которые соответствуют именам отдельных компонент. Так, пути «/etc/passwd», «/bin/who» и «/usr/src/cmd/who.c» указывают на файлы, являющиеся вершинами дерева, изображенного на Рис.3, а пути «/bin/passwd» и «/usr/src/date.c» содержат неверный маршрут. Имя пути поиска необязательно должно начинаться с корня, в нем следует указывать маршрут относительно текущего для выполняемого процесса каталога, при этом предыдущие символы «наклонная черта» в имени пути опускаются. Так, например, если мы находимся в каталоге «/dev», то путь

«tty01» указывает файл, полное имя пути поиска для которого «/dev/tty01».

 

 
 

 


Как правило, в каждой UNIX-системе можно найти следующие каталоги:

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

/boot каталог с информацией о загрузке;

/dev каталог файлов, представляющих периферийные устройства (диски, принтеры, модемы, терминалы и т.п.);

/etc преимущественно административные утилиты и файлы (дословный перевод с английского – разное);

/home домашние каталоги пользователей системы;

/lib стандатрные библиотеки;

/lost+found место для хранения файлов, системная информация о которых потеряна;

/mnt монтируемые файловые системы (флоппи-диски, CD-ромы и т.п.)

/proc псевдо-файловая система, содержащая инфрмацию о процессах;

/root домашний каталог суперпользователя (системного оператора);

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

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

/var переменные (часто изменяемые) файлы (почтовые пакеты, спул принтера и т.п.)

 

Программы, выполняемые под управлением системы UNIX, не содержат никакой информации относительно внутреннего формата, в котором ядро хранит файлы данных, данные в программах представляются как бесформатный поток байтов.

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

 

Пример

Как известно, в исходных текстах программ на Си символ # в начале строки предшествует команде препроцессора:

#define определение константы или макроса

#include включение в текст программы нового файла

В командных интерпретаторах (shell) и текстовых файлах конфигурации символ # в начале строки обозначает комментарий. Поэтому один и тот же файл будет трактоваться разными программами по-разному.

 

Пример

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

 

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

Файловая система состоит из последовательности логических блоков длиной 512, 1024, 2048 или другого числа байт, кратного 512, в зависимости от реализации системы. Размер логического блока внутри одной файловой системы постоянен, но может варьироваться в разных файловых системах в данной конфигурации. Использование логических блоков большого размера увеличивает скорость передачи данных между диском и памятью, поскольку ядро сможет передать больше информации за одну дисковую операцию, и сокращает количество продолжительных операций. Например, чтение 1 Кбайта с диска за одну операцию осуществляется быстрее, чем чтение 512 байт за две. Однако, если размер логического блока слишком велик, полезный объем памяти может уменьшиться.

Файловая система имеет следующую структуру (Рис.4):

· Блок загрузки (блок номер 0) располагается в начале пространства, отведенного под файловую систему, обычно в первом секторе, и содержит программу начальной загрузки, которая считывается в машину при загрузке или инициализации операционной системы. Хотя для запуска системы требуется только один блок загрузки, каждая файловая система имеет свой (пусть даже пустой) блок загрузки.

· Суперблок (блок номер 1) описывает состояние файловой системы. Он содержит следующую информацию:

· число блоков, составляющих файловую систему;

· число блоков, предназначенных для хранения описателей (индексов) файлов;

· указатель на заголовок списка свободных блоков.

· Группа блоков, начиная с номера 2, является списком индексов или идентификаторов в файловой системе. Администраторы указывают размер списка индексов при генерации файловой системы. Один из индексов является корневым индексом файловой системы: это индекс, по которому осуществляется доступ к структуре каталогов файловой системы после выполнения системной операции mount (монтировать).

· Информационные блоки располагаются сразу после списка индексов и содержат данные файлов и управляющие данные. Отдельно взятый информационный блок может принадлежать одному и только одному файлу в файловой системе.

 

 

       

 


2.2 Внутреннее представление файлов

Каждый файл в системе UNIX имеет уникальный индекс (дескриптор, идентификатор). Индекс содержит информацию, необходимую любому процессу для того, чтобы обратиться к файлу:

- права собственности на файл;

- права доступа к файлу;

- размер файла;

- расположение данных файла в файловой системе.

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

 

 

2.2.1 Индексы

 

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

- Идентификатор владельца файла. Права собственности на каждый файл разделены между индивидуальным владельцем и «групповым», и тем самым помогают определить круг пользователей, имеющих права доступа к файлу. Суперпользователь имеет право доступа ко всем файлам в системе;

- Идентификатор группы владельцев файла. Групповое владение файлом дает возможность предоставить ограниченному кругу лиц, объединенных в группу, иметь доступ к файлу;

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

- Права доступа к файлу. Система разграничивает права доступа к файлу для трех классов пользователей: непосредственно владельца файла (owner), группового владельца (group) и прочих пользователей (others); каждому классу выделены определенные права на чтение, запись и исполнение файла, которые устанавливаются владельцем. Поскольку каталоги как файлы не могут быть исполнены, разрешение на исполнение в данном случае интерпретируется как право производить поиск в каталоге по имени файла;

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

- Число указателей на файл, означающее количество имен, используемых при поиске файла в иерархии каталогов.

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

- Размер файла. Данные в файле адресуются с помощью смещения в байтах относительно начала файла, начиная со смещения, равного 0, поэтому размер файла в байтах на 1 больше максимального смещения. Например, если пользователь создает файл и записывает только 1 байт информации по адресу со смещением 1000 от начала файла, размер файла составит 1001 байт.

В индексе отсутствует составное имя файла, необходимое для осуществления доступа к файлу. Имя файла и номер индекса хранится в записи каталога.

 

На Рис.5 показан дисковый индекс некоторого файла. Этот индекс принадлежит обычному файлу, владелец которого – «mjb» и размер которого – 6030 байт. Система разрешает пользователю «mjb» производить чтение, запись и исполнение файла; членам группы «os» и всем остальным пользователям разрешается только читать или исполнять файл, но не записывать в него данные. Последний раз файл был прочитан 23 октября 1984 года в 13:45, последний раз запись производилась 22 октября 1984 года в 10:30. Индекс изменялся последний раз 23 октября 1984 года в 13:30, хотя никакая информация в это время в файл не записывалась.

 

 
 

 

 


2.2.2 Структура файла

 

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

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

 

 

10 блоков прямой адресации по 1 Кбайту каждый 10 КБайт
1 блок косвеной адресации с 256 блоками прямой адресации 256 КБайт
1 блок двойной косвеной адресации с 256 блоками косвенной адресации 64 МБайта
1 блок тройной косвеной адресации с 256 блоками двойной адресации 16 ГБайт

 

Рис.6 Объем файла в байтах при размере блока 1 КБайт.

 

 

2.3 Каталоги

 

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

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

 
 

 

 


Составное имя – это строка символов, завершающаяся пустым символом и разделяемая наклонной чертой («/») на несколько компонент. Каждая компонента, кроме последней, должна быть именем каталога, но последняя компонента может быть именем файла, не являющегося каталогом.

На Рис.7 показан формат некоторого каталога. В каждом каталоге имеются файлы, в качестве имен которых указаны точка и две точки («.» и «..»). Номера индексов этих файлов совпадают с номерами индексов данного каталога и родительского каталога, соответственно. Номер индекса для файла «.» в рассматриваемом каталоге имеет адрес со смещением 0 и значение 83. Номер индекса для файла «..» имеет адрес со смещением 16 от начала каталога и значение 2. Записи в каталоге могут быть пустыми, при этом номер индекса равен 0. Например, запись с адресом 224 в каталоге «/etc» пустая, несмотря на то, что она когда-то содержала точку входа для файла с именем «crash». Программа mkfs инициализирует файловую систему таким образом, что номера индексов для файлов «.» и «..» в корневом каталоге совпадают с номером корневого индекса файловой системы.

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

- право чтения дает процессам возможность читать данные из каталога;

- право записи позволяет процессу создавать новые записи в каталоге или удалять старые, в результате чего изменяется содержимое каталога;

- право исполнения позволяет процессу производить поиск в каталоге по имени файла (поскольку «исполнять» каталог бессмысленно).

 

 

2.4 Другие типы файлов

 

В системе UNIX поддерживаются и два других типа файлов:

- каналы;

- специальные файлы.

 

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

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

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

 

 

2.5 Подсистема управления файлами

 

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

 

Пример

Если процесс обращается к системе с запросом на открытие файла

open («/fs2/mjb/rje/sourcefile», 1),

то ядро рекурсивно проверяет права пользователя/процесса на просмотр каталогов /fs2, /fs2/mjb, /fs2/mjb/rje, а затем самого файла /fs2/mjb/rje/sourcefile, и если запрашиваемый доступ разрешен, возвращает индекс для файла /fs2/mjb/rje/sourcefile. Все обращения к каталогам и файлам включают обращения к их индексам, та как именно в индексах содержится информация о пользователях и правах доступа.

 

Если процесс создает новый файл, ядро присваивает этому файлу неиспользуемый индекс. Индексы хранятся в файловой системе, однако при обработке файлов ядро заносит их в таблицу индексов в оперативной памяти.

Ядро поддерживает еще две информационные структуры: таблицу файлов и пользовательскую таблицу дескрипторов файла. Таблица файлов выступает глобальной структурой ядра, а пользовательская таблица дескрипторов файла выделяется под процесс. Если процесс открывает или создает файл, ядро выделяет в каждой таблице элемент, корреспондирующий с индексом файла. Элементы в этих трех структурах – в пользовательской таблице дескрипторов файла, в таблице файлов и в таблице индексов – хранят информацию о состоянии файла и о доступе пользователей к нему. В таблице файлов хранится смещение в байтах от начала файла до того места, откуда начнет выполняться следующая команда пользователя read (читать) или write (записать), а также информация о правах доступа к открываемому процессу. Таблица дескрипторов файла идентифицирует все открытые для процесса файлы. На Рис.8 показаны эти таблицы и связи между ними. В системных операциях open (открыть) и creat (создать) ядро возвращает дескриптор файла, которому соответствует указатель в таблице дескрипторов файла. При выполнении операций read и write ядро использует дескриптор файла для входа в таблицу дескрипторов и, следуя указателям на таблицу файлов и на таблицу индексов, находит информацию в файле. Использование этих таблиц обеспечивает различную степень разделения доступа к файлу.

 

 
 

 


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

· Состояние индекса в памяти, отражающее:

- заблокирован ли индекс;

- ждет ли снятия блокировки с индекса какой-либо процесс;

- отличается ли представление индекса в памяти от своей дисковой копии в результате изменения содержимого индекса;

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

· Логический номер устройства файловой системы, содержащей файл.

· Номер индекса. Так как индексы на диске хранятся в линейном массиве, ядро идентифицирует номер дискового индекса по его местоположению в массиве. В дисковом индексе это поле не нужно.

· Указатели на другие индексы в памяти. Ядро связывает индексы в хеш-очереди и включает их в список свободных индексов подобно тому, как связывает буферы в буферные хеш-очереди и включает их в список свободных буферов. Хеш-очередь идентифицируется в соответствии с логическим номером устройства и номером индекса. Ядро может располагать в памяти не более одной копии данного дискового индекса, но индексы могут находиться одновременно как в хеш-очереди, так и в списке свободных индексов.

· Счетчик ссылок, означающий количество активных экземпляров файла (таких, которые открыты).

 

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

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




Дата добавления: 2014-12-19; просмотров: 43 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.022 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав