О.М.Хошаба
ОПЕРАЦІЙНІ СИСТЕМИ
КОМП’ЮТЕРНИХ МЕРЕЖ
УДК 621.3.06(075)
Х87
Рецензенти:
В.П. Кожем’яко, доктор технічних наук професор
С.М. Захарченко, кандидат технічних наук, доцент
І.І. Хаімзон, доктор технічних наук, професор
Рекомендовано до видання Вченою радою Вінницького національного технічного університету Міністерства освіти і науки України
О.М. Хошаба
X 87 Операційні системи комп’ютерних мереж. - Вінниця: ВНТУ, 2004 - 115 с.
В навчальному посібнику значна увага приділяється вивченню мережевих механізмів операційних систем з використанням комунікаційний методів. Подані приклади роботи програм з мережевими структурами операційних систем на мовах високого рівня С та Java, Описані методи роботи з функціями введення/виведення мережевої операційної системи Unix. Розглянута загальна характеристика відомих мережевих операційних систем FreeBSD та Solaris. Посібник розроблений у відповідності з планом кафедри та програмами дисциплін «Операційні системи комп’ютерних мереж».
УДК 621.3.06(075)
О.М. Хошаба, 2004
ЗМІСТ
Вступ………………………………………………………………………………..6
Розділ 1. Загальні відомості про операційну систему Unix……………………..8
Ядро і процесори………………………………………………………………….10
Диспетчер мережевої ОС UNIX…………………………………………………12
Процеси мережевої ОС UNIX……………………………………………..………..12
Дескриптор і контекст процесу……………………………………………………..12
Ієрархія процесів…………………………………………………………………….13
Ідентифікатори процесу……………………………………………………………..14
Групи процесів ОС UNIX………………………………………………………...…15
Взаємодія процесів (“батьки”, “діти”, “сироти”, “зомбі”)………………………...15
“Процеси - демони”…………………………………………………….....................16
Контрольні питання………………………………………………………………….17
Контрольні вправи…………………………………………………………………..17
Міжпроцесні комунікації……………………………………………………………19
Сигнали……………………………………………………………...………………..19
Семафори…………………………………………………………………………..…23
Програмні канали……………………………………………………………………24
Черги повідомлень………………………………………………………..………….30
Розподілена пам’ять…………………………………………………………………30
Контрольні питання……………………………………………………….………...31
Контрольні вправи…………………………………………………………………..31
Багатокористувачевий захист……………………………………………..………..32
Ідентифікатори користувача і групи………………………………………………32
Привілейований користувач………………………………………………………..33
Ефективні і реальні ідентифікатори………………………………………….……33
Знайомство з механізмом стопінгу та пейджингу…………………..……..….….34
Загальний механізм роботи……………………………………………………..…34
Буфер кеш – памяті…………………………………………….………..…………36
Переваги і недоліки буферного кешу………………………………..……………37
Контрольні питання …………………………………………………………….….38
Контрольні вправи…………………………………………………………….…....39
Керування веденням/виведенням…………………………………………...……..39
Спеціальні файли операційної системи UNIX………………………...………….40
Взаємодія драйверів з програмним та апаратним середовищем…………………41
Функція loctl………………………………………………………………………....43
Структура таблиці bsdevsw…………………………………………………………44
Конфігурування ядра……………………………………………...…………………46
Контрольні питання …………………………………………………..……………48
Контрольні вправи…………………………………………………………………48
Розділ 2. Файлова система………………………………………...…………….…49
2.1 Поняття про звичайні файли………………………….……………………….50
2.2 Поняття каталогів………………………………………………………...…….51
2.2.1 Кореневий каталог / …………………………………………………….……53
2.2.2 Каталог / var………………………………………………………………..…54
2.2.3 Каталог / etc………………………………………………………………..…54
2.2.4 Каталог /usr……………………………………………………………………54
2.2.5 Каталог /home/(/export/home) …………………………………………….…54
2.2.6 Каталог /opt/(/ opti ,/opt2, …/optn) ……………………………………….…55
2.3 Сучасні механізми роботи з оперативною пам’яттю………………………..55
2.3.1 Призначення спеціального розділу SWAP………………………………….55
2.3.2 Рекомендації по керуванню розділу swap…………………………………..56
2.3.3 Команди керування swap розділом…………………………………………56
2.3.4 Додатковий моніторинг використання swap………………………………. 57
2.4 Поняття про спеціальні файли ……………………………………………..…58
2.4.1 Клас пристрою спеціальних файлів…………………………………………58
2.4.2 Тип і номер спеціальних файлів……………………………………..………58
2.4.3 Зв’язок фізичної і логічної структур дискового простору…………………58
2.5 Створення файлової системи мережевих ОС………………………...………59
2.6 Монтовність і демонтовність файлових систем…………………….………..60
2.6.1 Дискові пристрої в ОС UNIX……………………………………………..…62
Контрольні питання………………………………………………………………...64
Контрольні вправи…………………………………………………………………64
2.7 Внутрішня структура мережевих операційних систем……………….…...…65
2.7.1 Розподіл дискового простору………………………………….…………….65
2.7.2 Індексні дескриптори………………………………………………………..66
2.8 Системні виклики мережевих операційних систем для роботи з файлами…………………………………………………………………….………73
2.8.1 Функція відкриття файлу (open) ……………………………...……………76
2.8.2 Функція створення файлу (create) …………………………………………77
2.8.3 Функція роботи з дескриптором відкритого файлу (dup) ………………………………………………………………………………………77
2.8.4 Функція читання (read) ………………………………………...……………78
2.8.5 Функція захоплення процесів (fсntl) та записів (write) ……………………79
2.8.6 Функція знаходження необхідної позиції у файлі…………………………80
2.8.7 Функція закриття файлу (close) ………………………………………….…81
2.8.8 Стандартні бібліотечні функції введення/виведення………………………81
2.8.9 Потокові функції введення/виведення…………………………………...…82
2.8.10 Бібліотечні функції доступу до файлів……………………………………82
Контрольні питання ……………………………………………………………….84
Контрольні вправи…………………………………………………………………84
2.9 Приклади програмування на Java для роботи з файловими мережевими системами. Файлові об’єкти………………………………………………………86
2.9.1 Функції виведення записів…………………………………………….……89
2.9.2 Буферизоване виведення інформації……………………………….………89
2.9.3 Клас FileOutputStream…………………………………………………….…89
2.9.4 Функції операції читання……………………………………………………91
2.9.5 Клас FileInputStream………………………………………………………...94
2.9.6 Операції довільного доступу до файлів……………………………………94
2.9.7 Методи читання і запису даних до мережевих файлових систем…….….95
2.10 Мережеві комунікації операційних систем………………………………...96
Контрольні питання ………………………………………………………………100
Контрольні вправи………………………………………………………………...100
2.11 Загальна характеристика відомих представників мережевих операційних систем…………….……………………………………………………………………100
Контрольні питання……………………………………………………………..…116
Література…………………………………………………………………………..118
ВСТУП
Операційна система (ОС) UNIX вважається досить ефективною у роботі з мережевою платформою для будь-якого типу серверу: локального, корпоративного або глобального. Звісно поряд з іншими операційними система, UNIX має свої переваги та недоліки. Правила,яких дотримуються більшість професіоналів, говорить про те, що будь-який програмний засіб (в тому числі і операційні системи) необхідно використовувати там, де вони будуть найефективнішими у використанні.
З впевненістю можна сказати, що операційна система UNIX є лідером в управлінні локальними, корпоративними та глобальними серверами. На думку багатьох фахівців, завдяки тому, що ОС Windows розробляється однією фірмою Microsoft, темпи її прогресивних наробок будуть повільно ще багато років.
Незважаючи на великий консерватизм у відношення засобів адміністрування і відновлення версій, UNIX залишається досить потужною мережевою операційною системою.
На користь всебічного вивчення мережевих властивостей ОС UNIX вказує те, що більшість із провідних сучасних інформаційних технологій зародилися та розвинулись саме в її середовищі: TCP/IP, E-Mail, Internet, Intranet, протокол HTTP, мова HTML, глобальна світова павутина Web. Усі ці технології вийшли з лона UNIX.
Становище, яке відбувається зараз в області інформаційних і комп’ютерних технологій багато фахівців називають революцією. Рушаться незламні монополії та авторитети, на зміну їм приходять молоді компанії, що стрімко розвиваються. Програмне забезпечення і новітні покоління комп’ютерів захоплюють усі нові і нові сектори ринку, і потік інвестицій, вкладених у сучасні інформаційні технології, стрімко росте. Процесори, запам’ятовувальні пристрої і мікросхеми досягли такого рівня надійності і компактності, що ввійшли в побутову техніку. Програми на мові високого рівня C та Java можуть масштабуватися, тобто виконуватися на будь-якій платформі: від _ласс-карти до мейнфрейма.
Мережі комп’ютерів стали вже настільки звичною справою, що без них не проектується жодна система. У цих умовах різко підвищується частка відповідальності системних інтеграторів і системних адміністраторів, що обслуговують потужні корпоративні сервери. Зараз усе більші і більше зявляється Internet провайдерів і обчислювальних центрів. Більш серйозну увагу викликає основна платформа операційної системи Unix – BSD, поширюється Linux. Тому, сьогодні UNIX – є найпотужнішою мережевою операційною системою, яка також здатна працювати з X Windows (графічним UNIX), TCP/IP, Emacs, UUCP,mail і USENET. Адже в сутності своїй UNIX – це система колективного користування, що найповніше відповідає концепціям Internet/Intranet/Extranet.
Тому майбутнє в новітніх інформаційних технологіях вважається за кваліфікованими системними адміністраторами, інтеграторами та мережевими фахівцями.
У попередніх виданнях [1-3] при підготовці навчального посібника перед нами стояли цілі ознайомити студентів з принципами загальної роботи і змістовно описати механізми функціонування ОС UNIX. Цілі даного навчального посібника стоять принципово інші. До найважливіших з них можна віднести:
мережеві властивості ОС Unix;
відмінності ОС Unix від інших платформ;
характерні особливості у роботі та управлінні комунікаційними
процесами;
управління інформаційними ресурсами ОС Unix за допомогою мов
високого рівня С та Java;
управління ресурсами ОС Unix за допомогою стандартних команд;
загальна характеристика відомих представників мережевих ОС.
Тому в главі 1 «Архітектура сучасної UNIX» подана інформація про структуру та типові функції, що надані користувачу ОС UNIX. Тут стисло описуються:
ядро системи;
режим користувача і режим ядра;
процеси;
міжпроцесні комунікації;
багатокористувацький захист;
свопинг і пейджинг;
підсистема керування введенням/виведенням.
Одна з найважливіших характерних рис UNIX, - її файлова система, тому важливий розділ 1 обговорює це питання. В главах цього розділу також подані загальні відомості про механізми міжпроцесних комунікацій мережевих файлових систем на прикладі UNIX, наводяться змістовні приклади на мові високого рівня С ефективної взаємодії з цими ресурсами. Велика увага приділяється такому важливому питанню як багатокористувацький захист інформаційних ресурсів.
Звісно існують характерні риси, які відрізняють ОС UNIX від інших мережевих систем, - механізми _лассу__ і пейджингу та управління процесами введенням/виведенням. З цього приводу в начальному посібнику надається багато ілюстрованого матеріалу та прикладів на мовах С та Shell.
Розділ 2 «Файлова система UNIX» знайомить студентів з організацією файлової системи ОС UNIX і методами, які використовуються для ідентифікації файлів і структури каталогів. Надається поглиблений матеріал для вивчення структури дискового простору. Для закріплення методів функціонування системи введення/виведення пропонуються конкретні приклади роботи на мовах
високого рівня С та Java. Закінчується другий розділ загальною характеристикою відомих представників мережевих ОС.
Всі глави навчального посібника проілюстровані конкретними прикладами програмування, кожний з яких перевірений на факультетських серверах Вінницького національного технічного університету та персональних комп’ютерах у реальних умовах.
До всього матеріалу навчального посібника розроблені контрольні питання та вправи, основні елементи яких були ретельно перевірені автором на лекційних та практичних заняттях з 1996 року.
У тексті навчального посібника під терміном „приклад» мається на увазі програмний код, що реалізовує окрему функцію на мові високого рівня С або Java. Термін „програма» позначає ціжом працюючий програмний код, який може виконуватись в ОС Unix на мові високого рівня С або Java.
У даному навчальному посібнику розглядаються різні версії UNIX, але перевага віддається стандартам AT&T (UNIX System Release 4.x) та BSD. Більшість прикладів основані на елементах програмування та реалізації команд, перевірені на діючих системах Linux. FreeBSD, Sun Solaris, SCO OpenServer 5.0. У контрольних прикладах перевага була віддана FreeBSD, Linux та Sun Solaris з деяких причин.
По-перше, операційна система FreeBSD вважається найпотужнішою мережевою ОС у світі.
По-друге, операційні системи FreeBSD та Linux використовуються на міжнародних та корпоративних (факультетських) вузлах Internet Вінницького національного технічного університету і виконають функції розподілення потоків даних, захист інформаційних ресурсів, тощо.
По-третє, Sun – це достатньо відома компанія,, що займається тільки UNIX-машинами. Sun ніколи не зраджує сама собі і підтримує одну-єдину ОС UNIX, на відміну від таких, скажемо, компаній, як DEC і HP. Особливістю Sun є те, що як тільки у світі UNIX зявляється що-небудь нове, воно в першу чергу проходить тестування у Sun. Також вважається, що встановлення будь-яких додаткових продуктів у Sun проходить найякісніше.
ЗАГАЛЬНІ ВІДОМОСТІ ПРО ОПЕРАЦІЙНУ СИСТЕМУ
UNIX
Перші електронно-обчислювальні машини (ЕОМ) випускалися без операційних систем (ОС). Вони управлялися за допомогою набору перемикачів на пульті керування, і на таких машинах, природно, могли працювати тільки інженери вищої кваліфікації. Бажання зменшити залежність від фахівців і наблизити ЕОМ до простого користувача і викликало появу перших ОС.
Будь-яка ОС являє собою набір програм, що управляють ресурсами ЕОМ. Робота цих програм строго координована.
Класична UNIX – це повноцінна мережева ОС. Цей факт означає, що одночасно багато користувачів можуть працювати на одній машині, одночасно виконувати багато програм. У світі мережевих операційних систем серед таких популярних систем, як Windows NT чи OS/2, багато хто з хакерів інтуїтивно розуміють, що UNIX – єдина «реальна річ» - реальна операційна система.
На рис. 1.1 зображено набір сфер, кожна з яких являє собою специфічний UNIX-software, що включає такі компоненти, як:
ядро;
Shell (командний інтерпретатор);
деякі системні утиліти;
програмні засоби, що використовуються в режимі виконання команд;
деякі підсистеми верхнього рівня.
/
User Programs
Рис. 1.1. Загальна структура операційної системи Unix
/
Рис. 1.2. Структура програмного забезпечення UNIX
Для того, щоб зрозуміти як працює UNIX, студент повинен мати уявлення про кожен компонент системи.
Ядро і процеси
Резидентна частина в оперативній пам’яті UNIX-системи називається ядром (Kernel). При початковому завантаженні (boot) ядро зчитується в пам’ять починаючи з нульової адреси. На диску ядро завжди оформлене як виконуваний файл. При будь-якому перенастроюванні системи, включенні додаткових зовнішніх пристроїв і нових драйверів, зміні параметрів генерації системи ядро перебудовується і зберігається в новому файлі. Як правило, цей файл розташовується в кореневому каталозі і має назву ідентифікатор UNIX-системи (/unix, /hp-ux і т.д.).
Ядро містить системні програми, що виконують диспетчерські функції, керування ресурсами ЕОМ, розподіл пам’яті, доступ до дискових пристроїв і т.і. Умовне ядро ОС UNIX можна представити у вигляді декількох тісно взаємодіючих компонентів (рис. 1.3).
Якщо порівняти ОС UNIX з іншими відомими ОС, то можна знайти, що її ядро мінімізоване і не виконує ні однієї функції, що безпосередньо служить користувачу. Для цієї мети застосовуються численні утиліти, що виступають посередником між користувачем і ядром. У ньому
виявляється архітектурна особливість UNIX, що привертає до неї увагу розробників апаратних архітектур ЕОМ. З цього приводу, головним структурним елементов ОС UNIX є ядро (рис. 1.3).
/
Рис. 1.3. Структура ядра ОС UNIX
Ядро UNIX містить важливі таблиці, у яких знаходиться системна інформація для побудови зв’язаних, координованих програмних ланцюжків. У цьому значенні UNIX – відмінний приклад програми, структура якої визначена даними. При цьому основна частина роботи ядра саме і зводиться до пошуку в таблицях і до їхньої модифікації.
Ядро ОС UNIX підтримує завантаження тільки потрібних сторінок оперативного запам’ятовувального пристрою (ОЗП). Тобто з диска в пам’ять завантажуються ті сегменти програми, що дійсно використовуються. Можливе використання однієї сторінки, фізично один раз завантаженої в пам’ять, декількома виконуваними програмами.
Для збільшення об’єму доступної оперативної пам’яті UNIX здійснює також розбивку диска на сторінки, тобто на диску може бути виділено до 256 Мбайт простору для _лассу__ (swap space). У деяких версіях UNIX в область _лассу__ вивантажується не весь процес, а тільки окремі його частини, у яких є необхідність виконувати задачу.
Коли системі потрібно більше оперативної пам’яті, то вона за допомогою _лассу__ виводить неактивні сторінки на диск. Це дозволяє виконувати об’ємніші програми та одночасно обслуговувати в мережі більше користувачів. Однак _лассу_ не виключає нарощування оперативної пам’яті, оскільки він знижує швидкодію, збільшує час доступу.
Ядро також підтримує універсальний пул пам’яті для користувацьких програм і дискового кешу. При цьому для дискового кешу може використовуватися вся пам’ять, і навпаки, кеш зменшується при роботі великих програм.
Програми, що використовують динамічно зв’язані чи розділені бібліотеки, можуть спільно виконувати запуск засобів, які представлені одним фізичним файлом на диску. Це дозволяє файлам займати менше місця на диску, особливо тим, що багаторазово використовують бібліотечні функції. У ОС UNIX також існують бібліотеки, які динамічно зв’язуються під час виконання і дозволяють програмісту замінити бібліотечні модулі своїми власними розробками.
Для забезпечення налагодження ядро ОС UNIX видає дампи пам’яті для подальшого аналізу. Використання _лассу_ пам’яті і динамічних налагоджувачів дозволяє визначити причини непрацездатності програми.
Розглянемо роботу ядра мережевої ОС більш докладно.
1.2. Диспетчер мережевої операційної системи UNIX
Диспетчер ОС UNIX – це програма, що дозволяє процесам конкурувати між собою за час центрального процесора. Мультипрограмування – це квантування часу між групою одночасно виконуваних процесів. Призупинення і поновлення процесів відбувається багато разів у секунду, тому створюється ефект безупинного протікання процесу, тобто одночасне виконання декількох програм. Як ілюстрацію розглянемо приклад на рис. 1.4.
/
Рис. 1.4. Схема поділу часу центрального процесора мережевої ОС .
Наприклад, три програмісти бажають виконати різні програми X, Y, Z. Диспетчер ОС UNIX завантажує ці програми в память і створює З процеси. Різниця терміна «програма» від терміна «процес» у даному випадку визначається тим, що програма – це усього лише файл у форматі завантаження, що зберігається на диску, а процес розташований у пам’яті на етапі його виконання будь-якого завдання.
В даному випадку, після того як процес Z одержав свій квант часу та обробив його дескриптор, він повертає керування процесу X. Але процес X починає виконання не з самого початку, а з того місця, де той був припинений наприкінці свого кванта часу.
1.3. Процеси мережевої ОС UNIX
Концепція процесів є базової в ОС UNIX. Саме ядро UNIX існує для забезпечення потреб процесів. Програма в термінах UNIX, як уже говорилося вище, являє собою виконуваний файл. Це основа побудови контексту процесу при його породженні. Тому, породження будь-якого процесу в UNIX – це створення деякої віртуальної машини. Вона має свій власний адресний простір, куди поміщається процедурний сегмент і сегмент даних виконуваної програми.
1.3.1Дескриптор і контекст процесу
Системні дані використовуються ядром для ідентифікації процесу. Ці дані існують протягом усього часу життя процесу та утворюють дескриптор (описувач) процесу. Множина дескрипторів утворюють таблицю процесів.
Розмір таблиці процесів, хоча і має припустимі обмеження, але в сучасних версіях ОС UNIX дозволяє створювати до декількох сотень дескрипторів які мають певні параметри. Інформація про їх загальний стан включає: розташування (адреса в пам’яті); розмір частини системного образу; номер ідентифікатора процесу та _ла’я користувача- власника, який його виконує.
Інша важлива інформація про процес зберігається в таблиці користувача де записуються: ідентифікаційні номери користувача і групи; параметри доступу до файлів; посилання на системну таблицю файлів для усіх відкритих процесом файлів; покажчик на дескриптор поточного каталогу; список реакцій на різні сигнали ОС UNIX.
Ієрархія процесів
Процеси мережевої ОС UNIX утворюють ієрархічні відносини між собою. Існують поняття «процес-батько» і «процес-син». Процеси можуть породжувати інші процеси і їхні відносини найкраще виражає родинне древо. Наприклад, рис. 1.5 показує відносини процесів PI, Р2, РЗ, Р4, Р5 і Р6.
У цьому графі існують такі відносини:
Р1 породжує два процеси: Р2 і Р4. При цьому Р1 є «батьком», а Р2 і Р4
є його «синами».
Р2 створює РЗ. При цьому Р2 є «батьком» РЗ, а РЗ – відповідно його
«сином» і «нащадком» Р1.
Р4 є «батьком» Р5 і Р6; Р5 і Р6 – відповідно «дітьми» Р4.
PI є «дідусем» РЗ, Р5 і Р6.
РЗ, Р5 і Р6 -«онуки» PL.
Р3, Р5 і Р6 не мають породжених процесів.
/
Рис. 1.5. Структурна схеми відносин процесів Р1, Р2, Р3, Р4, Р5 і Р6
«Процес-син» успадковує усі властивості «процесу-батька», включаючи змінні оточення, поточні робочі директорії, відкриті файли. Будь-який процес в ОС UNIX породжується за допомогою системного виклику fork. Після виконання fork обидва процеси продовжують виконання з однієї і тієї ж точки. Для того, щоб довідатися чи є процес «батьком», чи «сином», досить скористатися такою програмою:
main ()
{
int childPID, ParentPID;
if ((childPID = fork()) = -1 { perror (“Can’t fork”); exit(l);
} else if (childPID = 0) { /* процес-син */ printf (“child: childPID=%d, ParentPID =%d\n”, getpidQ, getppid()); exit(0); } else {
/* процес-батько */
printf(“parent: childPID=%d,ParentPID==%d\n”,
childPID, getpid()); exit(0);
}
}
Приклад 1.1. Визначення типу процесу
Процес, що породжує, може призупинити виконання свого завдання до завершення одного з «процесів – синів» за допомогою системного виклику wait (&status).
Значення, що буде повернуте в змінну status, містить у молодшому байті ідентифікатор процесу, що завершився, а в старшому байті — статус завершення. Будь-який процес може завершитися за допомогою системного виклику exit (status). При цьому, аргумент status передається «процесу-батьку», якщо той очікує завершення «процесу-сина».
ОС UNIX, яка створена як засіб керування процесами, може розглядатися як система рівнобіжних взаємодіючих процесів з деревоподібною структурою. Загальний батько всіх процесів у системі є процес init, що знаходиться у вершині генеалогічного дерева. Цей процес породжується особливим чином і далі постійно є присутнім у системі. Всі інщі процеси породжуються в системі за уніфікованою схемою при допомозі системного виклику fork().
Ідентифікатори процесу
Кожному створеному процесу ОС UNIX призначає унікальний ідентифікатор, відомий як процес ID (чи абревіатура PID). Цей PID ідентифікує процес і для самої ОС, і для деяких команд і системних викликів. На додаток до цього, кожен процес має також важливий параметр – parent process ID (абревіатура PPID), що означає PID його «процесу-батька».
Використовуючи команду ps, користувач може побачити ідентифікатори поточних процесів у системі.
Наприклад, якщо _ла’я користувача (usemame) було terry, то на екрані після виконання команди ps можна побачити:
$ps-f
UID PID PPID З STIME TTY TIME COMMAND
Terry 3865 3699 2 13:35:43 ttyp3 0:00 ps-f
terry 3699 3699 0 12:58:21 ttyp3 0:00 ksh
Цей фрагмент показує, що користувач terry має два процеси: ps-f- команду і ksh (Korn Shell). Необхідно відмітити, що PPID процесу ps-f- команди такий же, як PID ksh. Це тому, що ps-f був виконаний з ksh- командного рядка; тобто ksh є «процес-батько», a ps-f є «процес-син» ksh.
Групи процесів ОС UNIX
Техніка ідентифікаторів використовується також при групуванні процесів. Кожен процес (за винятком системних процесів, таких, як init і swapper) є членом групи (process group). Коли створюється завдання (JOB), оболонка Shell призначає всім процесам у завданні ідентифікатор групи процесів (GID – process group ID). Сигнали (це спеціальні системні виклики UNIX) можуть поширюватися по всіх процесах у даній групі. Це дуже важлива особливість у керуванні завданнями, коли всі родинні процеси в завданні можуть одержувати сигнали, що їм посилаються.
Наприклад, при встановленні Informix for UNIX, існує особливість, яка полягає у наявності у системі користувача з довільним _ла’ям, але з обов’язковою належністю до групи Informix. В багатьох випадках це є неодмінною умовою роботи з системами управління базами даних.
Ще один спосіб групування – це об’єднання процесів у термінальну групу. Члени групи одержують як атрибут ідентифікатор термінальної групи TGID, що відповідає значенню PID лідера цієї групи. Тому як лідер виступає процес; що відкрив термінал. При цьому, керуючий термінал керування використовується для передачі через процес керування (тобто процес-лідер) сигналів для всіх процесів – членів групи. Сигнали створюються при натисканні визначених клавші на клавіатурі. Слід визначити, що кожен користувач, що входить у систему за допомогою команди login, обов’язково породжує нові процеси. В цей час кожен процес у контексті користувача має той самий ідентифікатор користувача UID. Відповідність між UID і login-ім’ям користувача знаходиться у файлі /etc/passwd. В цьому випадку, користувачі одержують різні привілеї при яких процес судеркористувача (superuser) має UID та дорівнює нулю. Інші користувачі мають цілі позитивні значення _лассу__ому__ви, яких більш ніж 1000 (для ОС FreeBSD).
1.3.5. Взаємодія процесів («батьки», «діти», «сироти», «зомбі»)
Відразу після обробки системного виклику fork() відбувається встановлення двостороннього зв’язку між « процесом-батьком» і «процесом-сином». «Син» при цьому успадковує усі властивості «батька». Однак існування нового, породженого процесу як точної копії іншого не має ніякого змісту. Тому майже завжди «син» замінює програмний код «батька» на свій власний програмний код. Це можливо за допомогою системного виклику exec. Наприклад:
main ()
{
int status;
if (fork() = 0)
execl (“/bin/primer”,”primer”,0);
wait (&status);
}
Приклад 1.2
На цьому прикладі показано, що «процес-батько» очікує закінчення виконання «процесу-сина», за допомогою системного виклику wait. Але на практиці _лассу_ деякі інші випадки завершення процесу. Так, якщо процес створює системний виклик exit, то він стає «процесом- самогубцем» і породжує цілу низку проблем які описані нижче.
Кожен процес можу водночас бути як «батьком» та і «сином». Тому, при знищені процесу можуть залишатися «сироти», долю яких треба вирішувати. В цьому випадку є декілька варіантів:
Нормальне закінчення.
«Процес-батько» виконує виклик wait і чекає, коли «процес-син» завершить своє виконання по exit. Однак, якщо в «сина» були свої «процеси-діти», щоб вони не залишилися «сиротами», відбувається їхнє «усиновлення» прабатьком усіх процесів init. Головна робота ядра ОС UNIX при цьому полягає у перевстановленні PPID у «процесів-синів».
Він стає для них рівним одиниці. Крім того, усім процесам, членам групи, посилається відповідний сигнал.
Ненормальне закінчення.
«Процес-син» виконує виклик exit в той час коли існує його «батько» який не знаходиться в стані чекання wait. У цьому випадку зв’язок «батька» з «сином» продовжує існувати, незважаючи на те що «син» вже не існує. Зв’язок «процес-син» у таблиці процесів зберігається. Тому такий не до кінця знищений процес називають «зомбі».
Передчасний вихід.
«Процес-батько» закінчується раніше своїх «синів». У цьому випадку відбувається _лассу__ому__вих_ генеалогічного дерева і всі «процеси- сироти» перенаправляються постійно діючому процесу init.
1.3.6. «Процеси-демони»
Якщо класифікувати процеси в ОС UNIX, то можна визначити групи:
користувачеві;
системі;
«демони» (daemons).
Системні процеси виконуються в режимі суперкористувача та орієнтовані на виконання системних функцій.
У випадках, коли процесам користувачів потрібно виконати системну функцію, створюється системний виклик. Фактично відбувається виклик ядра системи як підпрограми. З моменту появи системного виклику процес вважається системним. Таким чином, користувацький і системний процеси є двома фазами одного процесу, але вони ніколи не перетинаються між собою. Кожна фаза користується своїм власним стеком. Диспетчерський процес характеризується тим, що не має користувацької фази.
«Процеси-демони» - це визначений різновид системних процесів. «Демони» відрізняються від звичайних процесів тим, що вони виконують специфічні системні дії, наприклад адміністрування і управління в комп’ютерних мережах. Так, типовим «процесом-демоном» є оброблювач вхідних викликів (incoming calls) на UNIX-сервері, що обробляє всі заявки, які надходять з віддаленого з’єднання.
Способи породження і запуску «демонів» можуть бути різні:
1. У процесі старту системи з файла /etc/rc.
Такі «демони» будуть працювати в статусі суперкористувача протягом всього часу роботи ОС.
2. Використовуючи системний файл /usr/lib/crontab, або користувацький crontab.
Звичайно стандартний системний процес сгоn протягом дня виконує визначені задачі з файлу /usr/lib/crontab.
3а допомогою команди at «демон» чекає настання визначеного часу і виконує завдання.
При запуску фонового процесу за допомогою користувацького термінала.
Контрольні питання
Загальна характеристика операційної системи Unix.
Поняття про ядро та процеси, структура та основні функції. Призначення процесу _лассу__.
Диспетчер операційної системи Unix. Поняття про мультипрограмування. Приклад розподілення часу при роботі центрального процесора.
Процеси. Загальна характеристика процесів. Поняття про дескриптор та контекст процеса, призначення та функції.
Ієрархія процесів. Робота функції системного виклику. Призначення генеалогічного дерева. Програмна реалізація виконання системного виклику (на мові високого рівня С). Відомі функції на мові високого рівня С, які використовуються при виконанні ієрархії процесів.
Призначення ідентифікаторів процесів, взаємозв’язок ідентифікаторів з ієрархією процесів. Програмна реалізація групи процесів. Файли, які відповідають за функціонування групи процесів.
Взаємодія процесів. Варіанти закінчення процесів, їх характеристика. Приклад нормального завершення процесу (на мові високого рівня С).
Поняття про «процеси-демони», їх класифікація, причини виникнення. Відомі способи створення «процесів-демонів», їх характеристика.
Контрольні вправи
На основі прикладу 1.1 напишіть текст програми на мові високого рівня С для структурної схеми (рис. 1.5).
Виконайте аналіз генеалогічного дерева процесів такого прикладу:
UID PID PPID С STIME TTY TIME CMD
hoshaba 9192 9191 0 12:22 pts/0 00:00:00 –bash
hoshaba 9231 9192 15 12:22 pts/0 00:00:00 ps-f
hoshaba 9234 9192 15 12:24 pts/0 00:00:00 cat /etc/passwd
hoshaba 9235 9192 13 12:26 pts/0 00:00:00 man date
hoshaba 9237 9192 13 12:29 pts/0 00:00:00 info time
Напишіть програму створення каналу на мові високого рівня С.
1.4. Міжпроцесні комунікації
Для побудови будь-яких складних мережевих структур в ОС UNIX існують такі потужні засоби:
сигнали;
семафори; v
програмні канали;
черги повідомлень;
поділювана пам’ять;
спеціальні команди (write, cu, mail);
засоби міжмашиної взаємодії (uucp, tcp/ip, nfs, rfs,).
Розглянемо деякі з цих засобів більш докладно.
1.4.1. Сигнали
Якщо розглядати процес як деяку віртуальну машину, то в такій системі повинен існувати механізм переривань, що відповідає стандартним вимогам:
обробка виняткових ситуацій;
засоби обробки зовнішніх і внутрішніх переривань;
засоби керування системою переривань (маскування і демаскування),
Цим вимогам в ОС UNIX відповідає техніка сигналів, що може не тільки сприймати та обробляти сигнали, але і їх породжувати і посилати на інші сервери комп’ютерних мереж.
Сигнали можуть бути синхронними – коли ініціатором сигналу є процес, та асинхронними, коли ініціатор виникнення сигналу – інтерактивний користувач. Джерелом асинхронних сигналів може буги також ядро, коли воно контролює визначені стани апаратури, розглянуті як помилкові.
Для зручності використання кожен сигнал закодований і цифрове значення сигналу з застосуванням мнемонічної форми запису зберігається у файлі <signal.h>.
В таблиці 1.4.1 наведений перелік сигналів представлений у порядку зростання значень сигналів (ціле число, зазначене в дужках).
Таблиця 1.4.1
Імена сигналів
Методи створення та поширення сигналу
Реакція (за замовчуванням)
SIGHUP (1)
Породжується при відключенні зв’язку з терміналом. Поширюється на всі процеси ТОГО.
Закінчити процес, що прийняв сигнал
SIGINT (2)
Створюється при натисканні визначеної клавіші. Поширюється на всі процеси TGID
Закінчити процес
SIGQ- UIT (3)
Створюється при натисканні клавіші QUIT. Поширюється на всі процеси TGID.
Те ж
SIGILL (4)
Створюється при виникненні апаратних неконтрольованих станів. Поширюється на поточний PID.
“
SIGT- RAP (5)
Створюється при трасуванні. Поширюється на поточний PID.
Закінчити процес
SIGIOT (6)
Створюється при несправності в апаратурі. Поширюється на поточний PID.
Те ж
SIGTEM (7)
Створюється при виконанні команди ЕМТ. Поширюється на поточний PID.
“
SIGFPE (8)
Створюється при обробці чисел із рухомою крапкою. Поширюється на поточний PID.
“