- •Практичне заняття 7
- •Введення
- •Розділи носія інформації (partitions) в unix
- •Логічна структура файлової системи і типи файлів в unix
- •Організація файлу на диску в unix на прикладі файлової системи s5fs. Поняття індексного вузла (inode)
- •Організація директорій (каталогів) в unix
- •Поняття суперблоку
- •Операції над файлами і директоріями
- •Системні виклики і команди для виконання операцій над файлами і директоріями
- •Спеціальні функції для роботи з вмістом директорій
- •Поняття про файли, що відображаються в пам'ять (memory mapped файлах). Системні виклики mmap(), munmap()
- •Аналіз, компіляція і прогін програми для створення memory mapped файлу і запису його вмісту Аналіз, компіляція і прогін програми для створення memory mapped файлу і запису його вмісту
- •Питання до захисту роботи
Організація директорій (каталогів) в unix
Вміст регулярних файлів (інформація, що знаходиться в них, і спосіб її організації) цілком визначається програмістом, що створює файл. На відміну від регулярних, решта типів файлів, що містять дані, тобто директорії і зв'язки, мають жорстко задану структуру і зміст, визначувані типом файлової системи, що використовується.
Основним вмістом файлів типу "директорія", якщо говорити на призначеній для користувача мові, є імена файлів, що лежать безпосередньо в цих директоріях, і відповідні їм номери індексних вузлів. В термінах уявлення у вигляді графа вміст директорій є іменами ребер, що виходять з вузлів, відповідних директоріям, разом з індексними номерами вузлів, до яких вони ведуть.
У файловій системі s5fs простір імен файлів (ребер) містить імена завдовжки не більше 14 символів, а максимальна кількість inode в одному розділі файлової системи не може перевищувати значення 65535. Ці обмеження не дозволяють давати файлам осмислені імена і приводять до необхідності розбиття великих жорстких дисків на декілька розділів. Зате вони допомагають спростити структуру зберігання інформації в директорії. Весь вміст директорії є таблицею, в якій кожний елемент має фіксований розмір в 16 байт. З них 14 байт відводиться під ім'я відповідного файлу (ребра), а 2 байти – під номер його індексного вузла. При цьому перший елемент таблиці додатково містить посилання на саму дану директорію під ім'ям ".", а другий елемент таблиці – посилання на батьківський каталог (якщо він існує), тобто на вузол графа, з якого виходить єдине іменоване ребро, що веде до поточного вузла, під ім'ям "..".
В більш сучасній файловій системі FFS (Fast File System) розмірність простору імен файлів (ребер) збільшена до 255 символів. Це дозволило використовувати практично будь-які мислимі імена для файлів (навряд чи знайдеться програміст, якому не лінь набиратиме для імені більше 255 символів), але довелося змінити структуру каталога (щоб зменшити його розміри і не берегти порожні байти). В системі FFS каталог є таблицею із записів змінної довжини. В структуру кожного запису входять: номер індексного вузла, довжина цього запису, довжина імені файлу і власне його ім'я. Два перші записи в каталозі, як і в s5fs, як і раніше адресують саму дану директорію і її батьківський каталог.
Поняття суперблоку
Ми вже торкнулися вмісту заголовка розділу, коли говорили про масив індексних вузлів файлової системи. Частину заголовка в s5fs, що залишилася, прийнято називати суперблоком. Суперблок береже інформацію, необхідну для правильного функціонування файлової системи в цілому. В ньому містяться, зокрема, наступні дані.
Тип файлової системи.
Прапори стану файлової системи.
Розмір логічного блоку в байтах (звичайно кратний 512 байтам).
Розмір файлової системи в логічних блоках (включаючи сам суперблок і масив inode).
Розмір масиву індексних вузлів (тобто скільки файлів може бути розміщено у файловій системі).
Число вільних індексних вузлів (скільки файлів ще можна створити).
Число вільних блоків для розміщення даних.
Частина списку вільних індексних вузлів.
Частина списку вільних блоків для розміщення даних.
В деяких модифікаціях файлової системи s5fs останні два списки виносяться за межі суперблоку, але залишаються в заголовку розділу. При першому ж зверненні до файлової системи суперблок звичайно цілком прочитується в адресний простір ядра для прискорення подальшого обігу. Оскільки кількість логічних блоків і індексних вузлів у файловій системі може бути вельми великою, недоцільно берегти списки вільних блоків і вузлів в суперблоці повністю. При роботі з індексними вузлами частина списку вільних вузлів, що знаходиться в суперблоці, поступово убуває. Коли список майже вичерпаний, операційна система сканує масив індексних вузлів і наново заповнює список. Частина списку вільних логічних блоків, що лежить в суперблоці, містить посилання на продовження списку, розташоване де-небудь в блоках даних. Коли ця частина виявляється використаною, операційна система завантажує на місце, що звільнилося, продовження списку, а блок, що застосовувався для його зберігання, переводиться в розряд вільних.
