Налаштування обладнання та програмного забезпечення

Ос юнікс. Архітектура апаратного забезпечення

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

UNIX зародився у лабораторії Bell Labs фірми AT&T понад 20 років тому. У той час Bell Labs займалася розробкою розрахованої на багато користувачів системи поділу часу MULTICS (Multiplexed Information and Computing Service) спільно з MIT і General Electric, але ця система зазнала невдачі, частково через занадто амбітних цілей, що не відповідали рівню комп'ютерів того часу, а частково і через те, що вона розроблялася мовою PL/1, а компілятор PL/1 затримувався і взагалі погано працював після своєї запізнілої появи. Тому Bell Labs взагалі відмовилася від участі у проекті MULTICS, що дало можливість одному з її дослідників, Кену Томпсону, зайнятися пошуковою роботою у напрямку покращення операційного середовища Bell Labs. Томпсон, а також співробітник Bell Labs Денис Рітчі та деякі інші розробляли нову файлову систему, багато рис якої вели своє походження від MULTICS. Для перевірки нової файлової системиТомпсон написав ядро ​​ОС та деякі програми для комп'ютера GE-645, який працював під управлінням мультипрограмної системи розподілу часу GECOS. У Кена Томпсона була написана ним ще за часів роботи над MULTICS гра "Space Travel" - "Космічна подорож". Він запускав її на комп'ютері GE-645, але вона працювала на ньому не дуже добре через невисоку ефективність поділу часу. Крім цього, машинний час GE-645 коштував надто дорого. В результаті Томпсон і Рітчі вирішили перенести гру на машину PDP-7 фірми DEC, що стоїть у кутку без справи, що має 4096 18-бітних слів, телетайп і гарний графічний дисплей. Але PDP-7 мав неважливе програмне забезпечення, і, закінчивши перенесення гри, Томпсон вирішив реалізувати на PDP-7 ту файлову систему, над якою він працював на GE-645. З цієї роботи і виникла перша версія UNIX, хоча вона й не мала на той час жодної назви. Але вона вже включала характерну для UNIX файлову систему, засновану на індексних дескрипторах inode, мала підсистему управління процесами та пам'яттю, а також дозволяла двом користувачам працювати у режимі поділу часу. Система була написана на асемблері. Ім'я UNIX (Uniplex Information and Computing Services) було дано їй ще одним співробітником Bell Labs, Браяном Керніганом, який спочатку назвав її UNICS, підкреслюючи її відмінність від розрахованої на багато користувачів MULTICS. Незабаром UNICS почали називати UNIX.

Першими користувачами UNIX стали співробітники відділу патентів Bell Labs, які знайшли її зручним середовищем для створення текстів.

Великий вплив на долю UNIX надав перепис її мовою високого рівняС, розроблений Денисом Рітчі спеціально для цих цілей. Це сталося в 1973 році, UNIX налічував на цей час вже 25 інсталяцій, і в Bell Labs була створена спеціальна група підтримки UNIX.

Широке поширення UNIX отримав з 1974 року, після опису цієї системи Томпсоном та Рітчі в комп'ютерному журналі CACM. UNIX набув широкого поширення в університетах, так як для них він поставлявся безкоштовно разом з вихідними кодами на С. Широке поширення ефективних C-компіляторів зробило UNIX унікальною для того часу ОС через можливість перенесення на різні комп'ютери. Університети зробили значний внесок у покращення UNIX та подальшу його популяризацію. Ще одним кроком на шляху отримання визнання UNIX як стандартизованого середовища стала розробка Денісом Рітчі бібліотеки введення-виводу stdio. Завдяки використанню цієї бібліотеки для компілятора С, програми для UNIX стали легко переносимими.

Рис. 5.1. Історія розвитку UNIX

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

На малюнку 5.1 показана спрощена картина розвитку UNIX, яка враховує наступність різних версій та вплив на них стандартів, що приймаються. Найбільшого поширення набули дві дуже несумісні лінії версій UNIX: лінія AT&T - UNIX System V, та лінія університету Berkeley-BSD. Багато фірм на основі цих версій розробили і підтримують свої версії UNIX: SunOS і Solaris фірми Sun Microsystems, UX фірми Hewlett-Packard, XENIX фірми Microsoft, AIX фірми IBM, UnixWare фірми Novell (проданий тепер компанії SCO), і цей список можна ще довго продовжувати.

Найбільший вплив на уніфікацію версій UNIX мали такі стандарти як SVID фірми AT&T, POSIX, створений під егідою IEEE, та XPG4 консорціуму X/Open. У цих стандартах сформульовані вимоги до інтерфейсу між програмами та ОС, що дає можливість програмам успішно працювати під управлінням різних версій UNIX.

Незалежно від версії, спільними для UNIX рисами є:

  • розрахований на багато користувачів режим із засобами захисту даних від несанкціонованого доступу,
  • реалізація мультипрограмної обробки в режимі поділу часу, заснована на використанні алгоритмів багатозадачності (preemptive multitasking), що витісняє,
  • використання механізмів віртуальної пам'яті та свопінгу для підвищення рівня мультипрограмування,
  • уніфікація операцій введення-виведення на основі розширеного використання поняття "файл",
  • ієрархічна файлова система, що утворює єдине дерево каталогів незалежно від кількості фізичних пристроїв, що використовуються для розміщення файлів,
  • переносимість системи за рахунок написання її основної частини мовою C,
  • різноманітні засоби взаємодії процесів, у тому числі і через мережу,
  • кешування диска для зменшення середнього часу доступу файлів.

Версія UNIX System V Release 4 – це незакінчена комерційна версія операційної системи, т.к. в її кодах відсутні багато системних утиліт, необхідних для успішної експлуатації ОС, наприклад утиліти адміністрування або менеджер графічного інтерфейсу. Версія SVR4 є скоріше стандартною реалізацією коду ядра, що увібрала найбільш популярні і ефективні рішення з різних версій ядра UNIX, такі як віртуальна файлова система VFS, що відображаються в пам'ять файли і т.п. Код SVR4 (частково допрацьований) ліг основою багатьох сучасних комерційних версій UNIX, таких як HP-UX, Solaris, AIX і т.д.

Вступ

Що таке Unix?

Де взяти безкоштовний Unix?

Які основні відмінності Unix від інших ОС?

Чому Unix?

Основні поняття Unix

Файлова система

Комадний інтерпретатор

Посібники - man

Вступ

Писати про ОС Unix дуже складно. По-перше, тому, що про цю систему написано дуже багато. По-друге, тому, що ідеї та рішення Unix вплинули на розвиток всіх сучасних ОС, і багато з цих ідей вже описані в цій книзі. По-третє, тому що Unix - не одна ОС, а ціле сімейство систем, і не завжди можна "відстежити" їх спорідненість між собою, а вже описати всі ОС, що входять до цієї родини просто неможливо. Тим не менш, ми, жодним чином не претендуючи на повноту, спробуємо дати побіжний огляд "світу Unix" у тих його областях, які видаються нам цікавими для цілей нашого навчального курсу.

Народження ОС Unix відноситься до кінця 60-х років, і ця історія вже обросла "легендами", які часом по-різному розповідають про деталі цієї події. ОС Unix народилася в дослідному центрі Bell Telephone Laboratories (Bell Labs), що входить до складу корпорації AT&T. Спочатку цей ініціативний проект для ЕОМ PDP-7 (згодом - для PDP-11) являв собою чи то файлову систему, чи комп'ютерну гру, чи систему підготовки текстів, чи те, й інше, і третє. Важливо, однак, те, що з самого початку проект, що перетворився в результаті на ОС, замислювався як програмне середовищеколективного користування Автором першої версії Unix є Кен Томпсон, проте в обговоренні проекту, а згодом – і в його реалізації брав участь великий колектив співробітників (Д. Рітчі, Б. Керніган, Р. Пайк та інші). На наш погляд, кілька щасливих обставин народження Unix визначили успіх цієї системи на багато років уперед.

Для більшості співробітників колективу, в якому народилася ОС Unix, ця ОС була "третьою системою". Існує думка (див., наприклад ), що системний програміст досягає високої кваліфікації тільки при виконанні третього свого проекту: перший проект виходить ще "учнівським", у другий розробник намагається включити все, що не вийшло в першому, і в результаті він виходить занадто громіздким , і лише у третьому досягається необхідний баланс бажань та можливостей. Відомо, що до народження Unix колектив Bell Labs брав участь (разом з іншими фірмами) у розробці ОС MULTICS. Кінцевий продукт MULTICS (Bell Labs не брала участі в останніх стадіях розробки) має всі ознаки "другої системи" і не набув широкого поширення. Слід, однак, зауважити, що в цьому проекті було народжено багато принципово важливих ідей і рішень, і деякі концепції, які багато хто вважає народженими в Unix, насправді має своїм джерелом проект MULTICS.

ОС Unix була системою, яка робилася "для себе та для своїх друзів". Перед Unix не ставилося завдання захоплення ринку та конкуренції з будь-якими продуктами. Самі розробники ОС Unix були її користувачами, і самі оцінювали відповідність системи своїм потребам. Без тиску ринкової кон'юнктури така оцінка могла бути об'єктивною.

ОС Unix стала системою, яка зроблена програмістами і для програмістів. Це визначило витонченість і концептуальну стрункість системи – з одного боку, а з іншого – необхідність розуміння системи для користувача Unix та почуття професійної відповідальності для програміста, який розробляє програмне забезпечення для Unix. І жодні подальші спроби зробити "Unix для чайників" не змогли позбавити ОС Unix цієї гідності.

У 1972-73 рр. Кен Томпсон та Денніс Рітчі написали нову версію Unix. Спеціально для цієї мети Д. Рітчі створив мову програмування C, представляти яку тепер уже немає необхідності. Більше 90% програмного коду Unix написано цією мовою, і мова стала невід'ємною частиною ОС. Те, що основна частина ОС написана мовою високого рівня, забезпечує можливість її перекомпіляції на коди будь-якої апаратної платформи і є обставиною, що визначила широке поширення Unix.

У період створення Unix антимонопольне законодавство США не давало корпорації AT&T можливості виходити на ринок програмних продуктів. Тому ОС Unix була некомерційною і вільно поширювалася, насамперед – в університетах. Там її розвиток продовжувався, і найактивніше воно велося в Каліфорнійському університеті в Берклі. При цьому університеті було створено групу Berkeley Software Distribution, яка займалася розвитком окремої гілки ОС – BSD Unix. Протягом усієї наступної історії основна гілка Unix та BSD Unix розвивалися паралельно, неодноразово взаємно збагачуючи одне одного.

У міру поширення ОС Unix став дедалі більше зростати інтерес до неї комерційних фірм, які почали випускати власні комерційні версії цієї ОС. Згодом стала комерційною та "основна" гілка Unix від AT&T, для її просування була створена дочірня фірма Unix System Laboratory. Гілка BSD Unix у свою чергу розгалужилася на комерційну BSD та Free BSD. Різні комерційні та вільно розповсюджувані Unix-подібні системи будувалися на базі ядра AT&T Unix, проте в них включалися і властивості, що запозичуються з BSD Unix, а також оригінальні властивості. Незважаючи на загальне джерело, відмінності між членами сімейства Unix накопичувалися і в результаті призвели до того, що перенесення додатків з однієї Unix-подібної ОС до іншої стало надзвичайно утрудненим. З ініціативи користувачів Unix виник рух стандартизації API Unix. Цей рух був підтриманий Міжнародною організацією стандартів ISO і спричинив виникнення стандарту POSIX (Portable Operation System Interface eXecution), який розвивається і в даний час і є найавторитетнішим стандартом для ОС. Проте, оформлення специфікацій POSIX як офіційного стандарту – процес досить повільний, і він не може задовольняти потреби виробників. програмного забезпеченнящо призвело до виникнення альтернативних промислових стандартів.

З переходом AT&T Unix до компанії Nowell назва цієї ОС змінилася на Unixware, а права на торгову марку Unix перейшли до консорціуму X/Open. Цей консорціум (нині - Open Group) розробив свої (ширші, ніж POSIX) специфікації системи, відомі як Single Unix Specification. Нещодавно вийшла друга редакція цього стандарту, що значно краще узгоджена з POSIX.

Нарешті, ряд фірм - виробників власних версій Unix утворив консорціум Open Software Foundation (OSF), який випустив власну версію Unix - OSF/1, зроблену на базі мікроядра Mach. OSF також випустив специфікацію системи OSF/1, на основі якої фірми-члени OSF стали випускати власні Unix-системи. Серед таких систем: SunOS фірми Sun Microsystems, AIX фірми IBM, HP/UX фірми Hewlett-Packard, DIGITAL UNIX фірми Compaq та інші.

Спочатку Unix-системи цих фірм переважно базувалися на BSD Unix, але сьогодні більшість сучасних промислових Unix-систем будуються з урахуванням використанні (за ліцензією) ядра AT&T Unix System V Release 4 (S5R4), хоча успадковують деякі властивості BSD Unix. Ми не беремо на себе відповідальність порівнювати комерційні Unix-системи, так як порівняння, що періодично з'являються в друку, такого роду часто представляють зовсім протилежні результати.

Компанія Nowell продала Unix компанії Santa Crouse Operations, яка випускала власний Unix-продукт – SCO Open Server. SCO Open Server базувався на більш ранньої версіїядра (System V Release 3), але був чудово налагоджений і відзначався високою стабільністю. Фірма Santa Crouse Operations інтегрувала свій продукт з AT&T Unix і випустила Open Unix 8 , проте потім продала Unix фірмі Caldera, яка є власником "класичної" ОС Unix сьогодні (наприкінці 2001 р).

Фірма Sun Microsystems розпочала своє представництво у світі Unix системою SunOS, створеною на основі ядра BSD. Однак згодом замінила її системою Solaris на основі S5R4. В даний час поширюється версія 8 цієї ОС (є також v.9-бета). Solaris працює на платформі SPARC (RISC-процесори, що виготовляються за специфікаціями Sun) та Intel-Pentium.

Компанія Hewlett-Packard пропонує ОС HP-UX. v.11 на платформі PA-RISC. HP-UX базується на S5R4, але містить багато властивостей, що "видають" її походження від BSD Unix. Звичайно ж, HP-UX буде доступна і на платформі Intel-Itanium.

Фірма IBM виступає з ОС AIX, остання на сьогоднішній день версія - 5L (про неї ще йтиметься попереду). IBM не оголошувала "родовід" AIX, це в основному оригінальна розробка, але перші версії носили ознаки походження від FreeBSD Unix. Наразі AIX більше схожа на S5R4. Спочатку ОС AIX була доступна і на платформі Intel-Pentium, але згодом (відповідно до загальної політики IBM) перестала підтримуватися на цій платформі. В даний час AIX працює на серверах IBM RS/6000 та інших обчислювальних платформах на базі процесорів PowerPC (у тому числі і на суперкомп'ютерах IBM).

ОС DIGITAL UNIX фірми DEC була єдиною промисловою реалізацією системи OSF/1. ОС DIGITAL UNIX працювала на RISC-серверах Alpha фірми DEC. Коли 1998 р. фірма DEC була поглинута фірмою Compaq, у фірму Compaq перейшли і сервери Alpha, і DIGITAL UNIX. Фірма Compaq має намір відновити присутність на ринку серверів Alpha і тому інтенсивно розвиває і ОС для них. Нинішня назва цієї ОС – Tru64 Unix (поточна версія – 5.1A), вона продовжує базуватися на ядрі OSF/1 і несе в собі багато ознак BSD Unix.

Незважаючи на те, що більшість комерційних Unix-систем базуються на одному ядрі і задовольняють вимоги POSIX, кожна з них має власний діалект API, і розбіжності між діалектами накопичуються. Це призводить до того, що перенесення промислових додатків з однієї Unix-системи на іншу важко і вимагає, як мінімум, перекомпіляції, а часто - і коригування вихідного коду. Спробу подолати "розброд" і створити єдину для всіх ОС Unix було здійснено в 1998 р. альянсом фірм SCO, IBM і Sequent. Ці фірми об'єдналися у проекті Monterey з метою створення єдиної ОС на базі Unixware, власником якої на той час була SCO, IBM AIX та ОС DYNIX фірми Sequent. (Фірма Sequent займає лідируючі позиції у виробництві ЕОМ архітектури NUMA – несиметричної багатопроцесорної – і DYNIX – це Unix для таких ЕОМ). ОС Monterey мала працювати на 32-розрядній платформі Intel-Pentium, 64-розрядній платформі PowerPC і на новій 64-розрядній платформі Intel-Itanium. Про підтримку проекту заявили майже всі лідери виробництва апаратних засобів та проміжного програмного забезпечення. Навіть фірми, що мають власні клони Unix (крім Sun Microsystems), оголосили, що на платформах Intel вони підтримуватимуть лише Monterey. Робота над проектом просувалася, мабуть, успішно. ОС Monterey була серед перших, що довели свою працездатність на Intel-Itanium (поряд з Windows NT і Linux) і єдиною, яка при цьому не вдавалася до емуляції 32-розрядної архітектури Intel-Pentium. Однак у фінальній стадії проекту сталася фатальна подія: SCO продала своє Unix-відділення. Ще раніше фірма Sequent увійшла до складу IBM. "Спадкоємцем" всіх властивостей ОС Monterey стала ОС IBM AIX v.5L. Проте не зовсім усіх. Платформа Intel-Pentium не є для IBM стратегічним напрямком і на цій платформі ОС AIX недоступна. А оскільки інші лідери комп'ютерної індустрії не поділяють (або не повністю поділяють) таку позицію IBM, ідея спільної ОС Unix так і не реалізувалася.

Операційна система UNIX – прабатько багатьох сучасних операційних систем, таких як Linux, Android, Mac OS X та багатьох інших була створена у стінах дослідницького центру Bell Labs – підрозділі компанії AT&T. Взагалі кажучи, Bell Labs - справжній розсадник розплідник вчених, які зробили відкриття, що буквально змінили техніку. Наприклад, саме в Bell Labs працювали такі вчені, як Вільям Шоклі, Джон Бардін та Волтер Браттейн, які вперше створили біполярний транзистор у 1947 році. Можна сказати, що саме в Bell Labs було винайдено лазер, хоча на той час вже було створено мазери. Клод Шеннон, засновник теорії інформації також працював у Bell Labs. Там же працювали творці мови C Кен Томпсон і Денис Рітчі (про них ми ще згадаємо), а також працює автор C++ Б'ярн Страуструп.

На шляху до UNIX

Перш ніж говорити про саму UNIX, давайте згадаємо ті Операційні системи, які були створені до неї, і які багато в чому визначили те, чим є UNIX, а через неї і багато інших сучасних операційних систем.

Розробка UNIX була не перша робота в галузі операційних систем, що проводяться в Bell Labs. У 1957 році в лабораторії почали розробляти операційну систему, яка дістала назву BESYS (скорочення від Bell Operating System). Керівником проекту був Віктор Висотський - син російського астронома, який емігрував до Америки. BESYS був внутрішній проект, який не випускався як закінчений комерційний продукт, хоч усім охочим BESYS розсилалася на магнітних стрічках. Ця система була призначена для виконання на комп'ютерах серії IBM 704 - 709x (IBM 7090, 7094). Хочеться називати ці штуковини допотопним словом ЕОМ, але щоб не різало слух, будемо їх називати далі все-таки комп'ютерами.

IBM 704

Насамперед BESYS призначалася для пакетного виконання великої кількості програм, тобто таким чином, коли задається список програм, і їх виконання планується таким чином, щоб займати максимально можливі ресурси, щоб комп'ютер не простоював. У той же час у BESYS вже були зачатки операційної системи з поділом часу — тобто, по суті, зараз називають багатозадачністю. Коли з'явилися повноцінні системи з поділом часу, ця можливість використовувалася для того, щоб з одним комп'ютером могли працювати одночасно кілька людей, кожен зі свого терміналу.

У 1964 році в Bell Labs стався апгрейд комп'ютерів, в результаті якого на нових комп'ютерах від IBM BESYS вже не могла бути запущена, про кроссплатформенності тоді не йшлося. Комп'ютери тоді IBM поставляла без операційних систем. Розробники з Bell Labs могли б почати писати нову операційну систему, але вони надійшли по-іншому - приєдналися до розробки операційної системи Multics.

Проект Multics (скорочення від слів Multiplexed Information and Computing Service) було запропоновано професором Массачусетського Технологічного Інституту (MIT) Джеком Деннісом. Він разом зі своїми студентами у 1963 році розробив специфікацію на нову операційну систему та зумів зацікавити проектом представників компанії General Electric. В результаті Bell Labs приєднався до MIT та General Electric у розробці нової операційної системи.

А задуми проекту були дуже амбітними. По-перше, це мала бути операційна система з повноцінним поділом часу. По-друге, Multics писався не на асемблері, а однією з перших мов високого рівня — PL/1, який був розроблений у 1964 році. По-третє, Multics могла працювати на багатопроцесорних комп'ютерах. У цій же операційній системі була ієрархічна файлова система, імена файлів могли містити будь-які символи і бути досить довгими, також у файловій системі передбачено символьні посилання на директорії.

На жаль, робота над Multics затяглася надовго, програмісти Bell Labs так і не дочекалися релізу цього продукту і у квітні 1969 вийшли з проекту. А реліз відбувся вже в жовтні того ж року, але, кажуть, перша версія була дуже глючна, і ще рік розробники, що залишилися, виправляли баги, про які їм повідомляли користувачі, хоча через рік Multics був уже більш надійною системою.

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

Народження UNIX

UNIX з'явився майже випадково, і винна в цьому була комп'ютерна гра "Space Travel" - космічна літалка, яку написав Кен Томпсон. Ішов далекий 1969 рік, гра «Space Travel» була розрахована спочатку на ту саму операційну систему Multics, а після того, як для Bell Labs був відрізаний доступ до нових версій Multics, Кен переписав гру на Fortran і портував її на операційну систему GECOS, яка додавалася до комп'ютера GE-635. Але тут закралося дві проблеми. По-перше, у цього комп'ютера була не дуже хороша система для виведення на дисплей, а, по-друге, грати на цьому комп'ютері було дорого - щось близько $ 50-75 на годину.

Але одного разу Кен Томпсон натрапив на комп'ютер DEC PDP-7, який рідко використовувався, і цілком міг підійти для запуску Space Travel, до того ж у нього був кращий відеопроцесор.

Портувати гру на PDP-7 було не так просто, по суті, потрібно написати нову операційну систему для її запуску. За цим справа не стала, на що тільки не підуть програмісти заради улюбленої іграшки. Так зародився UNIX, точніше Unics. Назва, яку запропонував Брайан Керніган, є скороченням від слів Uniplexed Information and Computing System. Нагадаю, що назва Multics походить від слів Multiplexed Information and Computing Service, таким чином, Unics певною мірою протиставлявся Multics у плані простоти. І справді, на Multics вже тоді були нападки щодо її складності. Для порівняння, перші версії ядра Unics займали всього 12 кБ оперативної пам'яті проти 135 кБ у Multics.

Кен Томпсон

На цей раз розробники не стали (поки що) експериментувати з мовами високого рівня, і перша версія Unics була написана на асемблері. У розробці Unics взяли участь сам Томпсон, Денис Рітчі, пізніше до них приєдналися Дуглас Макілрой, Джої Оссанна та Рад Кеннедей. Спочатку Керніган, який запропонував назву ОС, надавав лише моральну підтримку.

Трохи пізніше, в 1970 році, коли була реалізована багатозадачність, операційну систему перейменували в UNIX і перестали вважати скороченням. Саме цей рік вважається офіційним роком народження UNIX і саме від першого січня 1970 року відраховується системний час(кількість секунд, починаючи з цієї дати). Цю ж дату називають пафоснішою — початок ери UNIX (англійською — UNIX Epoch). Пам'ятаєте, нас усі лякали проблемою 2000 року? Так ось подібна проблема на нас чекає ще в 2038 році, коли для уявлення часу не вистачатиме 32-бітових цілих чисел, які часто використовуються для визначення дати, і час із датою стануть негативними. Хочеться вірити, що до цього часу весь життєво важливий софт використовуватиме для цієї мети 64-бітові змінні, щоб відсунути цю страшну дату ще на 292 мільйони років, а там уже щось придумаємо. 🙂

До 1971 UNIX була вже повноцінною операційною системою і Bell Labs навіть застовпила за собою торгову марку UNIX. У цьому ж році UNIX була переписана для роботи на потужному комп'ютері PDP-11, і саме цього року вийшла перша офіційна версія UNIX (її ще називають First Edition).

Паралельно з розробкою Unics/UNIX Кен Томпсон і Денис Рітчі, починаючи з 1969 року, розробляли нову мову B (Бі), яка була заснована мовою BCPL, а ту, у свою чергу, можна вважати нащадком мови Algol-60. Рітчі запропонував переписати UNIX на B, який був переносимий, хоч і інтерпретований, після чого він продовжив модифікувати цю мову під нові потреби. У 1972 році вийшла друга версія UNIX - Second Edition, яка була написана практично повністю на B, на асемблері залишався досить невеликий модуль приблизно в 1000 рядків, так що перенесення UNIX на інші комп'ютери тепер давалося порівняно легко. Так UNIX став портованим.

Кен Томпсон і Денніс Рітчі

Потім мова B розвивалася разом з UNIX, поки з неї не народилася мова C, одна з найбільш відомих мов програмування, яку тепер прийнято поливати брудом або підносити, як ідеал. В 1973 вийшла третя редакція UNIX з вбудованим компілятором мови C, а починаючи з 5-ї версії, що з'явилася на світ в 1974 році, вважається, що UNIX був переписаний повністю на C. До речі, саме в UNIX 1973 з'явилося таке поняття, як Труби (pipe).

Починаючи з 1974-1975 років, UNIX почав поширюватися за межі Bell Labs. Томпсон і Рітчі публікують опис ОС UNIX в Communications of the ACM, а компанія AT&T надає UNIX освітнім установам як засіб для навчання. В 1976 можна сказати, що відбулося перше портування UNIX на іншу систему - на комп'ютер Interdata 8/32. Крім того, в 1975 вийшла 6-а версія UNIX, починаючи з якої з'явилися різні реалізації цієї операційки.

Операційна система UNIX виявилася настільки вдалою, що, починаючи з кінця 70-х років, інші розробники стали робити подібні системи. Давайте тепер перейдемо з оригінальної UNIX на її клони і подивимося, які ще з'явилися операційні системи завдяки їй.

Поява BSD

Розмноження цієї операційної системи багато в чому сприяли американські чиновники, ще до народження UNIX, в 1956 році, що наклали обмеження на компанію AT&T, якій належала лабораторія Bell Labs. Справа в тому, що тоді міністерство юстиції змусило AT&T підписати угоду, яка забороняла компанії займатися діяльністю, не пов'язаною з телефонними та телеграфними мережами та обладнанням, але до 70-х років AT&T вже зрозуміли, який вдалий проект вийшов з UNIX і захотіли зробити його комерційним. Для того щоб чиновники дозволили їм це зробити, AT&T передала вихідники UNIX деяким американським вузам.

Одним із таких вузів, які мали доступ до тіла вихідників був Каліфорнійський університет у Берклі, а якщо є чужі вихідники, то мимоволі виникає бажання підправити в програмі щось під себе, тим більше, що ліцензія це не забороняла. Таким чином, через кілька років (1978 року) з'явилася перша UNIX-сумісна система, створена не в стінах AT&T. То був BSD UNIX.

Каліфорнійський університет у Берклі

BSD - це скорочення від слів Berkeley Software Distribution, спеціальна система розповсюдження програм у вихідних кодах з дуже м'якою ліцензією. Ліцензія BSD була створена якраз для поширення нової UNIX-сумісної системи. Ця ліцензія дозволяє повторне використання вихідного коду, що розповсюджується під нею, та, крім того, на відміну від GPL (якого тоді ще не було), не накладає жодних обмежень на похідні програми. Крім того, вона дуже коротка і не оперує великою кількістю нудних юридичних термінів.

Перша версія BSD (1BSD) була скоріше доповненням до оригінальної UNIX версії 6, ніж самостійна система. У 1BSD був доданий компілятор Паскаля та текстовий редактор ex. Друга версія BSD, що вийшла в 1979 включала такі відомі програми, як vi і C Shell.

Після того, як з'явився BSD UNIX, кількість UNIX-сумісних систем стала зростати неймовірно швидко. Вже від BSD UNIX почали відгалужуватися окремі гілки операційних систем, різні операційні системи обмінювалися один з одним кодом, переплетення ставали досить заплутаними, тому надалі не зупинятися на кожній версії всіх UNIX-систем, а подивимося, як з'явилися найбільш відомі з них.

Мабуть, найвідомішими безпосередніми нащадками BSD UNIX є операційні системи FreeBSD, OpenBSD і, меншою мірою, NetBSD. Всі вони походять від так званої 386BSD, що вийшла 1992 року. 386BSD, як можна здогадатися з назви, була портом BSD UNIX на процесор Intel 80386. Ця система була створена також випускниками Університету Берклі. Автори вважали, що вихідний код UNIX, отриманий від AT&T, був досить сильно змінений, щоб забити на ліцензію AT&T, однак, сама компанія AT&T так не вважала, тому навколо цієї операційної системи йшли судові розгляди. Зважаючи на те, що сама 386BSD стала батьком багатьох інших операційних систем, для неї все закінчилося благополучно.

Проект FreeBSD (на початку у нього не було свого імені) з'явився, як набір патчів до 386BSD, однак ці патчі чомусь не були прийняті, а потім, коли стало ясно, що 386BSD більше розвиватися не буде, в 1993 році проект був розгорнуть у бік створення повноцінної операційної системи, що отримала назву FreeBSD.

Beastie. Талісман FreeBSD

Водночас самі розробники 386BSD створили новий проект NetBSD, від якої, у свою чергу, відповіла OpenBSD. Як бачите, виходить досить розлоге дерево операційних систем. Метою проекту NetBSD було створення такої UNIX-системи, яка могла б працювати як можна більшій кількостіархітектур, тобто досягти максимальної переносимості. Навіть драйвера для NetBSD повинні бути кроссплатформенними.

Логотип NetBSD

Solaris

Однак першою від BSD відбрунькувалася операційна система SunOS, дітище, як ви розумієте з назви, компанії Sun Microsystems, на жаль, нині покійної. Це сталося 1983 року. SunOS - це операційна система, яка додавалася до комп'ютерів, зібраних самою фірмою Sun. Взагалі кажучи, у Sun за рік до цього, в 1982 році, з'явилася операційна система UNI UNIX, яка в своїй основі мала кодову базу Unisoft Unix v7 (Unisoft - це компанія, заснована в 1981 році, яка займалася портуванням Unix на різне залізо), але саме SunOS 1.0 заснована на коді 4.1 BSD. SunOS регулярно оновлювалася до 1994 року, коли вийшла версія 4.1.4, а потім була перейменована в Solaris 2. Звідки взялася двійка? Тут трохи вийшла заплутана історія, тому що Solaris'ом спочатку стали називати SunOS версії 4.1.1 - 4.1.4, що розроблялися з 1990 до 1994 року. Вважайте, що це був своєрідний ребрендинг, який прижився лише, починаючи з версії Solaris 2. Потім, до 1997 року виходили Solaris 2.1, 2.2 тощо. до 2.6, а замість Solaris 2.7 в 1998 вийшов просто Solaris 7, потім стала нарощуватися тільки ця цифра. На даний момент остання версія Solaris – 11, що вийшла 9 листопада 2011 року.

Логотип OpenSolaris

Історія Solaris теж досить складна, аж до 2005 року Solaris була повністю комерційною операційною системою, але в 2005 році Sun вирішили відкрити частину вихідного коду Solaris 10 і створити проект OpenSolaris. Крім того, раніше, поки була жива Sun, Solaris 10 можна було використовувати безкоштовно, або можна було купувати офіційну техпідтримку. Потім на початку 2010 року, коли Oracle поглинув Sun, він зробив Solaris 10 платною системою. На щастя, OpenSolaris Oracle загробити поки що не змогла.

Linux. Куди ж без нього?

А тепер настала черга розповісти про найвідомішу з реалізацій UNIX — Linux. Історія Linux чудова тим, що в ній зійшлися відразу три цікаві проекти. Але перш ніж говорити про творця Linux - Лінуса Торвальдса, треба згадати ще двох програмістів, один з яких - Ендрю Таненбаум, сам того не знаючи, підштовхнув Лінуса на створення Linux, а другий - Річард Столлман, чиїми інструментами користувався Лінус під час створення своєї операційної системи .

Ендрю Таненбаум є професором Амстердамського вільного університету та займається насамперед розробкою операційних систем. Його перу спільно з Альбертом Вудхаллом належить така відома книга, як "Операційні системи: розробка та реалізація", саме вона надихнула Торвальдса зайнятися написанням Linux. У цій книзі розглядається така UNIX-подібна система, як Minix. На жаль, Таненбаум довгий час розглядав Minix тільки як проект для навчання навичок створення операційних систем, але не як повноцінну робочу ОС. У вихідників Minix була досить обмежена ліцензія, коли можна вивчати її код, але не можна розповсюджувати свої змінені версії Minix, та й сам автор довгий час не хотів застосовувати патчі, які йому надсилали.

Ендрю Таненбаум

Перша версія Minix вийшла разом із першим виданням книги у 1987 році, наступні друга та третя версії Minix виходили разом із відповідними редакціями книги про операційні системи. Третю версію Minix, що вийшла в 2005 році, вже цілком можна використовувати як самостійну операційну систему для комп'ютера (є LiveCD-версії Minix, які не вимагають її встановлення на жорсткий диск), так і як вбудована операційна система для мікроконтролерів. Остання зараз версія Minix 3.2.0 з'явилася на світ у липні 2011 року.

А тепер згадаймо про Річарда Столлмана. Останнім часом його стали сприймати лише як пропагандиста вільного софту, хоча багато відомих нині програм з'явилося завдяки ньому, та й Торвальдсу свого часу його проект значно полегшив життя. Найцікавіше, що Лінус і Річард підійшли до створення операційної системи з різних сторін, а в результаті проекти злилися в GNU/Linux. Тут треба дати деякі пояснення щодо того, що це за GNU, і звідки він узявся.

Річард Столлман

Про Столлмана можна розповідати досить довго, наприклад, те, що він отримав диплом із відзнакою з фізики у Гарвардському університеті. Крім того, Столлман працював у Массачусетському Технологічному Інституті, де і почав писати свій знаменитий редактор EMACS у 1970-х роках. При цьому вихідники редактора були доступні всім охочим, що не було якоюсь особливістю в MIT, де тривалий час трималася певним чином дружня анархія, або, як це називав Стівен Леві, автор чудової книги «Хакери. Герої комп'ютерної революції», «Хакерська етика». Але трохи згодом, у MIT почали дбати про безпеку комп'ютерів, користувачам роздали паролі, неавторизовані користувачі не могли отримати доступ до комп'ютера. Столлман був різко проти такої практики, він зробив програму, яка б дозволити дізнатися будь-який пароль будь-якого користувача, пропагував залишати пароль порожнім. Наприклад, він розсилав користувачам такі повідомлення: «Я бачу, що ви вибрали пароль [такий-то]. Я припускаю, що ви можете перейти на пароль «повернення каретки». Його набагато легше набирати, і це відповідає принципу, яким тут не повинно бути паролів». Але його зусилля ні до чого не спричинили. Більше того, нові люди, які приходили до MIT вже почали дбати про права на свою програму, про копірайт тощо.

Пізніше Столлман говорив (цитата з тієї ж книги Леві): «Я не можу повірити в те, що програмне забезпечення мають бути власниками. Те, що відбувалося, саботувало загалом усе людство. Воно не давало людям отримати максимум можливостей із існування програм». Або ще одна його цитата: «Машини почали ламатися, а лагодити їх було нікому. Ніхто не робив потрібних змін у програмному забезпеченні. Нехакери реагували на це просто – вони починали користуватися покупними комерційними системами, приносячи разом із ними фашизм та ліцензійні угоди».

В результаті Річард Столлман пішов із MIT і вирішив створити свою вільну реалізацію UNIX-сумісної операційної системи. Так, 27 вересня 1983 року з'явився проект GNU, що перекладається як «Gnu is Not UNIX». Першою програмою, що відноситься до GNU, став EMACS. В рамках проекту GNU в 1988 році була розроблена власна ліцензія GNU GPL - GNU General Public License, яка зобов'язує авторів програм на основі вихідних джерел, що розповсюджуються під цією ліцензією, також відкривати вихідники під ліцензією GPL.

До 1990-го року в рамках GNU (вже не тільки Столлманом) писався різноманітний софт для майбутньої операційної системи, але ця ОС не мала свого ядра. За ядро ​​взялися лише у 1990-му році, це був проект під назвою GNU Hurd, але він «не вистрілив», остання його версія вийшла у 2009 році. Зате «вистрілив» Linux, до якого ми нарешті підійшли.

І тут набуває чинності фінський хлопець Лінус Торвальдс. Під час навчання в Університеті Хельсінкі Лінусу чекали курси з мови C і системі UNIX, напередодні цього предмета він купив ту саму книгу Таненбаума, в якій описувався Minix. Причому саме описувався, сам Minix треба було купувати окремо на 16-ти дискетах, а коштувала вона тоді $169 (ех, не було тоді у Фінляндії нашого Окраєчка, але, що поробиш, дикуни з 🙂). Крім того, Торвальдсу довелося ще купити в кредит за $3500 сам комп'ютер із процесором 80386, тому що до цього у нього був лише старенький комп'ютер на процесорі 68008, на якому Minix не могла працювати (на щастя, коли він уже зробив першу версію Linux, вдячні користувачі скинулися та оплатили його кредит за комп'ютер).

Лінус Торвальдс

Незважаючи на те, що Торвальдсу Minix загалом подобалася, але поступово він став розуміти, які у неї обмеження та недоліки. Особливо дратувала його програма емуляції терміналу, що додавалася до операційної системи. В результаті він вирішив написати свій емулятор терміналу, а заразом і розібратися в роботі 386-го процесора. Торвальдс писав емулятор на низькому рівні, тобто починав із завантажувача BIOS, поступово емулятор обростав новими можливостями, для того, щоб завантажувати файли, Лінусу довелося написати драйвер дисковода і файлової системи і пішло, і поїхало. Так з'явилася операційна система Linux(на той момент у неї ще не було назви).

Коли операційна система стала більш-менш вимальовуватися, першою програмою, яку Лінус запустив на ній, була bash. Правильніше було б сказати навіть, що він підправляв свою операційну систему таким чином, щоб bash нарешті зміг працювати. Після цього він почав поступово запускати під своєю операційною системою інші програми. А операційна система мала називатися зовсім не Linux. Ось цитата з автобіографії Торвальдса, яка вийшла під назвою Just for Fun: «Про себе я називав її Linux. Слово честі, я ніколи не збирався випускати її під ім'ям Linux, тому що це здавалося мені занадто нескромним. Яке ім'я приготував для остаточної версії? Freax. (Зрозуміли? Freaks - фанати - і на кінці х від Unix) ».

25 серпня 1991 року на конференції comp.os.minix з'явилося таке історичне повідомлення: «Привіт усім користувачам minix! Я тут пишу (безкоштовну) операційну систему (аматорську версію — вона не буде такою великою та професійною, як gnu) для 386-х та 486-х AT. Я керуюся цим із квітня, і вона, схоже, скоро буде готова. Напишіть мені, кому що подобається/не подобається в minix, оскільки моя ОС на неї схожа (крім іншого, у неї — з практичних міркувань — те ж фізичне розміщення файлової системи). Поки що я переніс у неї bash (1.08) та gсс (1.40), і все начебто працює. Отже, найближчими місяцями в мене вийде щось працююче, і мені хотілося б знати, які функції потрібні більшості. Усі заявки приймаються, але виконання не гарантується:-)»

Зверніть увагу, тут вже згадується GNU та програма gcc (на той момент ця абревіатура розшифровувалась як GNU C Compiler). І згадайте про Столлмана та його GNU, які почали розробляти операційну систему з іншого кінця. Зрештою, сталося злиття. Тому Столлман ображається, коли операційну систему називають просто Linux, а не GNU/Linux, все ж таки Linux — це саме ядро, а багато обважень були взяті з проекту GNU.

17 вересня 1991 Лінус Торвальдс вперше виклав на публічний FTP-сервер свою операційну систему, яка на той момент мала версію 0.01. З того часу все прогресивне людство відзначає цей день як день народження Linux. Особливо нетерплячі починають відзначати його ще 25 серпня, коли Лінус зізнався у конференції, що пише операційку. Далі пішов розвиток Linux, і сама назва Linux зміцнилася, тому що адреса, куди була викладена операційна система, виглядала як ftp.funet.fi/pub/OS/Linux. Справа в тому, що Арі Лемке - викладач, який виділив Лінусу місце на сервері, здалося, що Freax виглядає не дуже презентабельно, і він назвав директорію "Linux" як суміш імені автора і "x" на кінці від UNIX.

Tux. Логотип Linux

Є ще такий момент, що хоча Торвальдс і написав Linux під впливом Minix, між Linux та Minix є важлива з погляду програмування відмінність. Справа в тому, що Таненбаум - прихильник мікроядерних операційних систем, тобто таких, коли операційна система має невелике ядро ​​з деякою невеликою кількістю функцій, а всі драйвера і сервіси операційної системи виступають у вигляді окремих незалежних модулів, а у Linux ядро ​​монолітне, туди включено багато можливостей операційної системи, тому під Linux, якщо потрібна якась особлива можливість, може знадобитися перекомпілювати ядро, вносячи туди якісь зміни. З одного боку у мікроядерної архітектури плюси - це надійність і простота, в той же час, при недбалому проектуванні мікроядра, монолітне ядро ​​працюватиме швидше, тому що йому не треба обмінюватися великими обсягами даних зі сторонніми модулями. Після появи Linux, у 1992 році, між Торвальдсом і Таненбаумом, а також їх прихильниками у конференції comp.os.minix розгорілася віртуальна суперечка на тему, яка архітектура краща — мікроядерна чи монолітна. Таненбаум стверджував, що за мікроядерною архітектурою майбутнє, і Linux, не встигнувши вийти, вже застарів. З того дня минуло вже майже 20 років… До речі, GNU Hurd, який мав стати ядром операційної системи GNU, також розроблявся як мікроядро.

Мобільний Linux

Отже, з 1991 року Linux поступово розвивається, і хоч на комп'ютерах простих користувачівчастка Linux поки не велика, на серверах і суперкомп'ютерах він вже давно користується популярністю, і Windows намагається відтяпати свою частку в цій галузі. Крім того, зараз Linux зайняв хороші позиції на телефонах і планшетах, адже Android це теж Linux.

Andriod логотип

Історія Android почалася з компанії Android Inc, що з'явилася в 2003 році, і нібито займалася розробкою мобільних програм (конкретні розробки цієї компанії в перші роки свого існування досі не особливо афішуються). Але вже через два роки компанію Android Inc поглинає Google. Жодних офіційних подробиць щодо того, чим саме займалися розробники Android Inc до поглинання знайти не вдалося, хоча вже в 2005 році, після її покупки Google, подейкували, що вони вже тоді займалися розробкою нової операційної системи для телефонів. Однак перший реліз Android відбувся 22 жовтня 2008 року, після чого у нього регулярно стали виходити нові версії. З особливостей розвитку Android можна було б назвати те, що на цю систему почалися нападки з приводу нібито порушених патентів, та й з Java-реалізацією там незрозуміло справи з юридичної точки зору, але давайте не вдаватимемося в ці не технічні передбиття.

Але Android не єдиний мобільний представник Linux, крім нього є ще операційна система MeeGo. Якщо за спиною Android стоїть така потужна корпорація, як Google, то MeeGo одного сильного піклувальника не має, вона розробляється спільнотою під егідою The Linux Foundation, якій допомагають такі компанії як Intel, Nokia, AMD, Novell, ASUS, Acer, MSI та інші. На даний момент основна допомога йде від компанії Intel, що не дивно, тому що сам проект MeeGo виріс із проекту Moblin, який був ініційований Intel. Moblin – це такий дистрибутив Linux, який повинен був працювати на портативні пристрої, керованим процесором Intel Atom Згадаємо ще один мобільний Linux – Openmoko. Linux досить швидко намагається зміцнитися на телефонах і планшетах, Google з Android за справу взявся серйозно, перспективи інших мобільних версій Linux поки туманні.

Як бачите, на даний момент Linux може запускатися на багатьох системах, керованими різними процесорами, однак, на початку 1990-х Торвальдс не вірив, що Linux вдасться портувати кудись ще крім 386-го процесора.

Mac OS X

Тепер переключимося на іншу операційну систему, що також є UNIX-сумісною - Mac OS X. Перші версії Mac OS, аж до 9-ї, не були засновані на UNIX, тому не будемо на них зупинятися. Найцікавіше для нас почалося після вигнання Стіва Джобса з Apple у 1985 році, після чого він заснував компанію NeXT, яка займалася розробкою комп'ютерів та софту до них. У компанію NeXT потрапив програміст Аветіс Теванян, який раніше займався розробкою мікроядра Mach для UNIX-сумісної операційної системи, що розробляється в Carnegie Mellon University. Ядро Mach мало замінити собою ядро ​​BSD UNIX.

Логотип компанії NeXT

Аветіс Теванян був лідером команди, що розробляє нову UNIX-сумісну операційну систему, яка отримала назву NeXTSTEP. Щоб не винаходити велосипед, NeXTSTEP була заснована на тому самому ядрі Mach. З точки зору програмування, NeXTSTEP, на відміну від багатьох інших операційних систем, була об'єктно-орієнтованою, величезну роль у ній грала мова програмування Objective-C, яка зараз широко використовується в Mac OS X. Перша версія NeXTSTEP була випущена в 1989 році. Незважаючи на те, що NeXTSTEP спочатку розраховувалася на процесори Motorola 68000, але на початку 1990-х років, операційна система була портована на 80386 та 80486 процесори. Справи у компанії NeXT йшли не найкращим чином, і в 1996 році компанія Apple запропонувала Джобсу купити компанію NeXT для того, щоб використовувати NeXTSTEP замість Mac OS. Тут ще можна було б розповісти про суперництво між операційними системами NeXTSTEP і BeOS, що закінчилося перемогою NeXTSTEP, але не подовжуватимемо і без того довге оповідання, до того ж BeOS ніяк не відноситься до UNIX, тому на даний момент вона нас не цікавить, хоча сама собою ця операційна система була дуже цікавою, і шкода, що її розвиток перервалося.

Через рік, коли Джобс повернувся до Apple, при ньому продовжилася політика пристосування NeXTSTEP для комп'ютерів Apple, А ще через кілька років ця операційна система була портована на процесори PowerPC та Intel. Таким чином, серверна версія Mac OS X (Mac OS X Server 1.0) вийшла в 1999, а в 2001 вийшла операційна система для кінцевих користувачів - Mac OS X (10.0).

Пізніше, на основі Mac OS X була розроблена операційна система телефонів iPhone, яка отримала назву Apple iOS Перша версія iOS вийшла у 2007 році. На цій операційній системі працює і iPad.

Висновок

Після всього вищесказаного, у вас може виникнути питання, яку операційну систему можна вважати UNIX? Щодо цього немає однозначної відповіді. З формального погляду існує Єдина специфікація UNIX - стандарт, якому має задовольняти операційна система, щоб її можна було називати UNIX. Не плутайте зі стандартом POSIX, якому може задовольняти і не UNIX-подібна операційна система. До речі, назва POSIX була запропонована тим самим Річардом Столлманом, а формально стандарт POSIX має номер ISO/IEC 9945. Отримання єдиної специфікації — справа дорога і довга, тому не багато операційних систем з цим зв'язуються. З операційних систем, які отримали такий сертифікат, можна назвати Mac OS X, Solaris, SCO і ще кілька менш відомих операційних систем. Сюди не входять, ні Linux, ні * BSD, але ніхто не сумнівається в їх «ЮніксОвості». Тому, наприклад, програміст і письменник Ерік Реймонд, запропонував ще дві ознаки для визначення, чи є та чи інша операційна система UNIX-подібною. Першою з таких ознак є «неслідність» вихідного коду від первородного UNIX, що розробляється в AT&T і Bell Labs. Сюди попадають BSD-системи. Друга ознака – «UNIX за функціональністю». Сюди потрапляють операційні системи, які поводяться близько до того, як описано у специфікації UNIX, але не отримали формальний сертифікат, і, крім того, ніяк не пов'язані з вихідними джерелами UNIX. Сюди належать Linux, Minix, QNX.

На цьому ми, мабуть, зупинимося, бо вийшло й так надто багато літер. У цей огляд потрапили в основному історії появи найбільш відомих операційних систем - варіацій BSD, Linux, Mac OS X, Solaris, за бортом залишилися ще деякі UNIX-и, такі як QNX, Plan 9, Plan B та деякі інші. Хтозна, може бути в майбутньому і про них ще згадаємо.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ РОСІЙСЬКОЇ

ФЕДЕРАЦІЇ

ФЕДЕРАЛЬНА АГЕНЦІЯ З ОСВІТИ

ДЕРЖАВНИЙ ОСВІТНИЙ ЗАКЛАД

ВИЩОЇ ПРОФЕСІЙНОЇ ОСВІТИ

ТАГАНРОГСЬКИЙ ДЕРЖАВНИЙ РАДІОТЕХНІЧНИЙ УНІВЕРСИТЕТ

Дисципліна «Інформатика»

"Операційна система UNIX"

Виконала: Орда-Жигуліна Д.В., гр. Е-25

Перевірив: Вишневецький В.Ю.

Таганрог 2006


Вступ

Що таке Unix 3

Де взяти безкоштовний Unix 7

Основна частина. (Опис Unix)

1. Основні поняття Unix 8

2. Файлова система 9

2.1 Типи файлів 9

3. Командний інтерпретатор 11

4. Ядро ОС UNIX 12

4.1 Загальна організаціятрадиційного ядра ОС UNIX 13

4.2 Основні функції ядра 14

4.3 Принципи взаємодії із ядром 15

4.4 Принципи обробки переривань 17

5. Керування введенням/виводом 18

5. 1 Принципи системної буферизації введення/виводу 19

5. 2 Системні виклики для керування введенням/виводом 21

6. Інтерфейси та вхідні точки драйверів 23

6. 1 Блокові драйвери 23

6. 2 Символьні драйвери 24

6. 3 Поточні драйвери 25

7. Команди та утиліти 25

7. 1 Організація команди в ОС UNIX 26

7. 2 Перенаправлення введення/виводу та організація конвеєра 26

7. 3 Вбудовані, бібліотечні та користувацькі команди 26

7. 4 Програмування командною мовою 27

8. Засоби графічного інтерфейсу користувачів

8.1 Ідентифікатори користувача та групи користувачів 30

8.2 Захист файлів 32

8.3 Перспективні ОС, що підтримують ОС UNIX 33

Висновок

Основні відмінності Unix від інших OS 36

Області застосування Unix 37


Вступ

Що таке Unix

Термін Unix і недостатньо еквівалентний йому UNIX використовують у різних значеннях. Почнемо з другого термінів, як простішого. У двох словах, UNIX (саме в такій формі) - зареєстрована торгова марка, що спочатку належала корпорації AT&T, яка змінила за своє довге життя багато господарів і нині є власністю організації під назвою Open Group. Право використання імені UNIX досягається шляхом свого роду " перевірки на вошивість " - проходження тестів відповідності специфікаціям якоїсь еталонної ОС (Single Unix Standard - що у разі можна перекласти як Єдиний Стандарт на Unix). Процедура ця не тільки складна, а й дуже недешева, і тому їй зазнали лише кілька оперціонок з нині здорових, і всі вони є пропрієтарними, тобто є власність деяких корпорацій.

Серед корпорацій, що заслужили право на ім'я UNIX потім розробників/тестувальників та кров'ю (точніше, доларом) власників, можна назвати наступні:

Sun з її SunOS (більш відомою у світі під ім'ям Solaris);

IBM, що розробила систему AIX;

Hewlett-Packard – власник системи HP-UX;

IRIX – операційна компанія SGI.

Крім цього, власне ім'я UNIX застосовується до систем:

True64 Unix, розроблена фірмою DEC, з ліквідацією якої перейшла до Compaq, а нині, разом з останньою, що стала власністю тієї ж Hewlett-Packard;

UnixWare – власність компанії SCO (продукту злиття фірм Caldera та Santa Cruz Operation).

Будучи пропрієтарними, всі ці системи продаються за чималі (навіть за американськими масштабами) гроші. Однак це - не головна перешкода до поширення власне UNIX"ів. Бо загальною їх особливістю є прив'язка до певних апаратних платформ: AIX працює на серверах та робочих станціях IBM з процесорами Power, HP-UX - на власних машинах HP-PA (Precission Architecture) , IRIX - на графічних станціях від SGI, що несуть процесори MIPS,True64 Unix - призначена для процесорів Alpha (на жаль, у бозі померлих). Sparc, і той самий PC, що, проте, не сильно сприяло їх поширеності - внаслідок відносно слабкої підтримки нової PC-периферії.

Таким чином, UNIX – це поняття насамперед юридичне. А ось за терміном Unix закріпилося технологічне трактування. Так в побуті IT-індустрії називають все сімейство операційних систем, що походять від "первозданной" UNIX компанії AT&T, або відтворюють її функції "з чистого листа", у тому числі вільні ОС, такі, як Linux, FreeBSD та інші BSD, ніякої перевірки на відповідність Single Unix Standard ніколи не піддавалися. І тому їх часто називають Unix-подібними.

Широко поширений також близький за змістом термін "POSIX-сумісні системи", яким поєднується сімейство ОС, що відповідають однойменному набору стандартів. Самі собою стандарти POSIX (Portable Operation System Interface based on uniX) розроблялися з урахуванням практики, прийнятої в Unix-системах, і тому останні є за визначенням POSIX-совместимыми. Однак це не зовсім синоніми: на сумісність зі стандартами POSIX, претендують операційні системи, пов'язані з Unix лише побічно (QNX, Syllable), або непов'язані взагалі (аж до Windows NT/2000/XP).

Щоб прояснити питання взаємин UNIX, Unix і POSIX, доведеться трохи заглибитися в історію. Власне історія цього питання докладно розглянута у відповідному розділі книги "Вільний Unix: Linux, FreeBSD та інші" (найближчим часом виходить у видавництві БХВ-Петербург) і в статтях з історії Linux і BSD-систем.

Операційна система Unix (точніше її перший варіант) була розроблена співробітниками Bell Labs (підрозділи компанії AT&T) в 1969-1971 роках. Перші її автори - Кен Томпсон і Денніс Річі - робили це виключно для власних цілей, зокрема, для того, щоб можна було розважатися улюбленою грою StarTravel. І з низки юридичних причин сама компанія не могла використовувати її як комерційний продукт. Проте практичне застосування Unix знайшлося досить швидко. По-перше, вона використовувалася в Bell Labs для підготовки різної технічної (у тому числі патентної) документації. А по-друге, на Unix базувалася комунікаційна система UUCP (Unix to Unix Copy Programm – програма копіювання з Unix до Unix).

Інша сфера застосування Unix у 70-х - початку 80-х років минулого століття виявилася зовсім незвичайною. Зокрема, у вихідних текстах вона поширювалася серед наукових установ, що ведуть роботи в галузі Computer Science. Метою такого поширення (воно не було цілком вільним у нинішньому розумінні, але фактично виявлялося дуже ліберальним) були: освіта та дослідження у вищезазначеній галузі знань.

Найбільшої популярності здобула система BSD Unix, створена в Університеті Берклі, Каліфорнія. Яка, поступово звільняючись від пропрієтарного коду первозданної Unix, зрештою, після драматичних перипетій (докладно описаних тут), дала початок сучасним вільним BSD-системам – FreeBSD, NetBSD та іншим.

Одним з найважливіших результатів роботи університетських хакерів виявилося (1983 рік) впровадження в Unix підтримки протоколу TCP/IP, на якому ґрунтувалася тодішня мережа ARPANET (і яка стала основою основ сучасного Інтернету). Це стало передумовою домінування Unix у всіх сферах, пов'язаних із Всесвітньою мережею. І це виявилося наступним практичним застосуванням цієї родини операційок - на той час про єдину Unix говорити вже не доводилося. Тому що вона, як було сказано раніше, відокремилися дві її гілки - те, що походить від первозданної UNIX (згодом вона отримала ім'я System V) і система беркліанського походження. З іншого боку, System V лягла в основу тих різноманітних пропрієтарних UNIX"ів, які, власне, і мали юридичне право претендувати на це ім'я.

Остання обставина - розгалуження колись єдиної ОС на кілька ліній, що поступово втрачають сумісність, - усупереч суперечності з одним з наріжних каменів Unix-ідеології: переносимості системи між різними платформами, та її додатків - з однієї Unix-системи в іншу. Що викликало до життя діяльність різного роду організацій, що стандартують, завершилася врешті-решт створенням набору стандартів POSIX, про який говорилося раніше.

Саме на стандарти POSIX спирався Лінус Торвальдс, створюючи "з нуля" (тобто не використовуючи раніше існуючий код) свою операційну систему - Linux. А та, швидко та успішно освоївши традиційні сфери застосування Unix-систем (розробка софту, комунікації, Інтернет), згодом відкрила для них і нову – настільні платформи загального призначення. Що і забезпечило її популярність у народі - популярність, що перевершує таку всіх інших Unix-систем, разом узятих, як пропрієтарних, так і вільних.

Далі мова піде про роботу в Unix-системах у найширшому значенні цього слова, без урахування всякого роду торгових марокта інших юридичних проблем. Хоча основні приклади, що стосуються прийомів роботи, будуть взяті з області вільних їх реалізацій - Linux, меншою мірою FreeBSD, і ще меншою - з інших BSD-систем.

Де взяти безкоштовний Unix?

FreeBSD База – www.freebsd.org;

Звернутись можна на www.sco.com


Основна частина. (Опис Unix)

1. Основні поняття Unix

Unix базується на двох основних поняттях: "процес" та "файл". Процеси являють собою динамічний біксистеми, це суб'єкти; а файли – статичну, це об'єкти дії процесів. Майже весь інтерфейс взаємодії процесів з ядром та один з одним виглядає як запис/читання файлів. Хоча треба додати такі речі, як сигнали, пам'ять, що розділяється, і семафори.

Процеси можна дуже умовно розділити на два типи - завдання та демони. Завдання - це процес, який виконує свою роботу, прагнучи якнайшвидше закінчити її і завершитися. Демон чекає на події, які він повинен обробити, обробляє події, що відбулися, і знову чекає; завершується він зазвичай за наказом іншого процесу, найчастіше його вбиває користувач, давши команду "kill номер_процесса". У цьому сенсі виходить, що інтерактивне завдання, що обробляє введення користувача, швидше схоже на демона, ніж на завдання.

2. Файлова система

У старих Unix"ах відводилося 14 літер на ім'я, у нових це обмеження знято. У директорії крім імені файлу знаходиться його ідентефікатор inode - ціле число, що визначає номер блоку, в якому записані атрибути файлу. Серед них: номер користувача - власника файлу; номер групи, кількість посилань на файл (див. далі) дати та час створення, останньої модифікації та останнього звернення до файлу, атрибути доступу Атрибути доступу містять тип файлу (див. далі), атрибути зміни прав при запуску (див. далі) доступу до нього для господаря, одногрупника та інших на читання, запис та виконання.Право на стирання файлу визначається правом запису до вищележачої директорії.

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

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

2.1 Типи файлів

Файли бувають таких типів:

простий файл прямого доступу;

директорія (файл, що містить імена та ідентефікатори інших файлів);

символьний лінк (рядок з ім'ям іншого файлу);

блоковий пристрій (диск або магнітна стрічка);

послідовний пристрій (термінали, послідовні та паралельні порти; диски та магнітні стрічки теж мають інтерфейс послідовного пристрою)

названий канал.

Спеціальні файли, призначені для роботи з пристроями, зазвичай зосереджені в директорії "/dev". Ось деякі з них (у номінації FreeBSD):

tty* - термінали, у т.ч.: ttyv - віртуальна консоль;

ttyd - DialIn термінал (зазвичай послідовний порт);

cuaa - DialOut лінія

ttyp – мережевий псевдо-термінал;

tty - термінал, з яким асоційоване завдання;

wd* - жорсткі диски та їх підрозділи, зокрема: wd - жорсткий диск;

wds - партія цього диска (названа тут "slice");

wds – розділ партиції;

fd – floppy-диск;

rwd*, rfd* - те саме, що wd* і fd*, але з послідовним доступом;

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

На відміну від DOS, в якому повне ім'я файлу виглядає як "диск:шлях", і RISC-OS, в якій воно виглядає "-файлова_система-диск:$.шлях.ім'я" (що взагалі кажучи має свої переваги), Unix використовує прозору нотацію у вигляді "/шлях/ім'я". Корінь відраховується від розділу, з якого було завантажено ядро ​​Unix. Якщо необхідно використати інший розділ (а на завантажувальному розділі зазвичай знаходиться тільки найнеобхідніше для завантаження), використовується команда `mount /dev/файл_розділу директорія`. При цьому файли та піддиректорії, які раніше були в цій директорії, стають недоступними, поки розділ не буде розмонтований (природно, всі нормальні люди використовують для монтування розділів порожні директорії). Виробляти монтування та розмонтування має право тільки супервізор.

При запуску кожен процес може розраховувати, що для нього вже відкрито три файли, які йому відомі як стандартне введення stdin по дескриптору 0; стандартний висновок stdout по дескриптору 1; і стандартний висновок stderr по дескриптору 2. При реєстрації у системі, коли користувач вводить ім'я та пароль, йому запускається shell, всі троє спрямовані на /dev/tty; Пізніше кожен із новачків може бути перенаправлений на будь-який файл.

3. Командний інтерпретатор

У Unix практично завжди входять два командні інтерпретатори - sh (shell) і csh (C-подібний shell). Крім них ще бувають bash (Bourne), ksh (Korn) та інші. Не вдаючись до подробиць, наведу загальні принципи:

Усі команди, крім зміни поточної директорії, установки змінних оточення (environment) та операторів структурного програмування - зовнішні програми. Ці програми зазвичай розміщуються в каталогах /bin і /usr/bin. Програми системного адміністрування - у каталогах /sbin та /usr/sbin.

Команда складається з імені програми та аргументів, що запускається. Аргументи відокремлюються від імені команди та один від одного пробілами та табуляціями. Деякі спецсимволи інтерпретуються самим shell"ом. Спецсимволами є " " ` ! $ ^ * ? | & ; (ще які?).

В однієї командному рядкуможна дати кілька команд. Команди можна розділити; (Послідовне виконання команд), & (асинхронне одночасне виконання команд), | (Синхронне виконання, стандартний виведення stdout першої команди буде подано на стандартне введення stdin другий).

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

Якщо потрібно отримати інформацію з будь-якої команди, дайте команду "man ім'я_команди". На екран це буде видаватися через програму "more" - подивіться, як з нею керуватися на вашому Unix'і командою `man more`.

4. Ядро ОС UNIX

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

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

В результаті, ядро ​​більшості сучасних комерційних варіантів ОС UNIX є не дуже чітко структурованим монолітом великого розміру. З цієї причини програмування на рівні ядра ОС UNIX продовжує залишатися мистецтвом (якщо не вважати відпрацьованою та зрозумілою технологією розробки драйверів зовнішніх пристроїв). Ця недостатня технологічність організації ядра ОС UNIX багатьох не задовольняє. Звідси прагнення повного відтворення середовища ОС UNIX за зовсім інший організації системи.

У зв'язку з найбільшою поширеністю часто обговорюється ядро ​​UNIX System V (можна вважати його традиційним).

4.1 Загальна організація традиційного ядра ОС UNIX

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

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

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

Машинно-залежна частина традиційного ядра ОС UNIX включає такі компоненти:

розкрутка та ініціалізація системи на низькому рівні (поки що це залежить від особливостей апаратури);

первинна обробка внутрішніх та зовнішніх переривань;

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

перемикання контексту процесів між режимами користувача та ядра;

пов'язані з особливостями цільової платформи частини драйверів пристроїв.

4.2 Основні функції ядра

До основних функцій ядра ОС UNIX прийнято відносити такі:

(a) Ініціалізація системи – функція запуску та розкрутки. Ядро системи забезпечує засіб розкручування (bootstrap), який забезпечує завантаження повного ядра на згадку про комп'ютера і запускає ядро.

(b) Управління процесами та нитками - функція створення, завершення та відстеження існуючих процесів та ниток ("процесів", що виконуються на спільній віртуальній пам'яті). Оскільки ОС UNIX є багатопроцесною операційною системою, ядро ​​забезпечує поділ між запущеними процесами часу процесора (або процесорів у мультипроцесорних системах) та інших ресурсів комп'ютера для створення зовнішнього відчуття того, що процеси реально виконуються в паралель.

(c) Управління пам'яттю - функція відображення практично необмеженої віртуальної пам'яті процесів у фізичну оперативну пам'ятькомп'ютера, який має обмежені розміри. Відповідний компонент ядра забезпечує використання одних і тих же областей оперативної пам'яті декількома процесами з використанням. зовнішньої пам'яті.

(d) Управління файлами – функція, що реалізує абстракцію файлової системи, – ієрархії каталогів та файлів. Файлові системи ОС UNIX підтримують кілька типів файлів. Деякі файли можуть містити дані у форматі ASCII, інші відповідатимуть зовнішнім пристроям. У файловій системі зберігаються об'єктні файли, файли і т.д. Файли зазвичай зберігаються на пристроях зовнішньої пам'яті; доступом до них забезпечується засобами ядра. У світі UNIX існує кілька типів організації файлових систем. Сучасні варіанти ОС UNIX одночасно підтримують більшість типів файлових систем.

(e) Комунікаційні засоби - функція, що забезпечує можливості обміну даними між процесами, що виконуються всередині одного комп'ютера (IPC - Inter-Process Communications), між процесами, що виконуються в різних вузлах локальної або глобальної мережі передачі даних, а також між процесами та драйверами зовнішніх пристроїв .

(f) Програмний інтерфейс - функція, що забезпечує доступ до можливостей ядра з боку процесів користувача на основі механізму системних викликів, оформлених у вигляді бібліотеки функцій.

4.3 Принципи взаємодії із ядром

У будь-якій операційній системі підтримується деякий механізм, який дозволяє користувальницьким програмам звертатися за послугами ядра ОС. В операційних системах найвідомішої радянської обчислювальної машини БЭСМ-6 відповідні засоби спілкування з ядром називалися екстракодами, в операційних системах IBM вони називалися системними макрокомандами тощо. В ОС UNIX такі засоби називаються системними викликами.

Назва не змінює сенс, який полягає в тому, що для звернення до функцій ядра ОС використовуються "спеціальні команди" процесора, при виконанні яких виникає особливе внутрішнє переривання процесора, що переводить його в режим ядра (у більшості сучасних ОС цей вид переривань називається trap - пастка). При обробці таких переривань (дешифрації) ядро ​​ОС розпізнає, що насправді переривання є запитом до ядра з боку програми користувача на виконання певних дій, вибирає параметри звернення та обробляє його, після чого виконує "повернення з переривання", відновлюючи нормальне виконання користувальницької програми .

Зрозуміло, що конкретні механізми порушення внутрішніх переривань з ініціативи програми користувача різняться в різних апаратних архітектурах. Оскільки ОС UNIX прагне забезпечити середовище, в якому користувацькі програми могли б бути повністю мобільні, був потрібний додатковий рівень, який приховує особливості конкретного механізму порушення внутрішніх переривань. Цей механізм забезпечується так званою бібліотекою системних дзвінків.

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

4.4 Принципи обробки переривань

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

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

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

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

5. Керування введенням/виводом

Традиційно в ОС UNIX виділяються три типи організації вводу/виводу та, відповідно, три типи драйверів. Блокове введення/виведення головним чином призначене для роботи з каталогами та звичайними файламифайлової системи, що на базовому рівні мають блокову структуру. На рівні користувача можна працювати з файлами, прямо відображаючи їх у сегменти віртуальної пам'яті. Ця можливість розглядається як верхній рівень блокового введення/виводу. На нижньому рівні блокове введення/виведення підтримується блоковими драйверами. Блокове введення/виведення, крім того, підтримується системною буферизацією.

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

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

5. 1 Принципи системної буферизації вводу/виводу

Традиційним способом зниження накладних витрат при виконанні обмінів із пристроями зовнішньої пам'яті, що мають блокову структуру, є буферизація блокового вводу/виводу. Це означає, що будь-який блок пристрою зовнішньої пам'яті зчитується насамперед деякий буфер області основної пам'яті, званої в ОС UNIX системним кешем, і вже звідти повністю або частково (залежно від виду обміну) копіюється у відповідний простір користувача.

Принципами організації традиційного механізму буферизації є, по-перше, те, що копія вмісту блоку утримується в системному буфері до тих пір, поки не виникне потреба її заміщення через брак буферів (для організації політики заміщення використовується різновид алгоритму LRU). По-друге, під час запису будь-якого блоку пристрою зовнішньої пам'яті реально виконується лише оновлення (або освіту та наповнення) буфера кеша. Справжній обмін з пристроєм виконується або при виштовхуванні буфера внаслідок заміщення його вмісту, або при виконанні спеціального системного виклику sync (або fsync), який підтримується спеціально для насильницького виштовхування у зовнішню пам'ять оновлених буферів кешу.

Ця традиційна схема буферизації увійшла у суперечність із розвиненими в сучасних варіантах ОС UNIX засобами управління віртуальною пам'яттюі особливо з механізмом відображення файлів сегменти віртуальної пам'яті. Тому в System V Release 4 з'явилася нова схема буферизації, яка поки що використовується паралельно зі старою схемою.

Суть нової схеми у тому, що лише на рівні ядра фактично відтворюється механізм відображення файлів у сегменти віртуальної пам'яті. По-перше, нагадаємо про те, що ядро ​​ОС UNIX дійсно працює у своїй віртуальній пам'яті. Ця пам'ять має складнішу, але таку ж структуру, як і користувальницька віртуальна пам'ять. Іншими словами, віртуальна пам'ять ядра є сегментно-сторінковою, і нарівні з віртуальною пам'яттю для користувача процесів підтримується загальною підсистемою управління віртуальною пам'яттю. З цього випливає, по-друге, що будь-яка функція, що забезпечується ядром для користувачів, може бути забезпечена одними компонентами ядра для інших його компонентів. Зокрема, це стосується і можливостей відображення файлів у сегменти віртуальної пам'яті.

Нова схема буферизації в ядрі ОС UNIX головним чином ґрунтується на тому, що для організації буферизації можна не робити майже нічого спеціального. Коли один з процесів користувача відкриває не відкритий до цього часу файл, ядро ​​утворює новий сегмент і підключає до цього сегменту відкривається файл. Після цього (незалежно від того, чи користувальницький процес працюватиме з файлом у традиційному режимі з використанням системних викликів read і write або підключить файл до сегменту своєї віртуальної пам'яті) на рівні ядра робота буде здійснюватися з тим ядерним сегментом, до якого підключений файл на рівні ядра. Основна ідея нового підходу полягає в тому, що усувається розрив між управлінням віртуальною пам'яттю та загальносистемною буферизацією (це потрібно було б зробити давно, оскільки очевидно, що основну буферизацію в операційній системі має робити компонент управління віртуальною пам'яттю).

Чому ж не можна відмовитись від старого механізму буферизації? Вся справа в тому, що нова схема передбачає наявність деякої безперервної адресації всередині об'єкта зовнішньої пам'яті (має існувати ізоморфізм між відображуваним і відображеним об'єктами). Однак, при організації файлових систем ОС UNIX досить складно розподіляє зовнішню пам'ять, що особливо стосується i-вузлів. Тому деякі блоки зовнішньої пам'яті доводиться вважати ізольованими, і для них виявляється вигідніше використовувати стару схему буферизації (хоча, можливо, у завтрашніх варіантах UNIX і вдасться перейти до уніфікованої нової схеми).

5. 2 Системні виклики для керування введенням/виводом

Для доступу (тобто для отримання можливості подальшого виконання операцій вводу/виводу) до файлу будь-якого виду (включаючи спеціальні файли) користувальницький процес має виконати попереднє підключення до файлу за допомогою одного із системних викликів open, creat, dup або pipe.

Послідовність дій системного виклику open (pathname, mode):

аналізується несуперечність вхідних параметрів (головним чином, що належать до прапорів режиму доступу до файлу);

виділяється або знаходиться простір для описувача файлу системної областіданих процесу (u-області);

у загальносистемній області виділяється чи знаходиться існуючий простір для розміщення системного описника файлу (структури file);

провадиться пошук в архіві файлової системи об'єкта з ім'ям "pathname" і утворюється або виявляється описувач файлу рівня файлової системи (vnode у термінах UNIX V System 4);

Виконується зв'язування vnode з раніше утвореною структурою файлу.

Системні виклики open та creat (майже) функціонально еквівалентні. Будь-який існуючий файл можна відкрити за допомогою системного виклику creat, і будь-який новий файл можна створити за допомогою системного виклику Open. Однак, стосовно системного виклику creat важливо підкреслити, що у разі свого природного застосування (для створення файлу) цей системний виклик створює новий елемент відповідного каталогу (відповідно до заданого значення pathname), а також створює і відповідним чином ініціалізує новий i-вузол.

Нарешті, системний виклик dup (duplicate – скопіювати) призводить до утворення нового дескриптора вже відкритого файлу. Цей специфічний для ОС UNIX системний виклик служить виключно з метою перенаправлення вводу/виводу). Його виконання полягає в тому, що в u-області системного простору користувача процесу утворюється новий описник відкритого файлу, що містить новостворений дескриптор файлу (ціле число), але посилається на вже існуючу загальносистемну структуру file і містить ті самі ознаки і прапори, які відповідають відкритого файлу-зразка.

Іншими важливими системними викликами є системні виклики read та write. Системний виклик read виконується так:

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

на деякий (короткий) час встановлюється синхронізаційне блокування на vnode даного файлу (вміст описувача не повинен змінюватись у критичні моменти операції читання);

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

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

Системний виклик close призводить до того, що драйвер обриває зв'язок з відповідним процесом користувача (у разі останнього за часом закриття пристрою) встановлює загальносистемний прапор "драйвер вільний".

Нарешті для спеціальних файлів підтримується ще один "спеціальний" системний виклик ioctl. Це єдиний системний виклик, який забезпечується для спеціальних файлів і забезпечується для інших різновидів файлів. Фактично системний виклик ioctl дозволяє довільним чином розширити інтерфейс будь-якого драйвера. Параметри ioctl включають код операції та покажчик на деяку область пам'яті процесу користувача. Усю інтерпретацію коду операції та відповідних специфічних параметрів проводить драйвер.

Природно, оскільки драйвери головним чином призначені для управління зовнішніми пристроями, програмний код драйвера повинен містити відповідні засоби для обробки переривань від пристрою. Виклик індивідуальної програми обробки переривань драйвері відбувається з ядра операційної системи. Подібним чином у драйвері може бути оголошений вхід "timeout", до якого звертається ядро ​​при закінченні раніше замовленого драйвером часу (такий тимчасовий контроль є необхідним при керуванні не надто інтелектуальними пристроями).

Загальна схема інтерфейсної організації драйверів показано малюнку 3.5. Як показує цей малюнок, з погляду інтерфейсів та загальносистемного управління розрізняються два види драйверів - символьні та блокові. З погляду внутрішньої організації виділяється ще один вид драйверів – потокові (stream) драйвери. Проте за зовнішнім інтерфейсом потокові драйвери не відрізняються від символьних.

6. Інтерфейси та вхідні точки драйверів

6. 1 Блокові драйвери

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

Якщо копія необхідного блоку не знаходиться в буферному пулі або якщо з якоїсь причини потрібно замінити вміст деякого оновленого буфера, ядро ​​ОС UNIX звертається до процедури strategy відповідного блокового драйвера. Strategy забезпечує стандартний інтерфейсміж ядром та драйвером. З використанням бібліотечних підпрограм, призначених для написання драйверів, процедура strategy може організовувати черги обмінів з пристроєм, наприклад з метою оптимізації руху магнітних головок на диску. Усі обміни, які виконуються блоковим драйвером, виконуються з буферною пам'яттю. Перепис потрібної інформації на згадку відповідного користувача процесу виконується програмами ядра, завідувачами управлінням буферами

6. 2 Символьні драйвери

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

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

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

6. 3 Поточні драйвери

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

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

7. Команди та утиліти

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

7. 1 Організація команди в ОС UNIX

Для створення нової команди потрібно просто дотримуватися правил програмування мовою Сі. Кожна правильно оформлена Сі-програма починає виконання з функції main. Ця "напівсистемна" функція має стандартний інтерфейс, що є основою організації команд, які можна викликати в середовищі shell. Зовнішні команди виконуються інтерпретатором shell за допомогою зв'язування системних викликів fork та одного з варіантів exec. До параметрів системного виклику exec входить набір текстових рядків. Цей набір текстових рядків передається на вхід функції main програми, що запускається.

Більш точно, функція main отримує два параметри - argc (число переданих текстових рядків) та argv (покажчик на масив покажчиків на текстові рядки). Програма, що претендує на її використання в якості команди shell, повинна мати точно певний зовнішній інтерфейс (параметри зазвичай вводяться з терміналу) і повинна контролювати і правильно розбирати вхідні параметри.

Крім того, щоб відповідати стилю shell, така програма не повинна сама перевизначати файли, що відповідають стандартному введення, стандартного виводу та стандартного виводу помилок. Тоді команді може звичайним чином перенаправлятися введення/виведення, і вона може включатися в конвеєри.

7. 2 Перенаправлення введення/виводу та організація конвеєра

Як видно з останньої пропозиції попереднього пункту, для забезпечення можливостей перенаправлення вводу/виводу та організації конвеєра під час програмування команд не потрібно робити нічого спеціального. Досить просто не чіпати три початкові дескриптори файлів і правильно працювати з цими файлами, а саме робити висновок у файл з дескриптором stdout, вводити дані з файлу stdin і виводити повідомлення про помилки у файл stderror.

7. 3 Вбудовані, бібліотечні та користувацькі команди

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

Бібліотечні команди є частиною системного програмного забезпечення. Це набір програм, що виконуються (утиліт), що поставляються разом з операційною системою. Більшість цих програм (таких як vi, emacs, grep, find, make і т.д.) виключно корисно на практиці, але їх розгляд знаходиться за межами цього курсу (щодо редакторів vi та emacs та утиліти підтримки цілісності програмних файлів make існують окремі товсті книги).

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

7. 4 Програмування командною мовою

Будь-який із згадуваних варіантів мови shell у принципі можна використовувати як мову програмування. Серед користувачів ОС UNIX є багато людей, які пишуть на shell цілком серйозні програми. Для програмування краще використовувати мови програмування (Сі, Сі++, Паскаль тощо), а чи не командні мови.


8. Кошти графічного інтерфейсу користувачів

Хоча багато професійних програмістів, що працюють у середовищі ОС UNIX, і сьогодні вважають за краще користуватися традиційними малими засобами взаємодії з системою, широке поширення щодо недорогих кольорових графічних терміналів з високою якістю дозволу призвело до того, що у всіх сучасних варіантах ОС UNIX підтримуються графічні інтерфейси користувача із системою , а користувачам надаються інструментальні засоби для розробки графічних інтерфейсів з програмами, що розробляються ними. З точки зору кінцевого користувача засоби графічного інтерфейсу, що підтримується в різних варіантах ОС UNIX, та й інших системах (наприклад, MS Windows або Windows NT), приблизно однакові за своїм стилем.

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

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

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

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

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

8. Принципи захисту

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

8.1 Ідентифікатори користувача та групи користувачів

З кожним виконуваним процесом в ОС UNIX пов'язуються реальний ідентифікатор користувача (real user ID), ідентифікатор користувача (effective user ID) і збережений ідентифікатор користувача (saved user ID). Всі ці ідентифікатори встановлюються за допомогою системного виклику setuid, який можна виконувати лише у режимі суперкористувача. Аналогічно, з кожним процесом зв'язуються три ідентифікатори групи користувачів - real group ID, effective group ID та saved group ID. Ці ідентифікатори встановлюються привілейованим системним викликом setgid.

При вході користувача в систему програма login перевіряє, що користувач зареєстрований у системі та знає правильний пароль (якщо він встановлений), утворює новий процес та запускає в ньому потрібний для цього користувача shell. Але перед цим login встановлює для новоствореного процесу ідентифікатори користувача та групи, використовуючи для цього інформацію, що зберігається у файлах /etc/passwd та /etc/group. Після того, як з процесом пов'язані ідентифікатори користувача та групи, для цього починають діяти обмеження для доступу до файлів. Процес може отримати доступ до файлу або виконати його (якщо файл містить програму) тільки в тому випадку, якщо обмеження доступу, що зберігаються при файлі, дозволяють це зробити. Пов'язані з процесом ідентифікатори передаються створюваним ним процесам, поширюючи ними самі обмеження. Однак у деяких випадках процес може змінити свої права за допомогою системних викликів setuid та setgid, а іноді система може змінити права доступу процесу автоматично.

Розглянемо, наприклад, таку ситуацію. У файл /etc/passwd заборонено запис усім, крім суперкористувача (суперкористувач може писати у будь-який файл). Цей файл також містить паролі користувачів і кожному користувачеві дозволяється змінювати свій пароль. Є спеціальна програма/bin/passwd, що змінює паролі. Однак користувач не може це зробити навіть за допомогою цієї програми, оскільки запис у файл /etc/passwd заборонено. У системі UNIX ця проблема вирішується в такий спосіб. При виконуваному файлі може бути зазначено, що під час його запуску повинні встановлюватись ідентифікатори користувача та/або групи. Якщо користувач запитує виконання такої програми (за допомогою системного виклику exec), для відповідного процесу встановлюються ідентифікатор користувача, відповідний ідентифікатору власника виконуваного файлу та/або ідентифікатор групи цього власника. Зокрема, при запуску /bin/passwd процес отримає ідентифікатор суперкористувача, і програма зможе зробити запис у файл /etc/passwd.

І для ідентифікатора користувача, і для ідентифікатора групи реальний ID є істинним ідентифікатором, а ID, що діє - ідентифікатором поточного виконання. Якщо поточний ідентифікатор користувача відповідає суперкористувачу, цей ідентифікатор і ідентифікатор групи можуть бути перевстановлені в будь-яке значення системними викликами setuid і setgid. Якщо поточний ідентифікатор користувача відрізняється від ідентифікатора суперкористувача, то виконання системних викликів setuid і setgid призводить до заміни поточного ідентифікатора істинним ідентифікатором (користувача або групи відповідно).

8.2 Захист файлів

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

Захист файлів від несанкціонованого доступу в ОС UNIX ґрунтується на трьох фактах. По-перше, з будь-яким процесом, що створює файл (або довідник), асоційований деякий унікальний у системі ідентифікатор користувача (UID – User Identifier), який надалі можна трактувати як ідентифікатор власника новоствореного файлу. По-друге, з кожним процесом, що намагається отримати деякий доступ до файлу, пов'язана пара ідентифікаторів - поточні ідентифікатори користувача та його групи. По-третє, кожному файлу однозначно відповідає його описник – i-вузол.

Будь-якому використаному у файловій системі i-вузлу завжди однозначно відповідає один і лише один файл. I-вузол містить досить багато різноманітної інформації (більша її частина доступна користувачам через системні виклики stat і fstat), і серед цієї інформації знаходиться частина, що дозволяє файловій системі оцінити правомочність доступу даного процесу до файлу в необхідному режимі.

Загальні принципи захисту однакові для всіх існуючих варіантів системи: Інформація i-вузла включає UID та GID поточного власника файлу (негайно після створення файлу ідентифікатори його поточного власника встановлюються відповідними діючим ідентифікатором процесу-творця, але надалі можуть бути змінені системними викликами chown . Крім того, в i-вузлі файлу зберігається шкала, в якій зазначено, що може робити з файлом користувач - його власник, що можуть робити з файлом користувачі, що входять до тієї ж групи користувачів, що і власник, і що можуть робити з файлом інші користувачі. Дрібні деталі реалізації різних випадках системи різняться.

8.3 Перспективні ОС, що підтримують ОС UNIX

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

У широке вжиток поняття мікроядра ввела компанія Next, в операційній системі якої використовувалося мікроядро Mach. Невелике привілейоване ядро ​​цієї ОС, навколо якого розташовувалися підсистеми, що виконуються в режимі користувача, теоретично мало забезпечити небувалу гнучкість і модульність системи. Але на практиці ця перевага була дещо знецінена наявністю монолітного сервера, що реалізує операційну систему UNIX BSD 4.3, яку компанія Next вибрала як оболонку мікроядра Mach. Однак опора на Mach дала можливість включити в систему засоби передачі повідомлень та ряд об'єктно-орієнтованих сервісних функцій, на основі яких вдалося створити елегантний інтерфейс кінцевого користувача з графічними засобами конфігурування мережі, системного адміністрування та розробки програмного забезпечення.

Наступною мікроядерною операційною системою була Windows NT компанії Microsoft, в якій ключовою перевагою використання мікроядра повинна була стати не лише модульність, а й переносимість. (Зауважимо, що немає одностайної думки з приводу того, чи слід насправді відносити NT до мікроядерних ОС.) ОС NT була побудована таким чином, щоб її можна було застосовувати в одно- та мультипроцесорних системах, заснованих на процесорах Intel, Mips та Alpha (і тих, що прийдуть за ними). Оскільки в середовищі NT повинні були виконуватися програми, написані для DOS, Windows, OS/2 та систем, сумісних зі стандартами Posix, компанія Microsoft використала властиву мікроядерному підходу модульність для створення загальної структури NT, яка не повторює жодну з існуючих операційних систем. Кожна операційна система емулюється у вигляді окремого модуля або підсистеми.

Пізніше мікроядерні архітектури операційних систем були оголошені компаніями Novell/USL, Open Software Foundation (OSF), IBM, Apple та іншими. Одним з основних конкурентів NT у галузі мікроядерних ОС є Mach 3.0, система, створена в університеті Карнегі-Меллон, яку як IBM, так і OSF взялися довести до комерційного вигляду. (Компанія Next як основа для NextStep поки використовує Mach 2.5, але також уважно придивляється до Mach 3.0.) Іншим конкурентом є мікроядро Chorus 3.0 компанії Chorus Systems, обране USL як основа нових реалізацій ОС UNIX. Деяке мікроядро буде використовуватися в SpringOS фірми Sun, об'єктно-орієнтованому наступнику ОС Solaris (якщо, звичайно, Sun доведе роботу над SpringOS до кінця). Очевидною є тенденція до переходу від монолітних до мікроядерних систем (цей процес не є прямолінійним: компанія IBM зробила крок назад і відмовилася від переходу до мікроядерної технології). До речі, це зовсім не новина для компаній QNX Software Systems і Unisys, які вже протягом декількох років випускають мікроядерні операційні системи, що користуються успіхом. ОС QNX має попит на ринку систем реального часу, а CTOS фірми Unisys популярна в галузі банківської справи. В обох системах успішно використана модульність, властива мікроядерним ОС.


Висновок

Основні відмінності Unix від інших OS

Unix складається з ядра з включеними до нього драйверами та з утиліт (зовнішніх по відношенню до ядра програм). Якщо потрібно змінити конфігурацію (додати пристрій, змінити порт або переривання), то ядро ​​перезбирають (перелінковують) з об'єктних модулів або (напр., FreeBSD) з вихідних джерел. Це не зовсім правильно. Деякі параметри потрібно поправити без перескладання. Існують також loadable kernel modules.

На противагу Unix" у Windows (якщо не уточнюється, яка, то маються на увазі 3.11, 95 і NT) і OS/2 при завантаженні фактично на ходу прилінковують драйвери. При цьому компактність зібраного ядра і повторне використання загального коду на порядок нижче, ніж у Unix Крім того, при незмінній конфігурації системи ядро ​​Unix без переробки (потрібно змінити тільки стартову частину BIOS) може бути записаний в ПЗУ і виконуватись _не_завантажуючись_ в ОЗУ. пам'ять, не звільняються на диск.

Unix – найбагатша платформна OS. WindowsNT намагається наслідувати його, але поки це погано вдається - після відмови від MIPS і POWER-PC, W"NT залишилися всього на двох платформах - традиційна i*86 і DEC Alpha. Переносність програм з однієї версії Unix на іншу обмежена. Неакуратно написана програма , що не враховує відмінностей у реалізаціях Unix, робить необґрунтовані припущення типу "змінна integer повинна займати чотири байти" може вимагати серйозної переробки. Але все одно це на багато порядків легше, ніж, наприклад, перенести з OS/2 на NT.

Області застосування Unix

Unix використовується як як сервер, так і робочої станції. У номінації серверів із ним конкурують MS WindowsNT, Novell Netware, IBM OS/2 Warp Connect, DEC VMS та операційні системи мейнфреймів. Кожна система має свою область застосування, в якій вона краща за інших.

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

Netware - для мереж, де необхідна висока продуктивність файлового і принтерного сервісу й менш важливі інші услуги. Головний недолік- На сервері Netware важко запускати програми.

OS/2 хороша там, де потрібний "легкий" сервер додатків. Ресурсів вимагає менше ніж NT, в управлінні гнучкіше (хоча в налаштуванні може і складніше), а багатозадачність дуже хороша. Авторизація та розмежування прав доступу не реалізовані на рівні ОС, що з лишком окупається реалізацією на рівні додатків-серверів. (Втім, часто інші OS роблять те саме). Багато станцій FIDOnet і BBS створено з урахуванням OS/2.

VMS - потужний, нічим не поступається Unix"ам (а багато в чому і перевершує його) сервер додатків, але тільки для платформ VAX і Alpha фірми DEC.

Мейнфрейми - для обслуговування дуже великої кількості користувачів (близько кількох тисяч). Але робота цих користувачів зазвичай організована як не клиент-серверного взаємодії, а вигляді хост-терминального. Термінал у цій парі скоріш не клієнт, а сервер (Світ Internet, N3 за 1996-й рік). До переваг мейнфреймів треба віднести більш високу захищеність і стійкість до збоїв, а до недоліків - ціну, що відповідає цим якостям.

Unix вдалий для кваліфікованого (або бажаючого стати таким) адміністратора, т.к. вимагає знання принципів функціонування процесів, що відбуваються в ньому. Реальна багатозадачність і жорсткий поділ пам'яті забезпечують високу надійність функціонування системи, хоча у продуктивності файл-і принт-сервісів Unix уступають Netware.

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

Майже всі протоколи, на яких заснований Internet, були розроблені під Unix, зокрема стек протоколів TCP/IP винайдений в університеті Berkeley.

Захищеність Unix при правильному адмініструванні (а коли це не так?) не поступається ні Novell, ні WindowsNT.

Важливою властивістю Unix, що наближає його до мейнфрейм, є його багатотермінальність, багато користувачів можуть одночасно запускати програми на одній Unix-машині. Якщо не потрібно використовувати графіку, можна обійтись дешевими текстовими терміналами (спеціалізованими або на базі дешевих PC), підключеними по повільним лініям. У цьому з ним конкурує лише VMS. Можна використовувати і графічні X-термінали, коли на одному екрані є вікна процесів, що виконуються на різних машинах.

У номінації робочих станцій з Unix конкурують MS Windows*, IBM OS/2, Macintosh та Acorn RISC-OS.

Windows – для тих, хто цінує сумісність більше ефективності; для тих, хто готовий купити велика кількістьпам'яті, дискового простору та мегагерц; для тих, хто любить не вникаючи в суть, клацати мишкою по кнопках у вікні. Щоправда, рано чи пізно все одно доведеться вивчити принципи роботи системи та протоколів, але тоді вже буде пізно – вибір зроблено. не менш важливим перевагою WindowsСлід визнати також можливість вкрасти купу програмного забезпечення.

OS/2 – для любителів OS/2. :-) Хоча за деякими відомостями OS/2 краще за інших взаємодіє з мейнфреймами та мережами IBM.

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

RISC-OS, прошита в ПЗУ, дозволяє не витрачати час на інсталяцію операційної системи та відновлення її після збоїв. Крім того, практично всі програми під нею дуже економно витрачають ресурси, завдяки чому не потребують свопінг і працюють дуже швидко.

Unix функціонує як на PC, так і на потужних робочих станціях з RISC-процесорами, під Unix написані справді потужні САПР та геоінформаційні системи. Своєю масштабованістю Unix через його багатоплатформність на порядок перевершує будь-яку іншу операційну систему, на думку деяких авторів.


Список літератури

1. Навчальний посібник Кузнєцова С.Д. ”Операційна система UNIX ”2003р.;

2. Поляков А.Д. “UNIX 5-th Edition на x86, або не забувайте історію”;

3. Карпов Д.Ю. "UNIX" 2005 р.;

4. Федорчук О.В. "Майстерність роботи в Unix", 2006 р.

5. Матеріали сайту http://www.citforum.ru/operating_systems/1-16;

МІНІСТЕРСТВО ОСВІТИ І НАУКИ РОСІЙСЬКОЇ ФЕДЕРАЦІЇ ФЕДЕРАЛЬНА АГЕНЦІЯ З ОСВІТИ ДЕРЖАВНА ОСВІТА ВИЩОЇ ПРОФЕСІОНАЛЬНИКІВ

Що таке Unix (для початківців)


Дмитро Ю. Карпов


Про що я?


Цей опус не претендує на повноту опису. Понад те, з метою спрощення свідомо опущені деякі подробиці. Спочатку цикл замислювався як FAQ (ЧаВо - питання, що часто ставляться), але мабуть вийде "Курс молодого бійця" або "Сержантська школа".

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

Не чекаючи викриття з боку досвідчених Unix"оїдів, роблю добровільне визнання - я не можу претендувати на роль великого знавця Unix, а мої знання в основному навколо FreeBSD. Сподіваюся, це не завадить.

Цей файл ще довго перебуватиме у стані "under construction". :-)

Що таке Unix?


Unix - повноцінна, спочатку розрахована на багато користувачів, багатозадачна і багатотермінальна операційна система. Точніше це ціле сімейство систем, майже повністю сумісних один з одним на рівні вихідних текстів програм.

Які бувають Unix і на яких машинах вони запускаються?


Цей список не претендує на повноту, бо крім перерахованих є ще безліч менш поширених Unix Unix-подібних систем, не кажучи вже про стародавні Unix для застарілих машин.

Умовно можна назвати сімейства System V і Berkeley. System V (читається "System Five") має кілька варіантів, останній за моїми відомостями System V Release 4. Університет Berkeley відомий не тільки розробкою BSD, але й більшості протоколів Internet. Втім, багато Unix поєднують властивості обох систем.

Де взяти безкоштовний Unix?


  • Сімейство BSD: FreeBSD, NetBSD, OpenBSD.
  • Сімейство Linux: RedHat, SlackWare, Debian, Caldera,
  • SCO та Solaris доступні безкоштовно для некомерційного використання (в основному – для навчальних закладів).

    Які основні відмінності Unix від інших ОС?


    Unix складається з ядра з включеними до нього драйверами та з утиліт (зовнішніх по відношенню до ядра програм). Якщо потрібно змінити конфігурацію (додати пристрій, змінити порт або переривання), то ядро ​​перезбирають (перелінковують) з об'єктних модулів або (напр., FreeBSD) з вихідних джерел. /* Це не зовсім правильно. Деякі параметри можна виправити без перескладання. Існують також loadable kernel modules. */

    На противагу Unix" у Windows (якщо не уточнюється, яка, то маються на увазі 3.11, 95 і NT) і OS/2 при завантаженні фактично на ходу прилінковують драйвери. При цьому компактність зібраного ядра і повторне використання загального коду на порядок нижче, ніж у Unix Крім того, при незмінній конфігурації системи ядро ​​Unix без переробки (потрібно змінити тільки стартову частину BIOS) може бути записаний в ПЗУ і виконуватись _не_завантажуючись_ в ОЗУ. пам'ять, не звільняються на диск.

    Unix – найбагатша платформна OS. WindowsNT намагається наслідувати його, але поки це погано вдається - після відмови від MIPS і POWER-PC, W"NT залишилися всього на двох платформах - традиційна i*86 і DEC Alpha. Зрозуміло, переносимість програм з однієї версії Unix на іншу обмежена. Неакуратно написана програма, що не враховує відмінностей у реалізаціях Unix, що робить необґрунтовані припущення типу "змінна integer повинна займати чотири байти", може вимагати серйозної переробки, але це на багато порядків легше, ніж, наприклад, перенести з OS/2 на NT.

    Чому Unix?


    Unix використовується як як сервер, так і робочої станції. У номінації серверів із ним конкурують MS WindowsNT, Novell Netware, IBM OS/2 Warp Connect, DEC VMS та операційні системи мейнфреймів. Кожна система має свою область застосування, в якій вона краща за інших.

  • WindowsNT - для адміністраторів, які воліють звичний інтерфейс економного витрачання ресурсів та високої продуктивності.
  • Netware - для мереж, де необхідна висока продуктивність файлового і принтерного сервісу й менш важливі інші услуги. Головний недолік - на сервері Netware важко запускати програми.
  • OS/2 хороша там, де потрібний "легкий" сервер додатків. Ресурсів вимагає менше ніж NT, в управлінні гнучкіше (хоча в налаштуванні може і складніше), а багатозадачність дуже хороша. Авторизація та розмежування прав доступу не реалізовані на рівні ОС, що з лишком окупається реалізацією на рівні додатків-серверів. (Втім, часто інші OS роблять те саме). Багато станцій FIDOnet і BBS створено з урахуванням OS/2.
  • VMS - потужний, нічим не поступається Unix"ам (а багато в чому і перевершує його) сервер додатків, але тільки для платформ VAX і Alpha фірми DEC.
  • Мейнфрейми - для обслуговування дуже великої кількості користувачів (близько кількох тисяч). Але робота цих користувачів зазвичай організована як не клиент-серверного взаємодії, а вигляді хост-терминального. Термінал у цій парі скоріш не клієнт, а сервер (Світ Internet, N3 за 1996-й рік). До переваг мейнфреймів треба віднести більш високу захищеність і стійкість до збоїв, а до недоліків - ціну, що відповідає цим якостям.

    Unix вдалий для кваліфікованого (або бажаючого стати таким) адміністратора, т.к. вимагає знання принципів функціонування процесів, що відбуваються в ньому. Реальна багатозадачність і жорсткий поділ пам'яті забезпечують високу надійність функціонування системи, хоча у продуктивності файл-і принт-сервісів Unix уступають Netware.

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

    Майже всі протоколи, на яких заснований Internet, були розроблені під Unix, зокрема стек протоколів TCP/IP винайдений в університеті Berkeley.

    Захищеність Unix при правильному адмініструванні (а коли це не так?) не поступається ні Novell, ні WindowsNT.

    Важливою властивістю Unix, що наближає його до мейнфрейм, є його багатотермінальність, багато користувачів можуть одночасно запускати програми на одній Unix-машині. Якщо не потрібно використовувати графіку, можна обійтись дешевими текстовими терміналами (спеціалізованими або на базі дешевих PC), підключеними по повільним лініям. У цьому з ним конкурує лише VMS. Можна використовувати і графічні X-термінали, коли на одному екрані є вікна процесів, що виконуються на різних машинах.

    У номінації робочих станцій з Unix конкурують MS Windows*, IBM OS/2, Macintosh та Acorn RISC-OS.

  • Windows – для тих, хто цінує сумісність більше ефективності; для тих, хто готовий купити велику кількість пам'яті, дискового простору та мегагерц; для тих, хто любить не вникаючи в суть, клацати мишкою по кнопках у вікні. Щоправда, рано чи пізно все одно доведеться вивчити принципи роботи системи та протоколів, але тоді вже буде пізно – вибір зроблено. Важливою перевагою Windows слід визнати також можливість вкрасти купу програмного забезпечення.
  • OS/2 – для любителів OS/2. :-) Хоча за деякими відомостями OS/2 краще за інших взаємодіє з мейнфреймами та мережами IBM.
  • Macintosh – для графічних, видавничих та музичних робіт, а також для тих, хто любить зрозумілий, красивий інтерфейс і не хоче (не може) розумітися на подробицях функціонування системи.
  • RISC-OS, прошита в ПЗУ, дозволяє не витрачати час на інсталяцію операційної системи та відновлення її після збоїв. Крім того, практично всі програми під нею дуже економно витрачають ресурси, завдяки чому не потребують свопінг і працюють дуже швидко.

    Unix функціонує як на PC, так і на потужних робочих станціях з RISC-процесорами, під Unix написані справді потужні САПР та геоінформаційні системи. Своєю масштабованістю Unix через його багатоплатформність на порядок перевершує будь-яку іншу операційну систему з відомих мені.

    Основні поняття Unix


    Unix базується на двох основних поняттях: "процес" та "файл". Процеси являють собою динамічний бік системи, це суб'єкти; а файли – статичну, це об'єкти дії процесів. Майже весь інтерфейс взаємодії процесів з ядром та один з одним виглядає як запис/читання файлів. /* Хоча треба додати такі речі, як сигнали, пам'ять, що розділяється, і семафори. */

    Процеси не можна плутати з програмами - одна програма (зазвичай із різними даними) може виконуватися у різних процесах. Процеси можна дуже умовно розділити на два типи - завдання та демони. Завдання - це процес, який виконує свою роботу, прагнучи якнайшвидше закінчити її і завершитися. Демон чекає на події, які він повинен обробити, обробляє події, що відбулися, і знову чекає; завершується він зазвичай за наказом іншого процесу, найчастіше його вбиває користувач, давши команду "kill номер_процесса". /* У цьому сенсі виходить, що інтерактивне завдання, що обробляє введення користувача, швидше схоже на демона, ніж на завдання. :-) */

    Файлова система


    У старих Unix"ах відводилося 14 літер на ім'я, у нових це обмеження знято. У директорії крім імені файлу знаходиться його ідентефікатор inode - ціле число, що визначає номер блоку, в якому записані атрибути файлу. Серед них: номер користувача - власника файлу; номер групи, кількість посилань на файл (див. далі) дати та час створення, останньої модифікації та останнього звернення до файлу, атрибути доступу Атрибути доступу містять тип файлу (див. далі), атрибути зміни прав при запуску (див. далі) доступу до нього для господаря, одногрупника та інших на читання, запис та виконання.Право на стирання файлу визначається правом запису до вищележачої директорії.

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

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

    Файли бувають таких типів:

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

    Спеціальні файли, призначені для роботи з пристроями, як правило, зосереджені в директорії /dev. Ось деякі з них (у номінації FreeBSD):

    • tty* - термінали, у т.ч.:
      • ttyv – віртуальна консоль;
      • ttyd - DialIn термінал (зазвичай послідовний порт);
      • cuaa - DialOut лінія
      • ttyp – мережевий псевдо-термінал;
      • tty - термінал, з яким асоційоване завдання;
    • wd* - жорсткі диски та їх підрозділи, у т.ч.:
      • wd – жорсткий диск;
      • wds - партія цього диска (названа тут "slice");
      • wds – розділ партиції;
    • fd – floppy-диск;
    • rwd*, rfd* - те саме, що wd* і fd*, але з послідовним доступом;

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

    На відміну від DOS, в якому повне ім'я файлу виглядає як "диск:\шлях\ім'я", та RISC-OS, в якій воно виглядає "-файлова_система-диск:$.шлях.ім'я" (що взагалі кажучи має свої переваги) , Unix використовує прозору нотацію як "/шлях/ім'я". Корінь відраховується від розділу, з якого було завантажено ядро ​​Unix. Якщо ми збираємося використовувати інший розділ (а на завантажувальному розділі зазвичай знаходиться тільки найнеобхідніше для завантаження), використовується команда `mount /dev/файл_розділу директорія`. При цьому файли та піддиректорії, що раніше знаходилися в цій директорії, стають недоступними, поки розділ не буде розмонтований (природно, всі нормальні люди використовують для монтування розділів порожні директорії). Виробляти монтування та розмонтування має право тільки супервізор.

    При запуску кожен процес може розраховувати, що для нього вже відкрито три файли, які йому відомі як стандартне введення stdin по дескриптору 0; стандартний висновок stdout по дескриптору 1; і стандартний висновок stderr по дескриптору 2. При реєстрації у системі, коли користувач вводить ім'я та пароль, йому запускається shell, всі троє спрямовані на /dev/tty; Пізніше кожен із новачків може бути перенаправлений на будь-який файл.

    Комадний інтерпретатор


    У Unix практично завжди входять два командні інтерпретатори - sh (shell) і csh (C-подібний shell). Крім них ще бувають bash (Bourne), ksh (Korn) та інші. Не вдаючись до подробиць, наведу загальні принципи:

    Усі команди, крім зміни поточної директорії, установки змінних оточення (environment) та операторів структурного програмування – зовнішні програми. Ці програми зазвичай розміщуються в каталогах /bin і /usr/bin. Програми системного адміністрування - у каталогах /sbin та /usr/sbin.

    Команда складається з імені програми та аргументів, що запускається. Аргументи відокремлюються від імені команди та один від одного пробілами та табуляціями. Деякі спецсимволи інтерпретуються самим shell"ом. Спецсимволами є " " ` \ ! $ ^ * ? | & ; (ще які?).

    В одному командному рядку можна дати кілька команд. Команди можна розділити; (Послідовне виконання команд), & (асинхронне одночасне виконання команд), | (Синхронне виконання, стандартний виведення stdout першої команди буде подано на стандартне введення stdin другий).

    Крім того, можна брати стандартне введення з файлу, включивши як один з аргументів "<файл" (без кавычек); можно направить стандартный вывод в файл, используя ">файл" (файл буде обнулений) або ">>файл" (запис буде зроблено в кінець файлу). Сама програма не отримає цього аргументу; щоб дізнатися, що введення або виведення перепризначені, програма повинна сама зробити деякі дуже нетривіальні рухи тіла.

    Посібники - man


    Якщо потрібно отримати інформацію з будь-якої команди, дайте команду "man ім'я_команди". На екран це буде видаватися через програму "more" - подивіться, як з нею керуватися на вашому Unix'і командою `man more`.

    Додаткова документація

  • Сподобалась стаття? Поділіться з друзями!
    Чи була ця стаття корисною?
    Так
    Ні
    Дякую за ваш відгук!
    Щось пішло не так і Ваш голос не було враховано.
    Спасибі. Ваше повідомлення надіслано
    Знайшли у тексті помилку?
    Виділіть її, натисніть Ctrl+Enterі ми все виправимо!