Linux Kernel (Ядро линукса) (часть 2)


Работа с файловой системой

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

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

Пространства имен

В традиционной Unix-системе существует только одно дерево смонтированных файловых систем: начиная с корневой файловой системы операционной системы, каждый процесс потенциально может обратиться к любому файлу в смонтированной файловой системе, указав правильный путь. В этом отношении система Linux устроена сложнее: каждый процесс может иметь собственное дерево смонтированных файловых систем — так называемое пространство имен процесса.

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

CLONE_NEWNS

Когда процесс монтирует (или размонтирует) файловую систему, он лишь модифицирует свое пространство имен. Следовательно, такое изменение видно всем процессам, использующим то же пространство имен, причем только им. Более того, процесс может изменить корневую файловую систему своего пространства имен с помощью системного вызова pivot root, специфичного для Linux.

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

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...