Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы.docx
Скачиваний:
38
Добавлен:
02.05.2015
Размер:
2.53 Mб
Скачать

Структура каталогов os unix

Как и в MS DOS, MS Windows и Macintosh, в операционной системе UNIX применяется иерархическая (или "древовидная") файловая система. Это означает, что каждый файл находится в каталоге (директории), а каталоги могут включать другие каталоги. В системах Macintosh и MS Windows 95/NT каталоги называются "папками" (folder). В системе DOS используется тот же файлово-каталоговый язык, что и в UNIX (каталоги-директории, файлы).

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

mount -F ufs /dev/dsk/m197_c0d0s5 /u

mount -F ufs /dev/dsk/m197_c0d0s4 /usr1

Получить доступ к файлам "несмонтированной" файловой системы невозможно. В UNIX всегда есть ровно одно общее дерево каталогов.

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

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

Первое, что следует отметить: для разделения имен каталогов в UNIX используется прямая косая черта (/).

Например, /home/user/letters/mom.txt означает: "файл mom.txt находится в каталоге letters, который в свою очередь находится в каталоге user, который находится в каталоге home". Можно также сказать, что user - это подкаталог каталога home и т.д.

В этом примере следует отметить еще несколько моментов:

Перед именем стоит косая черта (/). Косая черта в начале имени обозначает "корневой каталог", который является, по сути, точкой, в которой "склеены" между собой все диски системы. В ОС UNIX никогда не обращаются к самому диску, а всегда - к подкаталогам корневого каталога.

В MS DOS и MS Windows каждому логическому устройству приписана определенная буква английского алфавита. В UNIX'е каждое устройство начиняется с некоторого каталога (подкаталога) корневого каталога (корневой директории).

UNIX-системы являются многопользовательскими. Каждому пользователю назначается "домашний каталог", в котором он должен хранить свои файлы, даже если он является единственным пользователем системы. /home/user - это, вероятно, "домашний" (рабочий) каталог пользователя user.

Пользователи могут создавать собственные каталоги так, как user создал каталог letters.

Взятое нами в качестве примера имя файла (/home/user/letters/mom.txt) называется полным именем, потому что оно показывает весь "путь" к файлу, начиная с корневого каталога. Такие имена не обязательно использовать постоянно. Однако можно применит целый ряд сокращений:

Рабочий (домашний) каталог всегда в Вашем распоряжении. Можно указывать пути относительно текущего каталога, а не корневого. Например, если текущим является каталог/home/user/letters, можно указать только имя файла - mom.txt. (Именно так и делается в большинстве случаев: указываете файл в текущем каталоге.) Команда pwd выдает имя текущего каталога; команда cd каталог делает текущим другой каталог. Так, если текущим является каталог /home/user, то команда cd letters перенесет Вас в каталог letters. Команда mkdir каталог создает новый каталог, а команда rmdir каталог удаляет каталог при условии, что он не содержит файлов.

В некоторых UNIX системах можно обозначать домашний каталог знаком ~, а комбинацией ~имя - "начальный каталог пользователя имя". Например, ~user/letters/mom.txt - еще один способ указать файл user'а. Команда cd без параметров предназначена для возврата в начальный (домашний) каталог, при этом не учитывается, откуда Вы начали работу.

Символы .. обозначают "родительский каталог". Чаще всего они используются с командой cd. Например, если текущим является каталог ~user/letters, то команда cd.. перенесет Вас в каталог ~user.

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

Таблица FAT

Следующая важная структура тома FAT — это сама таблица FAT, занимающая отдельную логическую область. Она определяет список (цепочку) кластеров, в которых размещаются файлы и папки тома. Между кластерами и индексными указателями таблицы имеется взаимно однозначное соответствие — N-й указатель соответствует кластеру с тем же номером. Первому кластеру области данных присваивается номер 2. Значение индексного указателя соответствует состоянию соответствующего кластера. Возможны следующие состояния:

  • кластер свободен — указатель обнулен;

  • кластер занят файлом и не является последним кластером файла — значение указателя — это номер следующего кластера файла;

  • кластер является последним кластером файла — указатель содержит метку EOC (End Of Clusterchain), значение которой зависит от версии FAT: для FAT12 меткой EOC считается любое значение, большее или равное 0x0FF8 (по умолчанию 0x0FFF); для FAT16 — большее или равное 0xFFF8 (по умолчанию 0xFFFF); для FAT32 — любое значение, большее или равное 0x0FFFFFF8 (по умолчанию 0x0FFFFFFF);

  • кластер поврежден — указатель содержит специальную метку, значение которой для FAT12 0x0FF7, для FAT16 0xFFF7 и для FAT32 0x0FFFFFF7. Поврежденный кластер не может использоваться файловой системой для хранения данных; соответствующие указатели не затрагиваются при форматировании тома, когда все остальные указатели обнуляются;

  • кластер зарезервирован «для будущей стандартизации» — указатель содержит значение, превышающее CountofClusters, но меньшее метки поврежденного кластера (то есть до 0xFFF6 включительно для FAT16). В этом случае кластер, не соответствуя никаким реальным данным, считается занятым и пропускается при поиске свободного, но никакой другой информации о нём не предоставляется.

Кластеры 0 и 1 отражаются FAT особо. Индексный указатель, соответствующий нулевому кластеру (самый первый указатель таблицы FAT), содержит значение BPB_Media в нижних 8 битах; остальные биты устанавливаются в 1. Например, если BPB_Media = 0xF8 (жесткий диск), FAT[0] = 0x0FFFFFF8 для FAT32. Таким образом, формально FAT[0] = EOC, что используется при обработке файлов нулевого размера (см. далее).

Второй зарезервированный указатель, FAT[1], при форматировании устанавливается в значение метки EOC. В FAT12 он не используется больше никак, а в FAT16 и FAT32 верхние два бита этого указателя могут содержать отметку о необходимости проверки тома (т. н. «грязный бит»), при чём все остальные биты выставлены в 1. Наличие грязного бита проверяется в процессе загрузки Windows программой autochk.exe. Грязный бит формируется при некорректном отключении тома или при аппаратной ошибке носителя и соответственно принимает два возможных значения.

Индексный указатель FAT32 по определению является 32-битным, однако верхние 4 бита в действительности игнорируются, так что значение указателя по сути является 28-битным. Единственной операцией, оперирующей с верхними 4 битами указателя, является форматирование тома, когда обнуляется весь указатель. Это означает, что, например, значения указателя 0x10000000, 0xF0000000 и 0x00000000 все соответствуют свободному кластеру, так как они отличаются лишь в верхних 4 битах.

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