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

Інтерфейс між операційною системою та користувацькими програмами

визначається набором «розширених інструкцій», що надаються системою.

За традицією ці розширені інструкції називають системними викликами,

хоча зараз для їх реалізації використовуються декілька різних способів. Щоб

дійсно зрозуміти, що може робити операційна система, потрібно

ретельно вивчити цей інтерфейс. Підтримувані виклики у різних операційних

систем можуть значно відрізнятися (хоча ховаються за ними концепції

виявляються схожими).

Таким чином, при описі основних концепцій, що відносяться до

операційним системам, нам довелося робити вибір між розмитими

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

файлів ») і специфікою конкретної системи (« MINIX 3 підтримує системний

виклик READ з трьома параметрами: один вказує, який файл буде братися

, інший - куди помістити лічені дані, а третій задає кількість

зчитувальних байтів »).

Ми вибрали другий підхід. Він складніше, але дає набагато більше в плані

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

більш детальний огляд основних системних викликів, підтримуваних UNIX

(Включаючи різні версії BSD), LINUX і MINIX 3. Для простоти ми будемо

розглядати тільки MINIX 3, але в більшості випадків відповідні

виклики UNIX і LINUX теж засновані на стандарті POSIX. Однак перед

розглядом реальних системних викликів має сенс дати загальний огляд MINIX 3,

щоб відчути, що це за система. Цей огляд в рівній мірі застосовний і до UNIX і LINUX.

Системні виклики MINIX 3 можна розділити на дві категорії: виклики

для роботи з процесами та виклики для роботи з файловою системою. Розглянемо кожну з цих груп.

      1. Процеси

Ключове поняття MINIX 3 і будь-який інший операційної системи - процес.

Процесом, по суті, називають програму в момент її виконання. З

кожним процесом пов'язується його адресний простір - список адрес в

пам'яті від деякого мінімуму (зазвичай нуля) до деякого максимуму, які

процес може прочитати і в які він може писати. Адресний простір

містить саму програму, дані до неї і її стек. З кожним процесом

зв'язується якийсь набір регістрів, включаючи лічильник команд, вказівник стека і інші

апаратні регістри, плюс вся інша інформація, необхідна для

запуску програми.

Ми більш детально розглянемо поняття процесу в розділі 2, але зараз для того,

щоб інтуїтивно усвідомити, що це таке, згадаємо про багатозадачних системах.

Припустимо, що операційна система періодично вирішує зупинити

роботу одного процесу і запустити другий, бо перший витратив

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

секунду.

Якщо процес був припинений подібним чином, пізніше він повинен бути

запущений заново з того ж стану, в якому його зупинили. Отже, всю

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

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

декілька файлів. Пов'язаний з кожним файлом покажчик дає поточну

позицію (тобто номер байта або записи, які будуть прочитані наступними).

При призупинення процесу всі покажчики потрібно зберегти так, щоб команда

читання, виконана після поновлення виконання процесу, прочитала

правильні дані. У багатьох операційних системах вся інформація кожного

процесу, що доповнює вміст його власного адресного простору,

зберігається в таблиці операційної системи. Ця таблиця називається таблицею

процесів і являє собою масив (або пов'язаний список) структур, по

одній на кожен існуючий в даний момент процес.

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

простору, зазвичай званого чином пам'яті, і компонентів

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

Головними системними викликами, які керують процесами, є виклики,

пов'язані зі створенням та завершенням процесів. Розглянемо типовий

приклад. Процес, званий інтерпретатором команд, або оболонкою (shell),

читає команди з терміналу. Користувач щойно надрукував команду, що містить

містить запит на компіляцію програми. Після цього оболонка повинна створити

новий процес, який запустить компілятор. Коли процес закінчить

компіляцію, він виконає системний виклик, завершальний його власну роботу.

У Windows та інших операційних системах, оснащених графічним

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

робочому столі, запускає програму майже так само, як якщо б ви ввели її ім'я

у командному рядку. Хоча ми й не будемо приділяти багато уваги графічним

інтерфейсам користувача, вони, насправді, є прості інтерпретатори команд.

Якщо процес може створювати кілька інших процесів (що називаються

дочірніми), а ці процеси, в свою чергу, теж можуть створити дочірні

процеси, перед нами постає дерево процесів (рис. 1.5). Пов'язані процеси -

це процеси, які об'єднані для вирішення деякої задачі, і їм

потрібно часто передавати дані від одного до іншого і синхронізувати свою

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

обговорюватися в розділі 2.

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

додаткової пам'яті (або звільнення тої що не використовується пам'яті),

очікуванні завершення дочірніх процесів і оверлейного виконанні програми

разом з іншою.

Час від часу необхідно передавати інформацію працює процесу

так, щоб він не простоював в очікуванні отримання цієї інформації.

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

це, посилаючи повідомлення по мережі. Щоб запобігти можливості втрати

повідомлення або відповіді на нього, відправник може вимагати від власної

операційної системи повідомлення, якщо після закінчення певного інтервалу

очікування не буде отримано підтвердження про отримання повідомлення. В цьому

випадку він зможе повторити відправлення повідомлення. Після установки таймера

програма продовжить виконання іншої роботи.

Якщо після закінчення певної кількості секунд відповіді немає, операційна

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

зупинку роботи процесу незалежно від того, що процес робить в даний

момент; зберігає його регістри в стеку і запускає спеціальну процедуру

обробки сигналу (наприклад, передавальну повторно імовірно

втрачене повідомлення). Після завершення обробки сигналу працює процес

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

Сигнали є програмними аналогами апаратних переривань і можуть бути

згенеровані з різних причин, а не тільки через закінчення

будь-якого інтервалу часу. Багато апаратні переривання (наприклад, викликані

виконанням неприпустимою команди або використанням неправильного

адреси) також перетворюються в сигнали, що направляються процесу, що є

джерелом помилки.

Кожному користувачеві, якому дозволено працювати з системою MINIX 3,

системний адміністратор присвоює ідентифікатор користувача (User IDentification,

UID). У кожного працюючого процесу є ідентифікатор користувача,

запустив процес. Дочірній процес отримує той же самий ідентифікатор

користувача, що і його батько. Користувачі можуть бути членами груп, кожній

з яких присвоюється ідентифікатор групи (Group IDentification, GID).

Користувач з особливим ідентифікатором користувача, званий в UNIX суперкористувачем (superuser), має особливі повноваження і може ігнорувати безліч правил захисту. У великих системах тільки системний адміністратор знає пароль, необхідний для того, щоб стати суперкористувачем. Однак безліч звичайних користувачів (особливо студентів) витрачають масу часу і сил на пошуки прогалин у системі захисту, які дозволили б їм стати суперкористувача без пароля. Процеси, міжпроцесорна взаємодія і супутні питання

розглядаються в розділі 2.

      1. Файли

Інша велика група системних викликів відноситься до файлової системи. Як

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

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

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

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

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

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

функції здійснюють системні виклики.

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

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

Наприклад, студент може мати по одному каталогу для кожного досліджуваного їм

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

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

і видалення каталогів також необхідні системні виклики. Вони ж

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

Вміст каталогів можуть становити файли або інші каталоги. Ця

модель утворює ієрархію - файлову систему

Ієрархії і процесів, і файлів організовані у вигляді дерев, проте на цьому

їх схожість закінчується. Ієрархія процесів зазвичай не дуже глибока (в ній

рідко буває більше трьох рівнів), тоді як файлова структура досить

часто має чотири, п'ять або навіть більше рівнів в глибину. Ієрархія процесів

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

каталогів може існувати роками. Механізми приналежності та захисту

також різні для процесів і файлів. Зазвичай тільки батьківський процес

може керувати дочірнім процесом або навіть просто мати до нього доступ, в то

Водночас практично завжди існує механізм, що дозволяє читати файли

і каталоги не тільки власнику файлу, але і більш широкій групі користувачів.

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

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

каталогів, званої кореневим каталогом. Таке абсолютний шлях відбутися у-

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

з поділом окремих компонентів косою рисою. На рис. 1.6 шлях до файлу

CS101 виглядає як / Faculty / Prof. Brown / Courses / CSlOl. Перша коса

риса говорить про те, що цей шлях - абсолютний, тобто починається від

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

косою риси використовується символ зворотної косою риси (\). Тоді цей шлях

буде виглядати так: \ Faculty \ Prof. Brown \ Courses \ CS101. У нашій книзі

для запису шляху ми в основному будемо використовувати угоди UNIX.

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

якому шукаються імена шляхів, не починаються з косою риси. Наприклад, якщо на

рис. 1.6 каталог / Faculty / Prof. Brown є робочим, то використання

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

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

В операційній системі MINIX 3 кожного файлу і каталогу присвоюється

І-розрядний двійковий код захисту. Код захисту включає три 3-розрядних поля:

одне - для власника, одне - для інших членів групи власника (розбиття

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

одне - для всіх інших користувачів. Два залишилися біта ми розглянемо

пізніше. У кожному полі є біт доступу по читанню, біт доступу по запису і

біт доступу по виконанню. Ці три біта в сукупності називають rwx-бітами

Для каталогу, на відміну від файлу, доступ по виконанню означає можливість пошуку. Прочерк вказує на відсутність дозволу (значення відповідного біта одно 0).

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

перевіряється дозвіл доступу. Якщо доступ дозволений, система повертає

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

подальших операціях. Якщо доступ заборонений, то повертається код помилки (-1).

Інше важливе поняття в MINIX 3 - це змонтована файлова система.

Майже всі персональні комп'ютери мають один або кілька дисководів

для компакт-дисків, куди можна вставити і звідки можна вийняти диск.

Щоб надати можливість спілкування зі змінними носіями (CD-дисками,

DVD-дисками, дискетами, Zip-дисками), MINIX 3 дозволяє приєднувати

файлову систему змінного диска до головного дереву. Розглянемо ситуацію. Перед викликом системної процедури mount коренева файлова система на жорсткому диску і друга файлова система на компакт-диску існують окремо і ніяк не пов'язані між собою.

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

неможливо визначити шлях. MINIX 3 не дозволяє приєднувати до початку шляху

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

від пристроїв, якою операційна система повинна уникати. Замість цього

системний виклик mount дозволяє приєднувати файлову систему на гнучкому

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

файлова система диска 0 встановлена ​​в каталог Ь, таким

чином, забезпечено доступ до файлів по шляхах / b / х / і / b / у. Якщо каталог b

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

диск, тому що тепер ім'я / Ь посилається на кореневий каталог диска 0. (Неможливе

(Неможливість доступу до цих файлів не так страшна, як здається з першого

погляду: файлові системи майже завжди встановлюються в порожні каталоги.) Якщо

система містить кілька жорстких дисків, вони всі можуть бути вбудовані в

одне дерево таким же чином.

Ще одне важливе поняття в MINIX 3 - це спеціальний файл. Спеціальні

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

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

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

і запису файлів. Існує два види спеціальних файлів: блокові

спеціальні файли і символьні спеціальні файли. Блокові спеціальні файли

використовуються для моделювання пристроїв, що складаються з набору довільної

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

і читаючи, скажімо, блок 4, програма може безпосередньо отримати доступ до блоку 4

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

же чином символьні спеціальні файли використовуються для моделювання

принтерів, модемів та інших пристроїв, які приймають або видають потік

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

Наприклад, файл / dev / lp може бути строковим принтером.

І останнє поняття, яке ми тут обговоримо, - це канали (pipe), що мають

ставлення і до процесів, і до файлів. Канал (також іноді званий трубою)

являє собою псевдофайл, який можна використовувати для зв'язування

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

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

вихідний файл, в який він пише дані, - це не реальний файл, а канал.

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