ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

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

    1. Заснування та історія

    Проект операційної системи Multics: невдача з позитивними наслідками

    Виникнення і перша редакція ОС UNIX

    Дослідницький UNIX

    Перший перенесення ОС UNIX

    Сьома редакція

    Виникнення групи університету м. Берклі (BSD)

    UNIX System III та перші комерційні версії системи

    AT & T System V Release 2 і Release 3

    2. Основні поняття ОС UNIX і основні системні виклики

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

    Користувач

    Інтерфейс користувача Привілейований користувач

    Програми

    Команди

    Процеси

    Перенаправлення вводу/виводу Заснування та історія

    Історія ОС UNIX почалася в надрах Bell Telephone Laboratories (тепер AT & T Bell Laboratories) і пов'язана з відомими тепер усім іменами Кена Томпсона, Денніса Рітчі та Брайан Керніган (два останні імені знайомі читачам і як імена авторів популярної книги з мови програмування Сі, видавалася в нашій країні російською мовою). Проект операційної системи Multics: невдача з позитивними наслідками

    З 1965 по 1969 рік компанія Bell Labs спільно з компанією General Electric і групою дослідників з Масачусетского технологічного інституту брала участь у проекті ОС Multics. Метою проекту було створення інтерактивної розрахованої на багато користувачів операційної системи, що забезпечує велике число користувачів зручними і потужними засобами доступу до обчислювальних ресурсів. У цьому курсі ми не ставимо завдання познайомити слухачів з ОС Multics. Це могло б бути темою окремої великої курсу. Проте зазначимо хоча б деякі ідеї, які містилися в проекті MAC (так називався проект ОС Multics).

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

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

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

    Операційна система Multics, хоча і не була повністю доведена до стадії комерційного продукту, збагатила світове співтовариство системних програмістів масою цінних ідей, багато з яких зберігають свою актуальність донині і використовуються стосовно не тільки до операційних систем. Основним недоліком ОС Multics, який, як видно, і перешкодив довести систему до рівня програмного продукту, була її надмірна складність. Серед учасників проекту Multics знаходилися Кен Томпсон і Денніс Рітчі.

    Рішення про припинення участі в проекті Multics було прийнято на самому верхньому рівні керівництва Bell Labs, і співробітники, по суті, були поставлені перед доконаним фактом. Більш того, керівництво компанії, розчароване результатами досить дорогого проекту, взагалі не бажало більше вести будь-які роботи, пов'язані з операційними системами. Виникнення і перша редакція ОС UNIX

    Прийнято вважати, що вихідним поштовхом до появи ОС UNIX з'явилася робота Кена Томпсона зі створення комп'ютерної гри "Space Travel". Він робив це в 1969 році на комп'ютері Honeywell 635, який до цього використовувався для розробки проекту MAC. В цей же час Кен Томпсон, Денніс Рітчі та інші співробітники Bell Labs запропонували ідею вдосконаленою файлової системи, прототип якої був реалізований на комп'ютері General Electric 645. Однак комп'ютер GE-645, який був розрахований на роботу в режимі розділення часу, і не володів достатньою ефективністю, не годився для перенесення Space Travel. Томпсон став шукати заміну і виявив, що з'явився до цього часу 18-розрядний комп'ютер PDP-7 з 4 кілословамі оперативної пам'яті і якісним графічним дисплеєм цілком для цього підходить.

    Після того, як гра була успішно перенесена на PDP-7, Томпсон вирішив реалізувати на PDP-7 розроблену раніше файлову систему. Додатковим підставою для цього рішення було те, що компанія Bell Labs відчувала потребу в зручних і дешевих засобах підготовки та ведення документації. У Незабаром на PDP-7 працювала файлова система, в якій підтримувалися: поняття inodes, підсистема управління процесами і пам'яттю, що забезпечує використання системи двома користувачами в режимі поділу часу, простий командний інтерпретатор та декілька утиліт. Все це ще не називалося операційною системою UNIX, але вже містила родові риси цієї ОС.

    Назва придумав Брайан Керніган. Він запропонував назвати цю двухпользовательскую систему UNICS (Uniplexed Information and Computing System). Назва сподобалося, оскільки, крім іншого, воно нагадувало про участь співробітників Bell Labs в проекті Multics. Незабаром UNICS перетворилося в UNIX (вимовляється так само, але на одну букву коротше).

    Першими реальними користувачами UNIX стали співробітники патентів Bell Labs. Проте існували деякі проблеми, пов'язані з PDP-7. По-перше, ця машина не належала комп'ютерної групі (була тільки в тимчасовому користуванні). По-друге, можливості цього комп'ютера не задовольняли потреби дослідників. Тому в 1971 році був придбаний новий 16-розрядний комп'ютер фірми Digital Equipment PDP-11/20, і на нього була перенесена UNIX. Існував до цього часу варіант системи був написаний на мові асемблера, так що можна уявити, що перенесення був зовсім не простим справою. На PDP-11 система підтримувала більша кількість користувачів. Крім того, була реалізована утиліта форматування текстових документів roff (теж на мовою асемблера).

    У листопаді 1971 року було опубліковано перший випуск документації по ОС UNIX ( "Перша редакція"). Відповідно до цієї "Першою редакцією" назвали і відповідний документації варіант системи. Згодом це стало традицією: нова редакція ОС UNIX оголошувалася при виході у світ нової редакції документації.

    Друга редакція з'явилася в 1972 році. Найбільш істотним якістю "Другий редакції" було те, що система була переписана на мові Бі ( "B"). Мова та інтерпретує система програмування були розроблені Кеном Томпсоном під впливом існуючого мови BCPL. У другій редакції з'явилися програмні канали ( "pipes").

    Поява варіанту системи, написаного не мовою асемблера, було помітним просуванням. Однак сама мова Бі багато в чому не задовольняв розробників. Подібно до мови BCPL мова Бі був бестіповим, у ньому підтримувався тільки один тип даних, відповідний машинному слову. Інші типи даних емулювати бібліотекою функцій. Денніс Рітчі, який завжди захоплювався мовами програмування, вирішив усунути обмеження мови Бі, додавши в мову систему типів. Так виник мова Сі ( "C"). У 1973 році Томпсон і Рітчі переписали систему на мові Сі. До цього часу існувало близько 25 установок ОС UNIX, і це була "Четверта редакція".

    У липні 1974 року Томпсон і Рітчі опублікували в журналі Communications of the ACM історичну статтю "UNIX Timesharing Operating System", яка поклала початок новому етапу в історії системи. ОС UNIX зацікавилися в університетах. Цьому сприяла політика компанії Bell Labs, яка оголосила про можливість безкоштовного отримання вихідних текстів UNIX для використання з метою освіти (потрібно було платити тільки за носій і документацію).

    З'явилася, до цього часу "П'яту редакцію" ОС UNIX одними з перших отримали Каліфорнійський університет м. Берклі і університет Нового Південного Уельсу м. Сідней (Австралія). Дослідницький UNIX

    У 1975 році компанія Bell Labs випустила "Шосту редакцію" ОС UNIX, відому як V6 або Дослідницький UNIX. Ця версія системи була першим комерційно доступною поза Bell Labs. До цього часу більша частина системи була написана на мові Сі. Невеликі розміри мови і наявність порівняно легко переносимого компілятора надавали ОС UNIX V6 нову якість реально переносимої операційної системи. Крім того, потенційний наявність на різних апаратних платформах компілятора мови Сі робило можливою розробку мобільного прикладного програмного забезпечення.

    Важливий крок у цьому напрямку був зроблений Деннісом Рітчі, який в 1976 році створив бібліотеку введення/виводу (stdio), яка стала фактичним стандартом різних систем програмування на мові Сі. З використанням stdio стало можливо створювати мобільні прикладні програми, справді незалежні від особливостей апаратури процесора і зовнішніх пристроїв.

    Приблизно в цей же час Кен Томпсон під час свого академічної відпустки відвідав університет м. Берклі і встановив там UNIX V6 на комп'ютері PDP-11/70. Білл Джой (засновник BSD - Berkeley Software Distribution, а згодом засновник і віце-президент компанії Sun Microsystems) був тоді дипломником цього університету. Перший перенесення ОС UNIX

    Мабуть, перша перенесення ОС UNIX на комп'ютер з архітектурою, принципово відрізняється від PDP-11, був проведений в 1977 році в Австралії. Це відбулося незабаром після того, як в університеті Воллонгонг була утворена комп'ютерна кафедра. Джюріс Рейндфельдс, що став завідувачем нової кафедри, вирішив використовувати ОС UNIX як основу навчання студентів. Він спеціально відвідав університет м. Берклі і був натхненний можливостями, які є в цьому університеті (PDP-11/40 з ОС UNIX V6). Однак з'ясувалося, що в університеті г.Воллонгонг були відсутні кошти, достатні для придбання PDP-11.

    Професор Рейндфельдс був змушений купити 32-розрядний комп'ютер Interdata 7/32, який був істотно дешевше, хоча і слабкіше за продуктивністю. Після декількох спроб здоровим чином доповнити "рідну" операційну систему Interdata 7/32 OSMT/32 більш розвиненими засобами багатокористувацького режиму використання було прийнято рішення спробувати перенести на цю 32-розрядну машину ОС UNIX V6.

    Дуже складним чином (нагадаємо, що в австралійському університеті не було доступного комп'ютера PDP-11) шляхом обміну магнітними стрічками з університетом м. Берклі Річард Міллер (канадець, який працював в Австралії) зміг до січня 1977 отримати компілятор мови Сі, який міг успішно компілювати власний вихідний текст Interdata 7/32. Це дозволило вже через місяць одержати деякий варіант ОС UNIX, що працює на цій же машині.

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

    Після завершення своєї роботи Річард Міллер відправився в Bell Labs з метою обговорити отримані результати з Томпсоном і Рітчі. Незадовго до цього в Bell Labs було закуплено комп'ютер Interdata 8/32 (модель, наступна за Interdata 7/32). У принципі, компанія Bell Labs була задоволена можливостями і ціною комп'ютерів сімейства PDP-11. Однак 16-розрядна організація цих комп'ютерів обмежувала можливості ОС UNIX (занадто малий розмір віртуальної пам'яті для розробки великих і складних програм). Перехід на 32-розрядні архітектури дозволяв подолати ці обмеження.

    Наявність 32-розрядного комп'ютера Interdata 8/32 і наявний позитивний досвід Річарда Міллера з перенесення (хоча і не повного) ОС UNIX на Interdata призвели до того, що Томпсон і Рітчі вирішили провести повне перенесення UNIX на свою нову машину. Для початку потрібно розвинути мову Сі, щоб програмісти могли використовувати особливості 32-розрядних архітектур. Для цього Денніс Рітчі розширив систему типів мови Сі типами union, short integer, long integer і unsigned integer. На додаток до цього, в мові з'явилися розвинені засоби ініціалізації змінних, бітові поля, макроси і засоби умовної компіляції, регістрові і глобальні змінні і т.д. Одним словом, мова Сі став таким, яким він описаний у відомій книзі Керніган та Рітчі "Мова програмування Сі "(скорочено прийнято називати цей діалект мови K & R).

    Однак одного розширеного мови Сі було недостатньо для перенесення UNIX, оскільки сама організація UNIX V6 була дуже орієнтована на особливості PDP-11. Довелося повністю переписати підсистему управління оперативною та віртуальною пам'яттю і змінити інтерфейс драйверів зовнішніх пристроїв, щоб зробити систему більш легко переноситься на інші архітектури. Результатом роботи стала "Сьома редакція" UNIX (частіше її називають UNIX Version 7). До складу нової версії системи входив компілятор нового діалекту мови Сі PCC (Portable C-Compiler), новий командний інтерпретатор sh, званий також у честь свого творця Bourne-shell, набір нових драйверів пристроїв і багато іншого.

    Після випуску UNIX Version 7 Денніс Рітчі поїхав на конференцію до Австралії і взяв з собою магнітну стрічку з вихідними текстами системи. У Мельбурнському університеті було здійснено повне перенесення системи на Interdata 8/32. Пізніше в Воллонгонг система була повторно перенесено на Interdata 7/32. Таким чином, в результаті спільної плідної роботи дослідників із США і Австралії було продемонстровано один з найбільш яскравих якостей ОС UNIX -- мобільність. Крім того, стало ясно, що корисно залучати до роботи над ОС UNIX співробітників і студентів університетів. Виникнення групи університету м. Берклі (BSD)

    Як ми згадували вище, в 1976 році Кен Томпсон провів свій академічну відпустку в університеті м. Берклі і взяв участь у проводилися там дослідженнях. Це призвело до виникнення серйозного інтересу до ОС UNIX серед професорів і студентів. З'явилися місцеві знавці системи, серед яких одним з найбільш сильних був Білл Джой.

    Білл Джой зібрав разом з метою подальшого розповсюдження великий обсяг програмного забезпечення, що включав повний набір текстів UNIX V6, компілятор мови Паскаль, свій власний редактор ex (потім його стали називати vi) та інші програми. Все це було названо Berkeley Software Distribution (BSD 1.0). Навколо BSD склалася невелика, але дуже сильна група молодих програмістів. Існує думка, що саме група BSD змогла домогтися практично повного усунення помилок в UNIX V6. Не будучи задоволеною структурою і функціями ядра UNIX V6, група BSD у своєму другому випуску (BSD 2.x) зробила серйозну спробу переписати ядро системи.

    У комп'ютерному відділенні університету Берклі було декілька комп'ютерів сімейства VAX компанії Digital. Група BSD за участю співробітників Bell Labs Джона Рейзер і Тома Лондона справила перенесення UNIX Version 7 на 32-розрядну архітектуру VAX. Цей варіант UNIX називався 32/V. У ядрі системи з'явилися нові властивості сторінкового заміщення оперативної пам'яті і управління віртуальною памят?? ю. Система стала основою третього випуску - BSD 3.x.

    У групі BSD був розроблений і вперше реалізований стек транспортних протоколів TCP/IP (Transport Control Protocol/Internet Protocol). Ця робота фінансувалася міністерством безпеки США.

    Bell Labs і університет Берклі уклали угоду, відповідно до якого група BSD могла поширювати свої версії ОС UNIX серед будь-яких користувачів, які мали у своєму розпорядженні ліцензією Bell Labs. Якщо врахувати, що UNIX BSD історично поширювався безкоштовно (з вихідними текстами!), А ліцензія Bell Labs до цього часу коштувала вже досить недешево, то можна зрозуміти групу BSD, яка, починаючи з першої версії BSD 4.1 (1980 рік), прагнула до того, щоб звільнити користувачів UNIX BSD від необхідності купувати ліцензію Bell Labs. Подробиці цього процесу і виниклі колізії ми розглянемо в розділі, присвяченому сучасному стану ОС UNIX. UNIX System III та перші комерційні версії системи

    У 1978 році в Bell Labs спеціально для підтримки ОС UNIX була організована Група підтримки ОС UNIX (UNIX Support Group - USG). Ця група випустила кілька версій системи, але вони не мали ходіння за межами Bell Labs.

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

    Однією з перших була компанія UniSoft Corporation, яка виробляла свою версію UNIX під назвою UniPlus +. Microsoft Corporation спільно з Santa Cruz Operation (SCO) виробили варіант UNIX під назвою XENIX. В результаті до кінця 70-х UNIX-подібні операційні системи були доступні на комп'ютерах, заснованих на мікропроцесорах Zilog, Intel, Motorola і т.д. З'явилися тисячі установок з ОС UNIX.

    У 1982 році USG випустила за межі Bell Labs свій перший варіант UNIX, що отримав назву UNIX System III. У цій системі поєднувалися кращі якості UNIX Version 7, V/32 та інших варіантів UNIX, що мали ходіння в Bell Labs. AT & T System V Release 2 і 3 Release

    У початку 1983 року компанія American Telephone and Telegraph Bell Laboratories (AT & T Bell Labs) оголосила про випуск UNIX System V. Вперше в історії Bell Labs було також оголошено, що AT & T буде підтримувати цей і всі майбутні випуски System V. Крім того, була обіцяна сумісність випущеної версії System V з усіма майбутніми версіями. ОС UNIX System V включала багато нових можливостей, але майже всі вони ставилися до підвищення продуктивності (хеш-таблиці і кешування даних). Насправді UNIX System V була розвиненим варіантом UNIX System III. До найбільш важливим оригінальним особливостям UNIX System V відноситься поява семафорів, черг повідомлень і розділяється пам'яті.

    У 1984 році USG була перетворена в Лабораторію з розвитку системи UNIX (UNIX System Development Laboratories - USDL). У 1984 році USDL випустила UNIX System V Release 2 (SVR2). У цьому варіанті системи з'явилися можливості блокувань файлів і записів, копіювання спільно використовуваних сторінок оперативної пам'яті при спробі запису (copy-on-write), сторінкового заміщення оперативної пам'яті (реалізованого не так, як в BSD) і т.д. До цього часу ОС UNIX була встановлена на більш ніж 100000 комп'ютерів.

    У 1987 році підрозділ USDL оголосило про випуск UNIX System V Release 3 (SVR3). У цій системі з'явилися повні можливості міжпроцесної взаємодій, розділення видалених файлів (Remote File Sharing - RFS), розвинуті операції обробки сигналів, що їх поділяє бібліотеки і т.ін. Крім того, були забезпечені нові можливості щодо підвищення продуктивності і безпеки систем. До кінця 1987 з'явилося понад 750000 установок ОС UNIX, і було зареєстровано 4,5 млн. користувачів.

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

    Таблиця 1.1.
    Характерні якості версій AT & T UNIX починаючи з 1982 року         1982 System III         Іменовані програмні канали                     Черги запуску              1983 System V         Хеш-таблиці                     Кеші буферів і inodes                     Семафори                     Колективна пам'ять                     Черги повідомлень              1984 SVR2         Блокування записів і файлів                     Розділ підкачки на вимогу                     Копіювання за записом              1987 SVR3         Взаємодія між процесами (IPC)                     Поділ віддалених файлів (RFS)                     Розвинені операції обробки сигналів                     Отеки                     Перемикач файлових систем (FSS)                     Інтерфейс транспортного рівня (TLI)                     Можливості комунікацій на основі потоків              1989 SVR4         Підтримка обробки в реальному часі                     Класи планування процесів                     Динамічно виділяються структури даних                     Розвинені можливості відкриття файлів                     Управління віртуальною пам'яттю (VM)                     Можливості віртуальної файлової системи (VFS)                     Швидка файлова система (BSD)                     Розвинені можливості потоків                     Переривається ядро                     Квоти файлових систем                     Інтерфейс драйвера з ядром системи     

    Рис. 1.1. Генеалогічне дерево ОС UNIX Основні поняття ОС UNIX і основні системні виклики Основні поняття

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

    З самого початку ОС UNIX замишлялася як інтерактивна система. Іншими словами, UNIX призначений для термінальної роботи. Щоб почати працювати, людина повинна "увійти" в систему, ввівши з вільного терміналу своє облікове ім'я (account name) і, можливо, пароль (password). Людина, зареєстрований в облікових файлах системи, і, отже, має облікове ім'я, називається зареєстрованим користувачем системи. Реєстрацію нових користувачів зазвичай виконує адміністратор системи. Користувач не може змінити своє облікове ім'я, але може встановити та/або змінити свій пароль. Паролі зберігаються в окремому файлі у закодованому вигляді. Не забувайте свій пароль, знову дізнатися його не допоможе навіть адміністратор!

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

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

    Викликаний командний інтерпретатор видає запрошення на введення користувачем командного рядка, який може містити просту команду, конвеєр команд або послідовність команд. Після виконання черговий командного рядка і видачі на екран терміналу або у файл відповідних результатів, shell знову видає запрошення на введення командного рядка, і так до тих пір, поки користувач не завершить свій сеанс роботи шляхом введення команди logout або натисканням комбінації клавіш Ctrl-d.

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

    Ядро ОС UNIX ідентифікує кожного користувача за його ідентифікатором (UID - User Identifier), унікальному цілого значень, що присвоюються користувачу при реєстрації в системі. Крім того, кожен користувач належить до певної групи користувачів, яка також ідентифікується деяким цілим значенням (GID - Group IDentifier). Значення UID і GID для кожного зареєстрованого користувача зберігаються в облікових файлах системи і приписуються процесу, у якому виконується командний інтерпретатор, запущений при вході користувача в систему. Ці значення успадковуються кожним новим процесом, запущеним від імені даного користувача, і використовуються ядром системи для контролю правомощності доступу до файлів, виконання програм і т.д.

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

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

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

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

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

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

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

    В останні роки все більшу популярність отримує редактор Emacs (розроблений і безупинно вдосконалюється президентом Free Software Foundation Річардом Столлманом). Це дуже потужний багатовіконний редактор, який дозволяє не тільки писати програми (і інші тексти), але також і компілювати, компонувати і налагоджувати програми (а також робити багато чого іншого, наприклад, приймати і відправляти електронну пошту). Основним недоліком редактора Emacs є виключно великий набір (більше 200) функціональних клавіш. Слід, щоправда, зауважити, що при використанні Emacs в віконної системи X він забезпечує більш зручний інтерфейс.

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

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

    Можна відзначити наступні переваги gcc. По-перше, цей компілятор вільно, тобто безкоштовно (разом зі своїми вихідними текстами) поширюється Free Software Foundation. По-друге, gcc ретельно підтримується і супроводжується. По-третє, починаючи з версії 2.0, gcc може компілювати програми, написані на мовах Сі, Сі + + та Objective C, а результуюча виконувана програма може бути скомпонована з об'єктних файлів, отриманих з текстових файлів на будь-якому з цих мов. По-четверте, відкритість вихідних текстів gcc і ретельно розроблена структура компілятора дозволяють порівняно просто додавати до gcc нові кодогенератори. Відносним gcc недоліком є те, що використовуваний діалект мови Сі включає занадто багато розширень у порівнянні зі стандартом ANSI/ISO (однак є режим, в якому компілятор вказує все розширені конструкції мови, що зустрічаються в модульна програмі).

    Обидва компілятора обробляють програму в два етапи. На першому етапі синтаксично правильний текст на мові Сі перетвориться в текст на мові асемблера. На другому етапі на основі тексту на мові асемблера генеруються машинні коди і виходить об'єктний файл. Історично в ОС UNIX використовувалися різні формати об'єктних модулів. Для забезпечення сумісності з попередніми версіями майже всі вони підтримуються в сучасних версіях компіляторів. Проте в даний час переважно використовується формат COFF (Common Object File Format). При бажанні можна зупинити процес компіляції після першого етапу і отримати для вивчення файл з текстом програми на мові асемблера.

    Після того, як необхідний дЩоб побудови виконуваної програми набір об'єктних файлів отримано, необхідно провести компонування виконуваної програми. В ОС UNIX компонувальник виконуваних програм називається редактором зв'язків (link editor) і звичайно викликається командою ld. Редактору зв'язків вказується набір об'єктних файлів і набір бібліотек, з яких потрібно черпати яких бракує для перегляду програми.

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

    В ОС UNIX є кілька стандартних бібліотек. У більшості випадків найбільш важливою є бібліотека введення/виводу (stdio). Грамотне використання стандартних бібліотек сприяє створенню легко переносите прикладних програм (ми повернемося до обговорення стандартних бібліотек ОС UNIX в четвертої частини курсу).

    Виконувана програма може бути запущена в інтерактивному режимі як команда shell або виконана в окремому процесі, утворюється вже запущеної програмою. Команди

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

    У свою чергу, набір команд останнього виду включає стандартні команди (системні утиліти, такі як vi, cc і т.д.) і команди, створені користувачами системи. Для того, щоб виконуваний файл, розроблений користувачем ОС UNIX, можна було запускати як команду shell, досить визначити в одному з вихідних файлів функцію з ім'ям main (ім'я main повинне бути глобальним, тобто перед ним не повинно вказуватися ключове слово static). Якщо вжити як імені команди ім'я такого виконуваного файлу, командний інтерпретатор створить новий процес (див. наступний підрозділ) та запустить в ньому зазначену виконувану програму починаючи з виклику функції main.

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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status