
- •Поняття операційної системи
- •Операційна система як розширена машина
- •Операційна система як менеджер ресурсів
- •Історія розвитку операційних систем
- •Перше покоління (1945-1955): електронні лампи і комутаційні панелі
- •Друге покоління (1955-1965): транзистори і системи пакетної обробки
- •Третє покоління (1965-1980): інтегральні схеми і багатозадачність
- •Четверте покоління (з 1980 року по наші дні): персональні комп'ютери
- •Історія minix 3
- •Основні концепції
- •Процеси
- •Оболонка
- •Системні виклики
- •Системні виклики для управління процесами
- •Системні виклики для управління сигналами
- •Системні виклики для управління файлами
- •Системні виклики для управління каталогами
- •Системні виклики для захисту
- •Системні виклики для управління часом
- •Структура операційної системи
- •1.5.2. Багаторівневі системи
- •1.5.3. Віртуальні машини
- •1.5.4. Екзоядра
- •1.5.5. Модель клієнт-сервер
- •2.1.1. Модель процесів
- •2.1.2. Створення процесів
- •2.1.3. Завершення процесів
- •2.1.4. Ієрархії процесів
- •2.1.5. Стани процесів
- •2.1.6. Реалізація процесів
- •2.1.7. Програмні потоки
- •2.2. Взаємодія між процесами
- •5.1. Файли
- •5.1.1. Іменування файлів
- •5.1.2. Структура файлу
- •5.1.3. Типи файлів
- •5.1.4. Доступ до файлів
- •5.1.5. Атрибути файлів
- •5.1.6. Операції з файлами
- •5.2. Каталоги
- •5.2.1. Прості каталоги
- •5.2.2. Ієрархічні системи каталогів
- •5.2.3. Шляхи
- •5.2.4. Операції з каталогами
- •5.3. Реалізація файлової системи
- •5.3.1. Структура файлової системи
- •5.3.2. Реалізація файлів
- •5.3.4. Організація дискового простору
5.2.3. Шляхи
При організації файлової системи у вигляді дерева каталогів потрібно якийсь
спосіб вказівки файлу. Для цього зазвичай використовують два методи. У першому
разі звернення до файлу виконується за абсолютним шляху, складеним з імен всіх каталогів від кореневого до того, в якому міститься файл, і імені самого файлу. Наприклад, шлях / usr / ast / mailbox означає, що кореневої каталог містить підкаталог us г, в який, в свою чергу, вкладений підкаталог ast, де знаходиться файл mailbox. Абсолютні шляху завжди починаються від кореневого каталогу і є унікальними. В UNIX компоненти шляху розділяються косою рисою (/). У Windows як роздільник прийнята зворотна коса
риса (\). Таким чином, одне і те ж ім'я шляху в цих операційних системах
буде виглядати наступним чином:
Windows:
\ Usr \ ast \ mailbox
♦ UNIX:
/ Usr / ast / mailbox
Якщо першою літерою імені шляху був роздільник, незалежно від використовуваного
як роздільник символу, це означало, що шлях абсолютний. Крім абсолютного застосовують і відносний шлях. Відносний шлях безпосередньо пов'язаний з концепцією робітника, або поточного, каталогу. Користувач може призначити один з каталогів поточним (робочим) каталогом. В цьому випадку всі імена шляхів без початкового символу роздільника вважаються відносними і відраховуються щодо поточного каталогу. Наприклад, якщо поточним каталогом є / usr / ast, тоді до файлу з абсолютним шляхом
/ Usr / ast / mailbox можна звернутися просто як до mailbox. Іншими словами, якщо робочим каталогом є / usr / ast, наступні UNIX-команди виконають одне й те саме:
ср / usr / ast / mailbox / usr / ast / mailbox.bak
ср mailbox mailbox.bak
Відносна форма завдання шляху часто виявляється більш зручною, хоча вона увазі те саме, що і абсолютна. Деяким програмам потрібен доступ до файлів незалежно від того, який каталог є в даний момент поточним. В цьому випадку вони завжди повинні
вказувати абсолютні імена. Наприклад, програму перевірки правопису може
знадобитися для виконання роботи прочитати файл / usr / lib / dictionary.
В цьому випадку вона повинна використовувати абсолютне ім'я файлу, оскільки
заздалегідь невідомо, яким буде робочий каталог при її виклику. Абсолютна
назва файлу буде працювати завжди, незалежно від того, який каталог є поточним.
Якщо програмі перевірки правопису знадобиться велика кількість файлів з каталогу / usr / lib, вона може, звернувшись до операційної системи, поміняти робочий каталог на / usr / lib, після чого вказувати просто ім'я dictionary в якості першого аргументу системного виклику open. Явно вказавши свій робочий каталог, програма може використовувати надалі відносні імена, оскільки точно знає, де вона знаходиться в дереві каталогів.
У кожного процесу є свій робочий каталог, тому, коли процес змінює свій робочий каталог і потім завершує роботу, це не впливає на роботу інших процесів, і в файлової системи не залишається ніяких слідів від подібних змін. Таким чином, процес може без побоювань міняти свій робочий каталог, коли це йому зручно. З іншого боку, якщо бібліотечна процедура поміняє свій робочий каталог і не відновить його при поверненні управління,програма, яка викликала таку процедуру, може виявитися не в змозі
продовжувати свою роботу, так як її припущення про поточний каталог виявляться
невірним. З цієї причини бібліотечні процедури рідко змінюють робочі каталоги, а коли все-таки міняють, обов'язково відновлюють старе ім'я перед поверненням управління.
Більшість операційних систем, що підтримують ієрархічні каталоги, мають спеціальні записи в кожному каталозі, які означають поточний (.) і батьківський (..) каталог
Для деякого процесу каталог / usr / ast є робочим. Тоді процес може використовувати дві точки (..), щоб вказати на необхідність переміститися вгору по дереву. Наприклад, він може копіювати файл / usr / lib / dictionary у власний каталог за допомогою команди
ср .. / lib / dictionary
Дві точки є інструкцією системі піднятися вгору (в каталог usr). Після цього потрібно відкрити каталог lib і знайти в ньому файл dictionary. Другий варіант позначення (.) Вказує на поточний каталог. Коли команда отримує ім'я каталогу (включаючи крапку) в якості останнього аргументу, вона копіює в нього всі файли. Зрозуміло, більш адекватним способом копіювання є команда
ср usr / lib / dictionary.
Тим не менше з тим же успіхом ви можете набрати будь-яку з двох наступних
команд:
ср / usr / lib / dictionary dictionary
ср / usr / lib / dictionary / usr / ast / dictionary
Всі три команди роблять в точності одне й те саме.