Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
740.35 Кб
Скачать
      1. Системні виклики для управління каталогами

У цьому розділі ми розглянемо деякі системні виклики, пов'язані

швидше до каталогів та файлової системи в цілому, ніж просто до того чи іншого

файлу. Перші два виклику, mkdir і rmdir, відповідно створюють і

видаляють порожні каталоги. Наступний виклик - link. Він дозволяє одному файлу

з'являтися під двома або більше іменами, часто в різних каталогах. Цей

виклик зазвичай застосовується, коли кілька програмістів, які працюють в одній

команді, повинні спільно використовувати один загальний файл. Тоді цей файл

може з'явитися в каталозі в кожного з програмістів, можливо, під

іншим ім'ям. Поділ (спільне використання) файлу - це не те ж саме,

що копіювання файлу для кожного члена команди. При спільному

використанні файлу зміни, вироблені одним програмістом, негайно

стають видимими для інших - все відбувається в одному файлі. А при

створення копії файла подальші зміни не впливають на інші копії

цього файлу.

Два користувача, Ast і Jim, мають власні каталоги ast і j im з файлами.

Припустимо, що користувач Ast запускає програму, що містить системний

виклик:

link (Vusr / jim / memo "," / usr / ast / note ");

Тоді файл memo з каталогу j im з'явиться в каталозі ast під назвою note.

Відповідно, імена / usr / jim / memo та / usr / ast / note після цього будуть

посилатися на один і той же файл.

Можливо, стане зрозуміліше, що робить системний виклик link, якщо розібратися

в тому, як він працює. Кожен файл в UNIX має унікальний номер, який

ідентифікує файл. Цей номер є індекс у таблиці

вузлів (index nodes), або i-вузлів (i-nodes), що містить по одному індексному

вузлу на файл. Кожен індексний вузол включає в себе інформацію про

власника файлу, про те, які блоки на диску він займає і т. д. Каталог представляє

собою просто файл, що містить набір пар з номера індексного вузла та ASCII-

імені. У перших версіях UNIX кожен елемент каталогу займав 16 байт: 2 на

номер індексного вузла та 14 на ім'я. Для підтримки довгих імен файлів

потрібно більш складна структура, однак концептуально каталог

являє собою файл з парами номерів індексних вузлів і ASCII-імен. На рис. 1.10

файл mail має номер індексного вузла 16 і т. д. Дія виклику link

полягає в створенні нового елемента каталогу, ім'я якого, можливо, є

новим, а номер індексного вузла дорівнює номеру індексного вузла існуючими

існуючого файлу. два елементи мають однаковий номер індексного

вузла G0) і, таким чином, посилаються на один і той же файл. Якщо згодом один з них буде видалений за допомогою системного виклику unlink, інший

елемент залишиться. Якщо будуть видалені обидва файли, UNIX виявить, що більше

немає записів, які відповідають цьому файлу (поле в таблиці індексних вузлів

зберігає дані з номером елемента каталогу, що вказує на файл), і видалить

файл з диска.

Як згадувалося раніше, системний виклик mount дозволяє дві файлові

системи об'єднати в одну. Звичайна ситуація така: на жорсткому диску знаходиться

коренева файлова система, що містить двійкові (виконавчі) версії

загальних команд і найбільш часто використовуються файли. При цьому користувач

може вставити в дисковод компакт-диск з файлами для читання.

За допомогою системного виклику mount файлову систему з гнучкого диска можна

приєднати до кореневої файлової системи. Типових

Типова команда на мові С, виконує монтування, виглядає так:

mount ("/ dev / cdromO", "/ mnt", 0);

Тут першим параметром є ім'я спеціального блочного файлу на

диску 0, другий параметр - це місце в дереві, куди буде вмонтована файлова

система, а третій параметр говорить про те, монтується чи вбудована файлова

система для читання і запису або тільки для читання.

Після виклику mount доступ до файлу на диску 0 можна отримати, просто вказавши

його шлях з кореневого або робочого каталогу, незалежно від того, на якому диску

він знаходиться. Насправді другий, третій і четвертий диски теж

можна вбудувати в будь-який зручний місце в дереві. Виклик mount дозволяє об'єднати

знімні носії в єдину інтегровану файлову структуру, не піклуючись

про те, на якому з пристроїв фактично знаходиться файл. Хоча в нашому прикладі

розглядалися компакт-диски, жорсткі диски або їх частини, часто звані

розділами (partition), або другорядними пристроями (minor devices),

монтуються аналогічно. Коли файлова система більше не потрібна, її можна

демонтувати за допомогою системного виклику umount.

MINIX 3 підтримує блокове кешування, тобто система кешує в пам'яті

останні блоки, до яких були здійснені звернення, щоб уникнути

занадто частих звернень до диска. Якщо блок в кеші модифікований (наприклад,

викликом write) і система завалиться до того, як оновлений блок буде записаний

на диск, і файлова підсистема виявиться пошкодженою. Щоб знизити ризик

ушкодження, важливо періодично скидати вміст кешу на диск, щоб

в разі збою системи губилося тільки невелика кількість даних.

Системний виклик sync змушує MINIX 3 скинути на диск все кешовані блоки,

змінені з моменту зчитування. Зазвичай при старті MINIX разом з

системою запускається фонова програма update, кожні 30 секунд виконує

виклик sync.

Для роботи з каталогами служать ще два виклику, chdir і enroot. Перший з

них змінює поточний каталог, а другий кореневий. Наприклад:

chdir ("/ usr / ast / test");

Після цього виклику відкриття файлу xyz призведе до відкриття файлу / usг /

ast / test / xyz. Виклик enroot працює аналогічно. Як тільки процес

змінює кореневий каталог системи, все абсолютні шляхи (ті, які

починаються з символу /), починають вказувати на інший корінь. Ви запитаєте, для чого

це потрібно? З метою безпеки: серверні програми протоколів FTP (File

Transfer Protocol - протокол передачі файлів) і HTTP (HyperText Transfer

Protocol - протокол передачі гіпертексту) міняють кореневої каталог, щоб

зробити недоступними всі файли, що знаходяться в ієрархії вище. Правом

запуску виклику enroot володіють тільки суперкористувачі, але і вони

виконують його нечасто.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]