
- •Практичне заняття 8 Організація уведення-виведення в unix. Файли пристроїв. Апаратні переривання
- •Операції над файловими системами. Монтування файлових систем
- •Блокові, символьні пристрої. Поняття драйвера. Блокові, символьні драйвери, драйвери низького рівня. Файловий інтерфейс
- •Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка
- •Поняття сигналу. Способи виникнення сигналів і види їх обробки
- •Поняття групи процесів, сеансу, лідера групи, лідера сеансу, управляючого терміналу сеансу. Системні виклики getpgrp(), setpgrp(), getpgid(), setpgid(), getsid(), setsid()
- •Системний виклик kill() і команда kill
- •Вивчення особливостей отримання термінальних сигналів поточною і фоновою групою процесів
- •Системний виклик signal(). Установка власного обробника сигналу
- •Прогін програми, що ігнорує сигнал sigint
- •Прогін програми з призначеною для користувача обробкою сигналу sigint
- •Відновлення попередньої реакції на сигнал
- •Сигнали sigusr1 і sigusr2. Використовування сигналів для синхронізації процесів
- •Завершення породженого процесу. Системний виклик waitpid(). Сигнал sigchld
- •Прогін програми для ілюстрації обробки сигналу sigchld
- •Виникнення сигналу sigpipe при спробі запису в pipe або fifo, який ніхто не збирається читати
- •Поняття про надійність сигналів. Posix функції для роботи з сигналами
- •Питання до захисту роботи
Практичне заняття 8 Організація уведення-виведення в unix. Файли пристроїв. Апаратні переривання
Мета: ознайомитися та здійснити практичне використання наступних груп понять: Поняття віртуальної файлової системи. Операції над файловими системами. Монтування файлових систем. Блокові, символьні пристрої. Поняття драйвера. Блокові, символьні драйвери, драйвери низького рівня. Файловий інтерфейс. Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка. Поняття сигналу. Способи виникнення сигналів і види їх обробки. Поняття групи процесів, сеансу, лідера групи, лідера сеансу, управляючого терміналу сеансу. Системні виклики getpgrp(), setpgrp(), getpgid(), setpgid(), getsid(), setsid() Системний виклик kill і команда kill(). Системний виклик signal(). Установка власного обробника сигналу. Відновлення попередньої реакції на сигнал. Сигнали SIGUSR1 і SIGUSR2. Використовування сигналів для синхронізації процесів. Завершення породженого процесу. Системний виклик waitpid(). Сигнал SIGCHLD. Виникнення сигналу SIGPIPE при спробі запису в pipe або FIFO, який ніхто не збирається читати. Поняття про надійність сигналів. POSIX-функції для роботи з сигналами.
Поняття віртуальної файлової системи
Кілька попередніх практичних занять були присвячені будові файлової системи s5fs. Існують і інші файлові системи, що мають архітектуру, відмінну від архітектури s5fs (інші способи відображення файлу на простір фізичного носія, інша побудова директорій і т.д.). Сучасні версії UNIX-подібних операційних систем уміють працювати з різноманітними файловими системами, що розрізняються своєю організацією. Така можливість досягається за допомогою розбиття кожної файлової системи на залежну і незалежну від конкретної реалізації частини, подібно тому, як в лекції 13, присвяченої питанням уведення-виведення, ми відділяли апаратно-залежні частини для кожного пристрою – драйвери – від загальної базової підсистеми уведення-виведення. Незалежні частини всіх файлових систем однакові і представляють для всієї решти елементів ядра абстрактну файлову систему, яку прийнято називати віртуальною файловою системою. Залежні частини для різних файлових систем можуть вбудовуватися в ядро на етапі компіляції, або додаватися до нього динамічно в міру необхідності, без перекомпіляції системи (як в системах з мікроядерною архітектурою).
Розглянемо схематично будову віртуальної файлової системи. У файловій системі s5fs дані про фізичне розташування і атрибути кожного відкритого файлу представлялися в операційній системі структурою даних в таблиці індексних вузлів відкритих файлів, що містить інформацію з індексного вузла файлу у вторинній пам'яті. У віртуальній файловій системі, на відміну від s5fs, кожний файл характеризується не індексним вузлом inode, а деяким віртуальним вузлом vnode. Відповідно, замість таблиці індексних вузлів відкритих файлів в операційній системі з'являється таблиця віртуальних вузлів відкритих файлів. При відкритті файлу в операційній системі для нього заповнюється (якщо, звичайно, не був заповнений раніше) елемент таблиці віртуальних вузлів відкритих файлів, в якому зберігаються, як мінімум, тип файлу, лічильник числа відкриттів файлу, покажчик на реальні фізичні дані файлу і, обов'язково, покажчик на таблицю системних викликів, що скоюють операції над файлом, – таблицю операцій. Реальні фізичні дані файлу (рівно як і спосіб розташовує файлу на диску і т.п.) і системні виклики, реально виконуючі операції над файлом, вже не є елементами віртуальної файлової системи. Вони відносяться до однієї із залежних частин файлової системи, оскільки визначаються її конкретною реалізацією.
При виконанні операцій над файлами по таблиці операцій, чия адреса міститься в vnode, визначається системний виклик, який буде насправді виконаний над реальними фізичними даними файлу, чия адреса також знаходиться в vnode. У випадку з s5fs дані, на які посилається vnode, – це якраз дані індексного вузла. Помітимо, що таблиця операцій є загальною для всіх файлів, що належать одній і тій же файловій системі.