Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вступ, ст 22-93.doc
Скачиваний:
5
Добавлен:
02.09.2019
Размер:
1.62 Mб
Скачать

Введення-виведення даних

У всіх комп'ютерах є фізичний пристрій для отримання вхідних даних і виведення інформації. Посудіть самі, що хорошого було б в комп'ютері, якщо б користувачі не могли сказати йому, що робити, і не могли отримати результу після завершення виконаної роботи? Існує багато видів пристроїв введення-виведення, наприклад клавіатури, монітори, принтери і т. д. Всіма ними повинна управляти операційна система. Кожна операційна система має свою підсистему введення-виведення для керування пристроями введення-виведення. Деякі з програм введення-виведення є незалежними від пристроїв, тобто їх можна застосувати до багатьох або до всіх пристроїв введення-виведення. Інша частина програмного забезпечення введення-виведення, в яку входять драйвери пристроїв, призначена для певних пристроїв введення-виведення. У розділі 5 ми розглянемо програмне забезпечення введення-виведення даних.

Файли

Файлова система - це ще одне ключове поняття, підтримуване віртуально усіма операційними системами. Як було відмічено раніше, основною

функцією операційної системи є приховування особливостей дисків та інших

пристроїв введення-виведення та надання користувачу зрозумілою і зручною

абстрактної моделі незалежних від пристроїв файлів. Системні виклики очевидно необхідні для створення, видалення, читання або запису файлів. Перед тим як

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

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

поняття каталогу (directory) як спосіб об'єднання файлів в групи. Наприклад,

студент може мати по одному каталогу для кожного досліджуваного ним курсу (для програм, необхідних у рамках цього курсу), каталог для електронної пошти,

і ще один - для своєї домашньої web-сторінки. Для створення і видалення

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

існуючого файлу в каталог і видалення файлу з каталогу. Вміст каталогів можуть становити файли або інші каталоги. Ця модель створює структуру - файлову систему, - як показано на рис. 1.14.

Ієрархії процесів і файлів організовані у вигляді дерев, але на цьому схожість закінчується. Ієрархія процесів зазвичай не дуже глибока (у ній рідко буває більше трьох рівнів), тоді як файлова структура досить часто має чотири, п'ять або навіть більше рівнів у глибину. Ієрархія процесів зазвичай живе дуже недовго, як правило, кілька хвилин, ієрархія каталогів може існувати роками. Належність та безпека також різні для процесів і файлів. Зазвичай тільки батьківський процес може керувати або навіть просто мати доступ до дочірнього процесу, проте практично завжди існує механізм, що дозволяє читати файли і каталоги не тільки власникові файлу, а більш широкій групі користувачів.

Кожний файл у ієрархії каталогів можна визначити, поставивши його ім'я шляху,

зване також повним ім'ям файлу. Шлях починається з вершини структури

каталогів, званої кореневим каталогом. Таке абсолютний шлях відбутися складається зі списку каталогів, які потрібно пройти від кореневого каталогу до файлу, з поділом окремих компонентів косою рисою. На рис. 1.14 шлях до файлу

CS101 виглядає як / Faculty / Prof .Brown/Courses/CS101. Перша слеш говорить про те, що цей шлях - абсолютний, тобто починається від кореневого каталогу.

В MS-DOS і Windows для розділення компонентів замість символу косою риси

використовується зворотній слеш (\). Тоді цей шлях буде виглядати так:

\ Faculty \ Prof.Brown \ Courses \ CS101. У нашій книзі для запису шляху ми в основному будемо використовувати угоди UNIX.

Рис. 1.14. Файлова система факультету університету

У кожний момент часу в кожного процесу є поточний робочий каталог,

в якому шукаються шляхи файлів, не починаються з косою риси. Наприклад, якщо на рис. 1.14 / Faculty / Prof.Brown є робочим каталогом, то використання

шляху Courses/CS101 дасть той же самий файл, що і абсолютний шлях, написаний

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

Інше важливе поняття в UNIX - це встановлена ​​(змонтована) файлова система. Майже всі персональні комп'ютери мають один або два дисковода для гнучких дисків, куди можна вставити і звідки можна вийняти диск. Щоб надати можливість спілкування зі змінними носіями (включаючи компакт-диски), UNIX дозволяє приєднувати файлову систему змінного диска до головному дереву. Розглянемо ситуацію на рис. 1.15, а. Перед викликом системної процедури mount коренева файлова система на жорсткому диску і друга файлова система на гнучкому диску існують окремо і ніяк не пов'язані між собою.

Рис. 1.15. Перед установкою файли на диск 0 недоступні (а); після монтування

вони стають частиною загальної файлової структури (б)

Однак файли на гнучкому диску можна використовувати, тому що для них

неможливо визначити шлях. UNIX не дозволяє приєднувати до початку шляху назву диска або його номер, оскільки це призвело б до жорсткої залежності від пристроїв, якої операційна система повинна уникати. Замість цього системний виклик mount дозволяє приєднувати файлову систему на гнучкому диску до кореневої файлової системи в тому місці, де цього захоче програма. На рис. 1.15, б файлова система гнучкого диска була встановлена ​​в каталог Ь, таким чином, забезпечено доступ до файлів по путям/6/х/і/й/г /. Якщо каталог b містив будь-які

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

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

Ще одне важливе поняття в UNIX - це спеціальний файл. Спеціальні файли служать для того, щоб пристрої введення-виведення виглядали як файли. При

це можна прочитати інформацію зі спеціальних файлів або записати її туди

за допомогою тих же самих системних викликів, що використовуються для читання і запису файлів. Існує два види спеціальних файлів: блочні спеціальні

файли і символьні спеціальні файли. Блокові спеціальні файли використовуються для моделювання пристроїв, що складаються з набору довільно адресованих блоків, таких як диски. Відкриваючи блоковий спеціальний файл і читаючи, скажімо, блок 4, програма може напряму отримати доступ до четвертого блоку на

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

чином символьні спеціальні файли використовуються для моделювання принтерів, модемів та інших пристроїв, які приймають або видають потік символів. За угодою спеціальні файли зберігаються в каталозі / dev. Наприклад,

/ Dev / lp може бути строковим принтером. І останнє поняття, яке ми обговоримо у вступі, - це канали (pipe), мають відношення і до процесів і до файлів. Канал (також іноді званий трубою) являє собою псевдофайл, який можна використовувати для зв'язку двох процесів, як показано на рис. 1.16. Якщо процеси Л і В захочуть поспілкуватися з допомогою каналу, вони повинні встановити його заздалегідь. Коли процес А хоче відправити дані процесу В, він пише їх в канал, як якщо б це був вихідний файл. Процес В може прочитати дані, читаючи їх з каналу, як якби він був файлом з вхідними даними. Таким чином, з'єднання між процесами в UNIX виглядає дуже схожим на звичайне читання і запис файлів. Більш того, тільки зробивши спеціальний системний виклик, процес може виявити, що вихідний файл, в який він пише дані, не реальний файл, а канал. Файлові системи дуже важливі. Ми розповімо про них значно більше в розділі 6, а також в главах 10 і 11.