Лекція 17. Мережеві операційні системи на базі ОС UNIX
UNIX — операційна система, розробку якої впродовж 1969-1970-х років здійснювала група співробітників підрозділу Bell Labs корпорації AT&T у складі Кена Томпсона, Денніса Рітчі та Дугласа Макілроя. На тепер існує безліч різних UNIX-систем, які в свою чергу об'єднуються в родини. У їх розробці в різний час брали участь AT&T, деякі комерційні фірми, а також некомерційні організації.
Першочергово UNIX була розроблена у кінці 1960-х років співробітниками Bell Labs, у першу чергу Кеном Томпсоном, Деннісом Рітчі та Дугласом Макілроєм.
У 1969 році Кен Томпсон, намагаючись реалізувати ідеї, що були покладені в основу MULTICS, але на скромнішому апаратному забезпеченні (DEC PDP-7), написав першу версію нової операційної системи, а Брайан Керніган вигадав для неї назву — UNICS (UNIplexed Information and Computing System) — у противагу MULTICS (MULTIplexed Information and Computing Service). Пізніше ця назва скоротилась до UNIX. У 1970 р. вийшла версія для PDP-11, найуспішнішого сімейства мікрокомп'ютерів 1970-тих (у СРСР воно було відоме як клон PDP — СМ ЕОМ).
У 1973 р. було прийняте рішення переписати ядро системи на щойно створеній мові Сі. UNIX став першою операційною системою, майже повністю написаною на мові програмування високого рівня, що суттєво спростило портування системи на інші архітектури. 15 жовтня на черговому симпозіумі ACM була представлена четверта версія UNIX. Незабаром з'явилася UNIX Version 5, з 1974 року розпочалося розповсюдження безкоштовно серед університетів та академічних закладів.
До 1975 року вийшла UNIX Version 6, відома за широко розповсюдженими коментарями Джона Лайонса (Lions' Commentary on UNIX 6th Edition, with Source Code). До 1978 р. система використовувалася більш ніж на 600 машинах, перш за все, в університетах. Версія 7 було останньою єдиною версією UNIX. Саме у версії 7 з'явився близький до сучасного інтерпретатор командного рядка Bourne shell.
На початку 1980-тих компанія AT&T, якій належали Bell Labs, зрозуміла цінність UNIX та почала створення комерційної версії UNIX. Ця версія, яка надійшла у продаж у 1982 році, отримала назву UNIX System III та базувалася на сьомій версії системи. Трохи раніше, у 1977 р. лабораторія Білла Джоя в університеті Берклі створила власну версію UNIX, яка базувалась на UNIX Version 6. Ця версія отримала назву BSD (англ. Berkeley Software Distribution).
Поворотнім моментом у історії UNIX стала реалізація у 1980 р. стека протоколів TCP/IP. До цього міжмашинна взаємодія в UNIX перебувала у зародковому стані — найбільш суттєвим способом зв'язку був UUCP (засіб копіювання файлів з одної UNIX-системи у іншу, яке спочатку працювало через телефонні мережі за допомогою модемів).
Було запропоновано два інтерфейси програмування мережевих програм: Berkley sockets та інтерфейс транспортного рівня TLI (англ. Transport Layer Interface). Інтерфейс Berkley sockets був розроблений в університеті Берклі та використовував стек протоколів TCP/IP, розроблений у цьому ж університеті. TLI був створений AT&T згідно з визначенням транспортного рівня моделі OSI та вперше з'явився у системі System V версії 3. Хоч ця версія містила TLI та потоки, першочергово у ній не було реалізації TCP/IP та інших мережевих протоколів, але подібні реалізації пропонувались сторонніми фірмами. Реалізація TCP/IP офіційно та остаточно була включена у базову поставку System V версії 4. Це, також як і інші міркування (більшою частиною ринкові), призвело до остаточного розмежування між двома гілками UNIX — BSD (університету Берклі) та System V (комерційна версія від AT&T). Потім багато компаній ліцензували System V у AT&T, і розробили власні комерційні різновиди UNIX, такі, як AIX, HP-UX, IRIX, Solaris.
17.1. Вільні UNIX-подібні операційні системи
У 1983 році Річард Столлмен оголосив про створення проекту GNU — спроби створити вільної UNIX-подібної операційної системи з нуля, без використання оригінального початкового коду. Більша частина програмного забезпечення, розробленого в рамках цього проекту — такого, як GNU toolchain, Glibc (стандартна бібліотека мови Сі) та Coreutils — відіграють ключову роль у інших вільних операційних системах. Однак, роботи з створення заміни для ядра UNIX, необхідного для повного виконання задач GNU, відбувались дуже повільно. На теперішній час GNU Hurd — спроба створити сучасне ядро на основі мікроядерної архітектури Mach — все ще далека від завершення.
У 1991 році, коли Лінус Торвальдс опублікував ядро Linux та залучив помічників, використання інструментів, розроблених у рамках проекту GNU, було очевидним вибором. Об'єднавшись з ядром Linux, програмне забезпечення GNU стало основою для UNIX-подібної операційної системи, відомою як Linux. Дистрибутиви цієї системи (такі як Red Hat та Debian), які включають ядро, утиліти GNU та додаткове програмне забезпечення стали популярними як серед аматорів, так і серед фахівців.
У результаті регулювання юридичної справи, відкритою UNIX Systems Laboratories проти університету Берклі та Berkeley Software Design Inc., було встановлено, що університет може розповсюджувати BSD UNIX, в тому числі і безкоштовно. Після цього були відновлені експерименти, пов'язані з BSD-версією UNIX. Незабаром розробка BSD UNIX була продовжена у декількох напрямах одночасно, що призвело до появи проектів, відомих як FreeBSD, NetBSD, OpenBSD та DragonFlyBSD.
На теперішній час Linux та представники сімейства BSD швидко відвойовують ринок у комерційних UNIX-систем та одночасно проникають як у персональні комп'ютери користувачів, так і на мобільні вмонтовані системи. Одним із свідчень даного успіху служить той факт, що коли фірма Apple шукала основу для своєї операційної системи, вона вибрала NEXTSTEP — операційну систему з вільно розповсюджуваним ядром, розроблену фірмою NeXT та перейменованою у Darwin після придбання фірмою Apple. Ця система відноситься до сімейства BSD та базується на ядрі Mach. Застосування Darwin BSD UNIX у Mac OS X робить його однією з найбільш розповсюджених версій UNIX.
17.2. Стандарти
Доки панувало вузьке трактування ОС UNIX (тобто доки ОС UNIX не була комерційним продуктом), не було потреби в стандартизації засобів цієї ОС. Нечисленні висококваліфіковані користувачі ОС UNIX самі могли розібратися в особливостях і відмінах версії системи, якою вони користуються, та обрати ту підмножину її засобів, яке забезпечувало переносимість програми.
Однак, з виходом ОС UNIX на комерційний ринок, переходом до широкого трактування системи та суттєвим збільшенням числа користувачів різних її варіантів, стало необхідним ввести можливість виробництва побудованих на основі ОС UNIX операційних систем, які були б дійсно сумісними. Для цього необхідна стандартизація (інтерфейсів) засобів операційної системи на різних рівнях. Така робота триває вже близько 10 років, ще не завершена й навряд чи колись буде завершена у вигляді кінцевого набору стандартів де-юре. Однак, навіть отримані результати дозволяють виробникам забезпечити користувачів різних апаратних платформ операційними системами, достатньо зручними для користування і дають можливість розробляти мобільні прикладні системи, які здатні виконуватись на комп'ютерах, що мають операційні системи з аналогічними властивостями.
Слід згадати, що поряд із версіями ОС UNIX, що розвивалися в компанії AT&T (потім в USL, далі в Novell), історично існував ще напрямок BSD (Berkeley Standard Distribution), який підтримувала невелика всесвітньо відома група з університету Берклі. В свій час (наприкінці 1970-х) університет отримав від AT&T вихідні тексти 16-розрядної ОС UNIX, на базі якої була вироблена 32-розрядна система, яка спочатку використовувалася на комп'ютерах сімейства VAX, а потім була перенесена на багато інших апаратних платформ. В результаті, набори системних викликів UNIX AT&T і BSD вже помітно відрізнялися.
Хоча більшість комерційних реалізацій UNIX базувалось на System V, UNIX BSD завжди був популярним в університетах, і громадськість потребувала визначення деякого інтерфейсу, який би був по суті об'єднанням засобів AT&T та BSD. Ця робота була почата Асоціацією професійних програмістів Відкритих систем UniForum, а потім продовжена в спеціально створених робочих групах POSIX (Portable Operating System Interface). В робочих групах POSIX розробляються багато відкритих систем, але найбільш відомим і авторитетним є ухвалений ISO за клопотанням IEEE стандарт POSIX 1003.1, в якому визначені мінімальні необхідні засоби операційної системи.
17.3. Файлова система Unix
Файлова структура Unix характеризується такими властивостями:
- Чітка побудова;
- Звернення до даних файлу без суперечностей;
- Захист даних файлу;
Цей стандарт вимагає, щоб операційна система, яка працюватиме з СПФС узгодженою файловою системою, підтримуватиме ці базові риси надійності, які є в більшості файлових систем Unix. Цей стандарт не намагається узгоджуватися з кожним можливим аспектом в усіх конкретних реалізаціях Unix-систем. Проте, багато аспектів цього стандарту базується на ідеях, що є в Unix та інших Unix подібних системах.
Це — після уважного розгляду інших факторів, включає:
- Традиційна та добре сприйнята практика в Unix-подібних системах;
- Впровадження побудов інших файлових структур;
- Застосовні стандарти;
Визначається дві незалежні категорії файлів: загальні (shareable) на противагу приватним (unshareable) та змінні на противагу постійним.
Загальні дані - це ті, що можуть бути спільними для декількох головних машин;
Приватні дані - мають бути специфічними для кожного головного комп'ютера.
Наприклад, домашні каталоги користувачів — загальні данні, але файли контролю пристроїв — ні.
Постійні файли - двійкові, бібліотеки, документація та все інше, що має змінюватися тільки адміністиратором системи;
Змінні - все, що може бути змінено без втручання адміністратора системи.
Для полегшення резервування, керування та спільного використання файлів в мішаних мережах з машин із різними архітектурами та операційними системами, бажано щоб було просто та легко розуміти зв'язки між каталогами (певні каталоги розглядаються як потенційні точки монтування) та типом даних, що вони містять.
Скрізь в цьому документі та в усіх добре спланованих файлових системах, знання цих базових принципів допоможе побудувати структуру та надасть їй додаткової логічності.
Різниця між загальними та приватними даними потребує деяких пояснень:
В мережевому середовищі (тобто коли є декілька головних машин в одному місці), є гарною практикою мати дані загальні для декількох головних машин, з метою збереження місця та полегшення завдань супроводу.
В мережевому середовищі, деякі файли містять дані, що стосуються винятково конкретної головної системи. Такі частини файлової системи не можуть бути узагальнені (без вживання певних заходів).
Попередні реалізації файлових систем Unix-типу, перемішують загальні та приватні дані в одній структурі, що ускладнює узагальнення великих частин файлової системи.
Особливість «загальності» може бути використана для спрощення підтримки, наприклад:
Розділ /usr (або його частини) монтується (тільки на читання) через мережу (використовуючи NFS).
Розділ /usr (або його частини) монтується з носія, що може тільки читатися. CD-ROM з однією копією, що розповсюджується між багатьма користувачами через пошту або іншими засобами, може бути змонтований як файлова система тільки на читання, що узагальнюється з іншими файловими системами узгодженими з СПФС яким-небудь типом «мережі».
Властивості «постійний» та «змінний» справляють на файлову систему вплив головним чином двома шляхами:
Оскільки/містить як змінні так і постійні дані, його доводиться монтувати на читання та запис.
Хоч зазвичай /usr містить як змінні так і постійні дані, все ж буває потрібно монтувати його тільки для читання; тоді треба мати метод монтувати /usr тільки на читання. Це робиться через створення структури /var, що монтується на читання та запис (або як частина іншого розділу, що дозволяє читання та запис як /), перебираючи на себе значну частину функціональності /usr розділу.