Опубликован: 01.07.2008 | Уровень: специалист | Доступ: платный
Лекция 3:

Начальная загрузка операционной системы

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

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

Файловая система в Unix - "деревянная", состоит из файлов и каталогов. На каждом разделе диска создается собственная независимая файловая система. Отдельные файловые системы "сцепляются" вместе, в единое общее дерево директорий. Такая операция называется "монтированием". Выглядит это примерно так:

mount -t ufs /dev/dsk/m197_c0d0s5 /home1
 mount -t ufs /dev/dsk/m197_c0d0s4 /usr
 df

Получить доступ к файлам "несмонтированной" файловой системы невозможно. Порочная практика MS-DOSа - сколько разделов, столько и "дисков" (a: b: c: d: e: ... k: l: m: n:) в Unix не применяется. В Unix всегда есть ровно одно общее дерево каталогов, и, по большому счету, пользователям совершенно все равно, на каком именно диске или разделе диска расположены его файлы /usr/spool/moshkow или /home1/moshkow/bin/mcopy...

Файловая система Unix кэшируется буферным кэшем. Операция записи на диск выполняется не тогда, когда это приказывает выполняемый процесс, а когда операционная система сочтет нужным это сделать. Это резко поднимает эффективность и скорость работы с диском, и повышает опасность ее использования. Выключение питания на "горячей", работающей Unix-машине приводит к разрушениям структуры файловой системы.

При каждой начальной загрузке Unix проверяет - корректно ли была выключена машина в прошлый раз, и если нет - автоматически запускает утилиту fsck (File System Check) - проверку и ремонт файловых систем..

Внутренняя структура файловой системы Unix

Раздел диска, в котором создана файловая система, разбит на три части.

СУПЕРБЛОК. Занимает 1 Kb.

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

ОБЛАСТЬ INOD-ов. Занимает примерно 8% общего размера раздела. inode - Index-node - описатель файла. Он содержит всю информацию о файле, за исключением имени файла, и собственно данных файла. В inod 'е хранится:

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

ОБЛАСТЬ ДАННЫХ. В этой области расположены ВИРТУАЛЬНЫЕ блоки с данными файлов. Незанятые блоки провязаны в СПИСОК СВОБОДНЫХ БЛОКОВ

Файлы бывают двух основных типов. ФАЙЛ, КАТАЛОГ.

  • ФАЙЛ - он и есть файл.
  • КАТАЛОГ - файл фиксированного формата: состоит из строчек с именами файлов, входящих в каталог
имя_файла1 Номер_Инода1
 имя_файла2 Номер_Инода2
 . . .

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

  • находит это имя в каталоге, содержащем файл,
  • берет Номер_Инода файла,
  • по номеру находит inod в области inod 'ов,
  • из inod 'а берет адреса блоков, в которых расположены данные файла,
  • по адресам блоков считывает блоки из области данных.

Все.

Формат индексного описателя файла.

Область инодов разбита на 64-х байтные структуры - inod 'ы. В inod 'е хранится:

Тип файла (файл/каталог/специальный файл/fifo/socket)
 Атрибуты (права доступа)
 Владелец файла
 Группа-владелец файла
 Времена создания, модификации, последнего доступа к файлу
 Длина файла
 Адрес 1-го блока файла
 Адрес 2-го блока файла
 ...
 Адрес 10-го блока файла
 Адрес блока косвенной адресации (блока с 256 адресами блоков)
 Адрес блока 2-й косвенной адресации
 (блока с 256 адресами блоков с адресами)
 Адрес блока 3-й косвенной адресации
 (блока с адресами блоков с адресами блоков с адресами)

Точный формат структуры файловой системы см. man fs

Специальные файлы

В Unix помимо обычных файлов и каталогов существуют еще и специальные файлы. Они используются для обозначения физических устройств компьютера. (Железок). В сущности, что такое файл? Это "нечто", куда можно записывать данные как последовательность байтов и считывать их оттуда. И, значит, вполне естественным выглядит, например, файл /dev/console - соответствующий консольному терминалу. Все, что выводится в файл /dev/console, будет просто появляться на экране терминала. При попытке чтения из файла /dev/console вы будете получать (внимание!) не то, что нарисовано в данный момент на экране, а то, что вводится с клавиатуры. Попробуйте выполнить команды

su
 echo Привет > /dev/console
 cat /dev/console

 Ctrl-C

Для каждого терминала unix-машины существует соответствующий ему файл. Обычным терминалам соответствуют файлы, которые называются примерно так:

/dev/contty01 или /dev/tty02 или /dev/ttyFD02 или /dev/ttyS0
 (и т.д., возможны варианты)

Псевдотерминалам (они эмулируются, когда вы входите в систему по сети, посредством команд типа telnet, rlogin ) соответствуют специальные файлы

/dev/pty*, или /dev/pty/*

Команда who, или who am i сообщит вам, как называется ваш собственный терминал.

Существуют специальные файлы, соответствующие жесткому диску в целом ( /dev/rdsk/m197_c0d0s7 ) и всем его разделам ( /dev/dsk/m197_c0d0s* ). Если вы будете читать из этих файлов, то получите все байтики, как они лежат на жестком диске, с нулевого цилиндра и до последнего... А если вы в этот файл что-нибудь запишете, то получите (потом) богатый опыт по переформатированию и разметке жесткого диска.

  • /dev/mem - файл, изображающий оперативную память.
  • /dev/audio - если "закатить" в него файл звукового формата (*.wav, *.au, ...?) - то он будет озвучен динамиком компьютера, а команда cat /dev/audio будет принимать все, что произносится в микрофон. Впрочем, я отвлекся, у нас ведь не PC, не Silicon Graphic и не SPARCstation.
  • /dev/zero - из него можно считать сколько угодно нулевых байтов
  • /dev/null - а в него можно писать, и читать из него - тоже, в неограниченных количествах и с неизменным результатом: NULL - он и есть null. А в MSDOS его аналог называется NUL.

Специальные файлы бывают двух типов:

  • блочные - запись и чтение допускаются только блоками. Например, разделы дисков с файловой системой являются таковыми.
    ls -al /dev/fd*
    brw-rw---- 1 root floppy 2, 28 Jul 18 1994 /dev/fd0H1440
    brw-rw---- 1 root floppy 2, 32 Jul 18 1994 /dev/fd0H2880
    brw-rw---- 1 root floppy 2, 12 Jul 18 1994 /dev/fd0H360
  • символьные(бесструктурные, сырые, row) - можно читать и писать отдельными байтами. К ним относятся терминалы, магнитные ленты, неформатированные диски и разделы дисков без файловой системы.
    ls -al /dev/tty*
    crw--w--w- 1 moshkow sys 4, 1 Jan 15 22:00 /dev/tty1
    crw--w--w- 1 root root 4, 2 Jan 15 20:37 /dev/tty2
    crw--w--w- 1 root root 4, 2 Jan 15 20:37 /dev/tty2

Различие - первая буква в листинге команды ls -l

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

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Дмитрий Ярцев
Дмитрий Ярцев
Россия
Игорь Зарубин
Игорь Зарубин
Россия