Файловая система
Опубликовал 03.11.2012 | Автор zholud
Как мы фиксировали в разделе 2.1, мнение файла считается одним из более принципиальных для ОС UNIX. Все файлы, с коими имеют все шансы манипулировать юзеры, размещаются в файловой системе, представляющей собой древо, промежные вершины которого подходят каталогам, и листья — файлам и порожним каталогам. Примерная конструкция файловой системы ОС UNIX показана на рисунке 2.1. Действительно на любом логическом диске (разделе физиологического дискового пакета) размещается отдельная иерархия каталогов и файлов. Для получения всеобщего бревна в динамике употребляется »монтирование» отдельных иерархий к зафиксированной корневой файловой системе.
Примечание: в мире ОС UNIX сообразно историческим факторам термин «файловая система» считается перегруженным, означая сразу иерархию каталогов и файлов и дробь ядра, коия заведует каталогами и файлами. Вероятно, было бы вернее именовать иерархию каталогов и файлов архивом файлов, а термин «файловая система» применять лишь во другом значении. Но, следуя обыкновению ОС UNIX, мы станем применять данный термин в 2-ух смыслах, распознавая смысла сообразно контексту.
Любой каталог и файл файловой системы владеет неповторимое совершенное фамилия (в ОС UNIX наверное фамилия принято именовать full pathname - фамилия, задающее целый путь, так как оно вправду задает целый путь от корня файловой системы чрез цепочку каталогов к соответственному каталогу либо файлу; мы станем применять термин «совершенное фамилия», так как для pathname отсутствует сладкоголосый российский аналог). Каталог, являющийся корнем файловой системы (корневой каталог), в хоть какой файловой системе владеет предопределенное фамилия »/» (слэш). Совершенное фамилия файла, к примеру, /bin/sh значит, будто в корневом каталоге обязано держаться фамилия каталога bin, а в каталоге bin обязано держаться фамилия файла sh. Маленьким либо условным именованием файла (relative pathname) именуется фамилия (может быть, составное), задающее путь к файлу от текущего рабочего каталога (есть бригада и соответственный целый вызов, дозволяющие определить нынешний рабочий каталог).
В любом каталоге держатся 2 особых фамилии, фамилия ».», именующее сам данный каталог, и фамилия »..», именующее «материнский» каталог предоставленного каталога, т.е. каталог, конкретно предыдущий этому в иерархии каталогов.
Рис. 2.1. Конструкция каталогов файловой системы
UNIX поддерживает бессчетные утилиты, дозволяющие действовать с файловой системой и легкодоступные как команды командного интерпретатора. Вот некие из их (более употребительные): cp имя1 имя2 — копирование файла имя1 в файл имя2
rm имя1 - ликвидирование файла имя1
mv имя1 имя2 — переименование файла имя1 в файл имя2
mkdir фамилия - творение новоиспеченого каталога фамилия
rmdir фамилия - ликвидирование каталога фамилия
ls фамилия - выдача содержимого каталога фамилия
cat фамилия - выдача на экран содержимого файла фамилия
chown фамилия режим - модифицирование режима доступа к файлу
Файловая система традиционно располагается на дисках либо остальных приспособлениях наружной памяти, имеющих блочную текстуру. Не считая блоков, берегущих сборники и файлы, во наружной памяти поддерживается еще некоторое количество казенных областей.
В мире UNIX есть некоторое количество различных видов файловых систем со собственной текстурой наружной памяти. Более знамениты обычная файловая система UNIX System V (s5) и файловая система рода UNIX BSD (ufs). Файловая система s5 состоит из 4 секций (набросок 2.2,a). В файловой системе ufs на логическом диске (разделе настоящего диска) располагаться очередность секций файловой системы (набросок 2.2,b).
UNIX поддерживает бессчетные утилиты, дозволяющие действовать с файловой системой и легкодоступные как команды командного интерпретатора. Вот некие из их (более употребительные): cp имя1 имя2 — копирование файла имя1 в файл имя2
rm имя1 - ликвидирование файла имя1
mv имя1 имя2 — переименование файла имя1 в файл имя2
mkdir фамилия - творение новоиспеченого каталога фамилия
rmdir фамилия - ликвидирование каталога фамилия
ls фамилия - выдача содержимого каталога фамилия
cat фамилия - выдача на экран содержимого файла фамилия
chown фамилия режим - модифицирование режима доступа к файлу
Конструкция файловой системы
Файловая система традиционно располагается на дисках либо остальных приспособлениях наружной памяти, имеющих блочную текстуру. Не считая блоков, берегущих сборники и файлы, во наружной памяти поддерживается еще некоторое количество казенных областей.
В мире UNIX есть некоторое количество различных видов файловых систем со собственной текстурой наружной памяти. Более знамениты обычная файловая система UNIX System V (s5) и файловая система рода UNIX BSD (ufs). Файловая система s5 состоит из 4 секций (набросок 2.2,a). В файловой системе ufs на логическом диске (разделе настоящего диска) располагаться очередность секций файловой системы (набросок 2.2,b).
Рис. 2.2. Конструкция наружной памяти файловых систем s5 и ufs
Коротко опишем сущность и предназначение всякой области диска.
Boot-блок охватывает програмку раскрутки, коия работает для начального пуска ОС UNIX. В файловых системах s5 действительно употребляется boot-блок лишь корневой файловой системы. В доп файловых системах данная область находится, однако никак не употребляется.
Суперблок - наверное более серьезная область файловой системы, имеющая информацию, коия нужна для работы с файловой системой в целом. Суперблок охватывает перечень вольных блоков и вольные i-узлы (information nodes — информационные узлы). В файловых системах ufs для увеличения стойкости поддерживается некоторое количество копий суперблока (как следовательно из рисунка 2.2,b, сообразно одной копии на категорию цилиндров). Любая копия суперблока владеет величина 8196 б, и лишь 1 копия суперблока употребляется при монтировании файловой системы (см. ниже). Но, ежели при монтировании устанавливается, будто изначальная копия суперблока испорчена либо никак не удовлетворяет аспектам единства инфы, употребляется резервная копия.
Блок категории цилиндров охватывает количество i-узлов, специфицированных в перечне i-узлов для предоставленной категории цилиндров, и количество блоков этих, которые соединены с данными i-узлами. Величина блока категории цилиндров находится в зависимости от объема файловой системы. Для увеличения отдачи файловая система ufs пытается располагать i-узлы и блоки этих в одной и той ведь группе цилиндров.
Перечень i-узлов (ilist) охватывает перечень i-узлов, соответственных файлам предоставленной файловой системы. Наибольшее количество файлов, которые имеют все шансы существовать сделаны в файловой системе, ориентируется количеством легкодоступных i-узлов. В i-узле сберегается информация, обрисовывающая файл: режимы доступа к файлу, время сотворения и крайней трансформации, личный номер юзера и личный номер категории творца файла, отображение блочной текстуры файла и т.д.
Блоки этих - в данной доли файловой системы сберегаются настоящие эти файлов. В случае файловой системы ufs все блоки этих 1-го файла пробуют расположить в одной группе цилиндров. Величина блока этих ориентируется при форматировании файловой системы командой mkfs и имеет возможность существовать установлен в 512, 1024, 2048, 4096 либо 8192 байтов.
Монтируемые файловые системы
Файлы хоть какой файловой системы стают легкодоступными лишь опосля »монтирования» данной файловой системы. Файлы «никак не смонтированной» файловой системы никак не считаются видимыми операционной системой.
Для монтирования файловой системы употребляется целый вызов mount. Монтирование файловой системы значит последующее. В имеющемся к эпизоду монтирования бревне каталогов и файлов обязан быть листый узел - порожней каталог (в терминологии UNIX таковой каталог, применяемый для монтирования файловой системы, именуется directory mount point - крапинка монтирования). В хоть какой файловой системе наличествует корневой каталог. Во время исполнения системного вызова mount корневой каталог монтируемой файловой системы совмещается с каталогом — точкой монтирования, в итоге что появляется новенькая иерархия с полными фамилиями каталогов и файлов.
Смонтированная файловая система потом имеет возможность существовать отсоединена от единой иерархии с внедрением системного вызова umount. Для удачного исполнения данного системного вызова потребуется, чтоб отсоединяемая файловая система к данному эпизоду никак не пребывала в применении (т.е. ни Вотан файл из данной файловой системы никак не был раскрыт). Корневая файловая система постоянно считается смонтированной, и к ней никак не используем целый вызов umount.
Как мы фиксировали больше, отдельная файловая система традиционно размещается на логическом диске, т.е. на разделе физиологического диска. Для инициализации файловой системы никак не поддерживаются какие-или особые системные вызовы. Новенькая файловая система появляется на отформатированном диске с внедрением утилиты (команды) mkfs. Опять сделанная файловая система инициализируется в положение, соответственное наличию только только 1-го порожнего корневого каталога. Бригада mkfs исполняет инициализацию маршрутом непосредственный записи соответственных этих на диск.
Интерфейс с файловой системой
Ядро ОС UNIX поддерживает для работы с файлами некоторое количество системных вызовов. Посреди их более необходимыми считаются open, creat, read, write, lseek и close.
Принципиально подметить, будто желая снутри подсистемы управления файлами обыденный файл видется в облике комплекта блоков наружной памяти, для юзеров гарантируется понятие файла в облике линейной очередности байтов. Это понятие дозволяет применять абстракцию файла при труде в наружными приспособлениями, при организации межпроцессных взаимодействий и т.д.
Файл в системных вызовах, обеспечивающих настоящий доступ к этим, идентифицируется собственным дескриптором (цельным ролью). Дескриптор файла выдается системными вызовами open (раскрыть файл) и creat (сотворить файл). Главным параметром операций открытия и сотворения файла считается совершенное либо условное фамилия файла. Не считая такого, при изобретении файла указывается еще режим открытия (лишь чтение, лишь запись, запись и чтение и т.д.) и черта, характеризующая способности доступа к файлу:
open(pathname, oflag [,mode])
Одним из показателей, которые имеют все шансы принять участие в параметре oflag, считается знак O_CREAT, присутствие которого показывает на надобность сотворения файла, ежели при исполнении системного вызова open файл с указанным именованием никак не есть (параметр mode владеет значение лишь при наличии данного показателя). Тем никак не наименее сообразно историческим факторам и для снабжения сопоставимости с прошлыми версиями ОС UNIX раздельно поддерживается целый вызов creat, исполняющий фактически те ведь функции.
Явный файл имеет возможность употребляться для чтения и записи последовательностей байтов. Для данного поддерживаются 2 системных вызова:
read(fd, buffer, count) и write(fd, buffer, count)
Тут fd — дескриптор файла (приобретенный при раньше сделанном системном вызове open либо creat), buffer — указатель символьного массива и count - количество байтов, которые обязаны существовать прочитаны из файла либо в него записаны. Смысл функции read либо write - единое количество, которое схож со ролью count, ежели операция кончается удачно, одинаково нулю при достижении конца файла и негативно при происхождении погрешностей.
В любом раскрытом файле есть нынешняя точка зрения. Сходу опосля открытия файл позиционируется на 1-ый б. Иными словами, ежели сходу опосля открытия файла производится целый вызов read (либо write), то станут прочитаны (либо записаны) 1-ые count байтов содержимого файла (естественно, они станут удачно прочитаны лишь в том случае, ежели файл действительно охватывает сообразно последней мерке count байтов). Опосля исполнения системного вызова read (либо write) указатель чтения/записи файла станет установлен в сделку count+1 и т.д.
Таковой, кристально логический манера работы, как оказалось во почти всех вариантах необходимым, однако нередко посещает нужно декламировать либо видоизменять файл с случайной позиции (к примеру, как в отсутствии таковой способности беречь в файле напрямик индексируемые массивы этих?). Для очевидного позиционирования файла работает целый вызов
lseek(fd, offset, origin)
Как и ранее, тут fd — дескриптор раньше раскрытого файла. Параметр offset задает смысл условного смещения указателя чтения/записи, а параметр origin показывает, условно какой-никакой позиции обязано использоваться увольнение. Вероятны 3 смысла параметра origin. Смысл 0 показывает, будто смысл offset обязано рассматриваться как увольнение условно истока файла. Смысл 1 значит, будто смысл offset считается смещением условно текущей позиции файла. В конце концов, смысл 2 разговаривает о том, будто задается увольнение условно конца файла. Подметим, будто типом этих параметра offset считается long int. Наверное означает, будто, во-первых, имеют все шансы задаваться довольно длинноватые смещения и, во-других, смещения имеют все шансы существовать позитивными и отрицательными.
К примеру, опосля исполнения системного вызова
lseek(fd, 0, 0)
указатель чтения/записи соответственного файла станет установлен на правило (на 1-ый б) файла. Целый вызов
lseek(fd, 0, 2)
установит указатель на конец файла. В конце концов, исполнение системного вызова
lseek(fd, 10, 1)
приведет к увеличению текущего смысла указателя на 10.
Природно, целый вызов удачно заканчивается лишь в том случае, как скоро поновой сформированное смысл указателя никак не значит из-за пределы имеющихся объемов файла.
Опубликовано в рубрике все о unix