Операционные системы - статьи

         

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


В старых Unix'ах отводилось 14 букв на имя, в новых это ограничение снято.

В директории кроме имени файла находится его идентефикатор inode - целое

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

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

(см.далее) даты и время создания, последней модификации и последнего обращения

к файлу; атрибуты доступа. Атрибуты доступа содержат тип файла (см.далее),

атрибуты смены прав при запуске (см.далее) и права доступа к нему для хозяина,

одногрупника и остальных на чтение, запись и выполнение. Право на стирание

файла определяется правом записи в вышележащую директорию.

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

но обязательно лежащими на одном разделе. Все ссылки на файл равноправны;

файл стирается, когда удаляется последняя ссылка на файл. Если файл открыт

(для чтения и/или записи), то число ссылок на него увеличивается еще на

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

чтобы при аварийном завершении, когда операционная система закрывает открытые

процессом файлы, этот временный файл был удален операционной системой.



Есть еще одна интересная особенность файловой системы: если после создания

файла запись в него шла не подряд, а с большими интервалами, то для этих

интервалов место на диске не выделяется. Таким образом суммарный обьем

файлов в разделе может быть больше обьема раздела, а при удалении такого

файла освобождается меньше места, чем его размер.

Файлы бывают следующих типов:

  • обычный файл прямого доступа;

  • директория (файл, содержащий имена и идентефикаторы других файлов);

  • символьный линк (строка с именем другого файла);

  • блочное устройство (диск или магнитная лента);

  • последовательное устройство (терминалы, последовательные и параллельные

    порты; диски и магнитные ленты тоже имеют интерфейс последовательного

    устройства)

  • поименованный канал.

    Специальные файлы, предназначенные для работы с устройствами


    как правило сосредоточены в директории "/dev".

    Вот некоторые из них (в номинации FreeBSD):

  • tty* - терминалы, в т.ч.:

  • ttyv<цифра> - виртуальная консоль;
  • ttyd<цифра> - DialIn терминал (обычно последовательный порт);
  • cuaa<цифра> - DialOut линия
  • ttyp<цифра> - сетевой псевдо-терминал;
  • tty - терминал, с которым ассоциирована задача;

  • wd* - жесткие диски и их подразделы, в т.ч.:


    • wd<цифра> - жесткий диск;
    • wd<цифра>s<цифра> - партиция этого диска (именуемая здесь "slice");
    • wd<цифра>s<цифра><буква> - раздел партиции;


  • fd<цифра>[<буква>] - floppy-диск;
  • rwd*, rfd* - то же самое, что wd* и fd*, но с последовательным доступом;

    Иногда требуется, чтобы программа, запущенная пользователем, имела

    не права запустившего ее пользователя, а какие-то другие. В этом случае

    устанавливается атрибут смены прав на права пользователя - хозяина программы.

    (В качестве примера приведу программу, которая читает файл с вопросами и

    ответами и на основании прочитанного тестирует запустившего эту программу

    студента. Программа должна иметь право читать файл с ответами, а запустивший

    ее студент - нет.) Так, например, работает программа passwd, с помощью которой

    юзер может изменить свой пароль. Юзер может запустить программу passwd,

    она может произвести изменения в системной базе данных - а пользователь

    не может.

    В отличие от DOS, в котором полное имя файла выглядит как "диск:\путь\имя",

    и RISC-OS, в которой оно выглядит "-файловая_система-диск:$.путь.имя"

    (что вообще говоря имеет свои преимущества), Unix использует прозрачную

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

    было загружено ядро Unix. Если мы собираемся использовать другой раздел

    (а на загрузочном разделе как правило находится только самое необходимое

    для загрузки), используется команда `mount /dev/файл_раздела директория`.

    При этом файлы и поддиректории, ранее находившиеся в этой директории,

    становятся недоступными, пока раздел не будет размонтирован (естественно,

    все нормальные люди используют для монтирования разделов пустые директории).

    Производить монтирование и размонтирование имеет право только супервизор.

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

    файла, которые ему известны как стандартный ввод stdin по дескриптору 0;

    стандартный вывод stdout по дескриптору 1; и стандартный вывод stderr

    по дескриптору 2. При регистрации в системе, когда пользователь вводит

    имя и пароль, а ему запускается shell, все трое направлены на /dev/tty;

    позже любой из них может быть перенаправлен в любой файл.


    Содержание раздела