36128

Системне програмне забезпечення

Конспект

Информатика, кибернетика и программирование

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

Украинкский

2013-09-21

506.5 KB

8 чел.

Тема №1. Поняття системного програмного забезпечення.

Склад і основні функції.

1. Поняття СПЗ

Для виконання обчислень в сучасній практиці використовуються обчислювальні машини і системи.

ЕОМ – це комплекс апаратури, який забезпечує виконання дій деякого набору алгоритмів.

ОС – це набір однієї або декількох ЕОМ і програм, які забезпечують виконання покладених на ОС функцій.

Таким чином, ОС діляться на 2 частини:

  •  програмну;
    •  апаратну.

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

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

Програмна частина складається з великої кількості взаємозв'язаних компонентів, які називаються системою програмного забезпечення (ПЗ).

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

У загальному випадку система ПЗ ділиться на 2 великих частини:

  1.  Прикладне ПЗ (призначене для користувача);
  2.  Системне ПЗ.

Прикладне програмне забезпечення – це те, яке розробляється самими користувачами (для себе).

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

  1.  Загальне СПЗ;
  2.  Спеціалізоване СПЗ.

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

Загальне СПЗ є універсальним і призначено для вирішення широкого кола завдань.

Надалі розглядатимемо загальне СПЗ. Воно включає:

  1.  системні оброблювальні програми;
  2.  системні керуючі програми;
  3.  додаткові програми для 1 і 2.
  4.  контрольно-діагностичні;
  5.  пакети прикладних програм;
  6.  комплекс документації на СПЗ.
  7.  Системні оброблювальні програми (СОП) призначені для вирішення завдань обслуговування користувачів, виходячи з їх запитів.
  8.  Системні керуючі програми (СКП), призначені для організації ефективного функціонування всієї обчислювальної системи в цілому і для створення зручного інтерфейсу між нею і користувачем.

Зауваження: Тільки СКП мають безпосередній доступ до апаратури.

Зауваження: СКП прийнято називати операційними системами (ОС).

ОС можуть забезпечувати наступні варіанти інтерфейсу:

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

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

До них відносяться:

  •  сервісні програми;
  •  інструментальні.

До сервісних відносяться:

  •  програмні оболонки (надбудови);
    •  утиліти.

Значення програмної оболонки – поліпшення доступу до ресурсів обчислювальної системи (провідник Windows і т.д.).

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

До інструментальних програмних засобів відносяться:

  •  СУБД;
  •  Системи машинної графіки.

4. Контрольно-діагностичні програми призначені для профілактики, контролю і локалізації несправностей в процесі експлуатації ЕОМ, або в автономному режимі.

5. Пакет ПП – це набір програм, призначених для вирішення практичних завдань з розробки СПЗ – наукові розрахунки, моделювання і т.д.

Зауваження:  У кожному ППП є мова, на якій описується порядок виконання робіт в рамках цього пакету.

6. Комплекс документації – сукупність текстових документів, підготовлених згідно ГОСТ (ЄСКД). У них присутні зведення по правилам експлуатації і налагодження відповідних частин СПЗ.

2. Склад і основні функції

Склад і функції системних оброблювальних програм:

  1.  Асемблер;
  2.  Редактори зв'язку і завантажувачі;
  3.  Макропроцесори;
  4.  Транслятори (перекладачі);
  5.  Мовні конвертори;
  6.  Редактори і текстові процесори;
  7.  Відладчики;
  8.  Дизасемблер;
  9.  Крос-системи;
  10.  Бібліотекарі.

1. Асемблер – це така системна оброблювальна програма, яка забезпечує перетворення початкової програми, написаної на деякій машинно-орієнтованій мові в так званий об'єктний код. (Текст на Асемблері містить директиви, імена, а машинний код містить тільки байти).

Зауваження: об'єктний код поступає або на вхід редактора зв'язку, або на вхід завантажувача.

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

Завантажувачі завантажують програму в оброблювальну програму (ОП) і передають їй керування. Ще вони зв'язують окремі модулі, зв'язуючі завантажувачі.

Зауваження: завантажувачі можуть бути такими, що або переміщають, або абсолютними.

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

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

4. Транслятори (перекладачі) перекладають текст з однієї мови програмування на іншу. Можна виділити наступні різновиди трансляторів:

  •  компілятори: на вхідний текст на мову високого рівня, на вихідний – програма в машинних кодах, яка може передаватися або редакторові зв'язку, або завантажувачу.

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

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

5. Мовні конвертори виконують перетворення тексту програми з однієї мови високого рівня на іншу мову високого рівня.

6. Текстові редактори відрізняються розширеними можливостями для обробки тексту.

7. Відладчики призначені для пошуку і локалізації помилок, які можна виявити тільки в процесі реалізації програми.

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

Зауваження: вони також дозволяють в асемблерному вигляді бачити виконання систем деяких дій.

9. Крос-система – це програма для отримання на одній ЕОМ програм, представлених в машинних кодах деякої іншої ЕОМ. Використовується для відладки проектованих архітектурних особливостей обчислювальних систем.

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

Тема №2. Операційні системи і середовища. Класифікація.

2.1 Поняття операційного середовища

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

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

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

Паралельне існування термінів «операційна система» і «операційне середовище» викликано тим, що ОС в загальному випадку може підтримувати декілька операційних середовищ. Наприклад, операційна система OS/2 Warp може виконувати наступні програми:

так звані «нативні» програми, створені з урахуванням відповідного «рідного» 32-бітового програмного інтерфейсу цієї ОС;

16-бітові програми, створені для систем OS/2 першого покоління;

16-бітові додатки, розроблені для виконання в операційному середовищі MS-DOS;

16-бітові додатки, створені для операційного середовища Windows 3.х;

саму операційну оболонку Windows 3.х і вже в ній - створені для неї програми.

Операційне середовище може включати декілька інтерфейсів: призначені для користувача і програмні. Якщо говорити про призначених для користувача, то, наприклад, система Linux має для користувача як інтерфейси командного рядка (можна використовувати різні «оболонки» - shell), інтерфейс на зразок Norton Commander - Midnight Commander, так і графічні інтерфейси - X-Window з різними менеджерами вікон - KDE, Gnome і т.д. Що до програмних інтерфейсів, то в тій же ОС Linux програми можуть звертатися як до операційної системи за відповідними сервісами і функціями, так і до графічної підсистеми. З погляду архітектури процесора двійкова програма, створена для роботи в середовищі Linux, використовує ті ж команди і формати даних, що і програма, створена для роботи в середовищі Windows NT. Проте в першому випадку ми маємо звернення до одного операційного середовища, а в другому - до іншої. Програма, створена безпосередньо для Windows, не виконуватиметься в Linux; проте якщо в ОС Linux організувати повноцінне операційне середовище Windows, то наша Windows-програма зможе бути виконана. Можна сказати, що операційне середовище - це те системне програмне оточення, в якому можуть виконуватися програми, створені за правилами роботи цього середовища.

2.2 Поняття обчислювального процесу

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

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

2.3 Поняття обчислювального ресурсу

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

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

Рис. 1.1. Класифікація ресурсів

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

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

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

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

Рис. 1.2. Приклад виконання двох програм: а - однопрограмних режим; б - мультипрограмному режим

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

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

Ресурс може бути виділений задачі, що звернулася до супервізора з відповідним запитом, якщо:

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

♦ поточний запит і раніше видані запити допускають спільне використання ресурсів;

♦ ресурс використовується завданням нижчого пріоритету і може бути тимчасово відібраний (розділяється ресурс).

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

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

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

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

При організації управління ресурсами завжди потрібно прийняти рішення про те, що в даній ситуації вигідніше: Швидко обслуговувати окремі найбільш важливі запити, надавати всім процесам рівні можливості або обслуговувати максимально можливу кількість процесів і найбільш повно використовувати ресурси.

2.3 Переривання

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

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

  1.  Встановлення факту переривань і ідентифікація переривання;
  2.  Запам’ятовування стану перерваного процесу. Стан процесу визначається перш за все значенням лічильника команд (адресою наступної команди, яка наприклад в Intel х86 визначається регістрами CS i IP – вказівниками команди), вмістом регістрів процесора і може включати також специфікацію режиму та іншу інформацію;
  3.  Керування апаратно передається підпрограмі обробки переривань. В найпростішому випадку в лічильник команд заноситься початкова адреса підпрограми обробки переривань, а в відповідні регістри – інформація із слова стану;
  4.  Збереження інформації про перервану програму, яку не вдалося врятувати в кроці 2 за допомогою дій апаратури. В деяких обчислювальних системах передбачається запам’ятовування досить великого об’єму інформації про стан перерваного процесу;
  5.  Обробка переривання. Ця робота може бути виконана тією ж підпрограмою якій було передано керування в кроці 3, але в операційній системі найчастіше вона реалізується шляхом наступного виклику відповідної підпрограми;
  6.  Відновлення інформації, яка відноситься до перерваного процесу;
  7.  Повернення до перерваної програми.

Етапи 1-3 реалізуються апаратно, а 4-7 програмно.

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

Отже, головні функції механізму переривань:

  •  розпізнавання або класифікація переривань;
  •  передача управління відповідно обробникові переривань;
  •  коректне повернення до перерваної програми.

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

Переривання, що виникають при роботі обчислювальної системи, можна розділити на два основні класи: зовнішні (асинхронні) і внутрішні (синхронні).

Зовнішні переривання викликаються асинхронними подіями, які відбуваються поза процесом, що переривається, наприклад:

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

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

  •  при порушенні адресації;
  •  за наявності в полі коду операції незадіяної двійкової комбінації;
  •  при діленні на нуль;
  •  при переповненні або зникненні порядку;
  •  при виявленні помилок парності, помилок в роботі різних пристроїв апаратури засобів контролю.

2.4 Класифікація операційних систем

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

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

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

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

За архітектурним принципом ОС розділяються на мікроядерні і монолітні. В деякій мірі це розділення теж умовно, проте можна як яскравий приклад мікроядерної ОС привести ОСРЧ QNX, тоді як монолітні можна назвати Windows 95/98 або ОС Linux. Ядро ОС Windows ми не можемо змінити, нам не доступні його початкові коди і у нас немає програми для збірки (компіляції) цього ядра. А ось у випадку з Linux ми можемо самі зібрати ядро, яке нам необхідне, включивши в нього ті необхідні програмні модулі і драйвери, які ми вважаємо доцільними включити саме в ядро (а не звертатися до них з ядра).

Тема №3. Сторінкова і сегментована оперативна пам’ять.

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

3.1 Сегментний спосіб організації віртуальної пам'яті

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

Перетворення імені сегменту в його порядковий номер здійснить система програмування, а ОС розміщуватиме сегменти в пам'яті і для кожного сегменту отримає інформацію про його початок. Таким чином, віртуальна адреса складатиметься з двох полів – номеру сегменту і зсуву відносно початку сегменту. Відповідна ілюстрація приведена на рис.2.7. На цьому малюнку зображений випадок звернення до осередку, віртуальна адреса якого рівна сегменту з номером 11 і зсувом від початку цього сегменту, рівним 612. Як ми бачимо, операційна система розмістила даний сегмент в пам'яті, починаючи з осередку з номером 19 700.

Рис. 2.7. Сегментний спосіб організації віртуальної пам'яті

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

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

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

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

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

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

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

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

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

  •  правило FIFO (first in - first out, що означає: «що перший прийшов першим і вибуває»);
  •  правило LRU (least recently used, що означає «останній з недавно використаних» або, інакше кажучи, «найдовше вживаний»);
  •  правило LFU (least frequently used, що означає: «використовуваний рідше за всіх»);
  •  випадковий (random) вибір сегменту.

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

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

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

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

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

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

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

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

Прикладом використання сегментного способу організації віртуальної пам'яті є ОС для ПК OS/2 першого покоління, яка була створена для процесора i80286. У цій ОС повною мірою використані апаратні засоби мікропроцесора, який спеціально проектувався для підтримки сегментного способу розподілу пам'яті.

OS/2 v.l підтримувала розподіл пам'яті, при якому виділялися сегменти програми і сегменти даних. Система дозволяла працювати як з іменованими, так і неіменованими сегментами. Імена сегментів даних, що розділяються, мали ту ж форму, що і імена файлів. Процеси діставали доступ до іменованих сегментів, що розділялися, використовуючи їх імена в спеціальних системних викликах. OS/2 v.l допускала розділення програмних сегментів застосувань і підсистем, а також глобальних сегментів даних підсистем. Взагалі, вся концепція системи OS/2 була побудована на понятті розділення пам'яті: процеси майже завжди розділяють сегменти з іншими процесами. У цьому полягала істотна відмінність від систем типу UNIX, які зазвичай розділяють тільки реєнтерабельні програмні модулі між процесами.

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

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

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

Було організовано в OS/2 і динамічному приєднанні обслуговуючих програм. Програми OS/2 використовують команди видаленого виклику. Посилання, що генеруються цими викликами, визначаються у момент завантаження самої програми або її сегментів. Таке відстрочене визначення посилань називається динамічним приєднанням. Завантажувальний формат модуля OS/2 є розширення формату завантажувального модуля DOS. Він був розширений, щоб підтримувати необхідне оточення для свопінгу сегментів з динамічним приєднанням. Динамічне приєднання зменшує об'єм пам'яті для програм в OS/2, одночасно роблячи можливим переміщення підсистем і обслуговуючих програм без необхідності повторного редагування адресних посилань до прикладних програм.

Сторінковий спосіб організації віртуальної пам'яті

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

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

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

Захист сторінкової пам'яті, як і у випадку з сегментним механізмом, заснований на контролі рівня доступу до кожної сторінки. Як правило, можливі наступні рівні доступу: тільки читання; читання і запис; тільки виконання. В цьому випадку кожна сторінка забезпечується відповідним кодом рівня доступу. При трансформації логічної адреси у фізичний порівнюється значення коди дозволеного рівня доступу з фактично потрібним. При їх неспівпаданні робота програми уривається.

Рис. 2.8. Сторінковий спосіб організації віртуальної пам'яті

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

Нагадаємо, що алгоритм вибирає для заміщення ту сторінку, на яку не було посилання впродовж найбільш довгого періоду часу. Дисципліна LRU (least recently used) асоціює з кожною сторінкою час останнього її використання. Для заміщення вибирається та сторінка, яка довше за всіх не використовувалася.

Для використання дисциплін LRU і LFU в процесорі повинні бути відповідні апаратні засоби. У дескрипторі сторінки розміщується біт звернення (подразумевается, що на мал. 2.8 цей біт розташований в останньому полі), і цей біт стає одиничним при зверненні до дескриптора.

Якщо об'єм фізичної пам'яті невеликий і навіть часто необхідні сторінки не вдається розмістити в оперативній пам'яті, то виникає та, що так звана «пробуксувала». Іншими словами, та, що пробуксувала - це ситуація, при якій завантаження потрібної нам сторінки викликає переміщення в зовнішню пам'ять тієї сторінки, з якою ми теж активно працюємо. Очевидно, що це дуже погане явище. Щоб його не допускати, бажано збільшити об'єм оперативної пам'яті (зараз це стало найпростішим рішенням), зменшити кількість паралельно виконуваних завдань або спробувати використовувати ефективніші дисципліни заміщення. У абсолютній більшості сучасних ОС використовується дисципліна заміщення сторінок LRU як найефективніша. Так, саме ця дисципліна використовується в OS/2 і Linux. Проте в такій ОС, як Windows NT, розробники, бажаючи зробити систему максимально незалежною від апаратних можливостей процесора, пішли на відмову від цієї дисципліни і застосували правило FIFO. А для того, щоб хоч як-небудь згладити її неефективність, була введена «буферизація» тих сторінок, які повинні бути записані у файл підкачки на диск або просто розформовані. Принцип буферирования простий. Сторінка, що перш ніж заміщається, дійсно буде переміщена в зовнішню пам'ять або просто розформована, вона позначається як кандидат на вивантаження. Якщо наступного разу відбудеться звернення до сторінки, що знаходиться в такому «буфері», то сторінка нікуди не вивантажується і йде в кінець списку FIFO. Інакше сторінка дійсно вивантажується, а на її місце в «буфері» потрапляє наступний «кандидат». Величина такого «буфера» не може бути великою, тому ефективність сторінкової реалізації пам'яті в Windows NT набагато нижча, ніж у вищеназваних ОС, і явище тієї, що пробуксувала починається навіть при істотно більшому об'ємі оперативної пам'яті.

У ряді ОС з пакетним режимом роботи для боротьби з тією, що пробуксувала використовується метод «робочої множини». Робоча множина - це безліч «активних» сторінок завдання за деякою інтервал Тобто тих сторінок, до яких було звернення за цей інтервал часу. Реальна кількість активних сторінок завдання (за інтервал Т) весь час змінюється, і це природно, але, проте, для кожного завдання можна визначити середню кількість її активних сторінок. Це середнє число активних сторінок і є робоча безліч завдання. Спостереження за виконання безлічі різних програм показали [28, 37, 49], що навіть якщо Т рівне часу виконання всієї роботи, то розмір робочої множини часто істотно менше, ніж загальне число сторінок програми. Таким чином, якщо ОС може визначити робочу безліч завдань, що виконуються, то для запобігання тій, що пробуксувала досить планувати на виконання тільки така кількість завдань, щоб сума їх робочих множин не перевищувала можливості системи.

Як і у випадку з сегментним способом організації віртуальної пам'яті, сторінковий механізм приводить до того, що без спеціальних апаратних засобів він істотно уповільнюватиме роботу обчислювальної системи. Тому зазвичай використовується кешування сторінкових дескрипторів. Найбільш ефективним способом кешування є використання асоціативного кеша. Саме такий асоціативний кеш і створений в 32-розрядних мікропроцесорах i80x86. Починаючи з i80386, який підтримує сторінковий спосіб розподілу пам'яті, в цих мікропроцесорах є кеш на 32 сторінкових дескриптора. Оскільки розмір сторінки в цих мікропроцесорах рівний 4 Кбайт, можливе швидке звернення до 128 Кбайт пам'яті.

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

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

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

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

3.3 Сегментно-сторінковий спосіб організації віртуальної пам'яті

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

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

Рис. 2.9. Сегментний-сторінковий спосіб організації віртуальної пам'яті

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

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

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

Тема №4. Розподіл пам’яті в сучасних ОС для ПК.

4.1 Розподіл оперативної пам'яті в MS-DOS

Як відомо, MS-DOS - це однопрограмна ОС. У ній, звичайно, можна організувати запуск резидентних або TSR-завдань, але в цілому вона призначена для виконання тільки одного обчислювального процесу. Тому розподіл пам'яті в ній побудований по найпростішій схемі, яку ми вже розглядали в розділі «Простий безперервний розподіл і розподіл з перекриттям (оверлейні структури)». Тут ми лише уточнимо деякі характерні деталі.

У IBM РС використовувався 16-розрядний мікропроцесор І8088, який за рахунок введення сегментного способу адресації дозволяв адресувати до 1 Мбайт пам'яті. У подальших ПК (IBM РС AT, AT386 і ін.) було прийнято рішення підтримувати сумісність з першими, тому при роботі з DOS перш за все розглядають перший мегабайт. Вся ця пам'ять розділялася на декілька областей. На цьому малюнку зображено, що пам'яті може бути і більше, ніж 1 Мбайт, але докладніший розгляд цього питання ми тут опустимо, відіславши охочих вивчити дану тему глибше до монографії [9].

Якщо не вдаватися до деталей, можна сказати, що до складу MS-DOS входять наступні основні компоненти:

1. Базова підсистема введення/виводу - BIOS (base input-output system), що включає крім програми тестування ПК (POST) обробники переривань (драйвери), розташовані в постійному пристрої, що запам'ятовує. Зрештою, решта майже всіх модулів MS-DOS звертається до BIOS. Якщо і не безпосередньо, то через модулі більш високого рівня ієрархії.

2. Модуль розширення BIOS - файл IO.SYS (у інших DOS-системах він може називатися інакше, наприклад IBMBIO.COM).

3. Основний, базовий модуль обробки переривань DOS - файл MSDOS.SYS. Саме цей модуль в основному реалізує роботу з файловою системою. (У PC-DOS аналогічний по значенню файл називається IBMDOS.COM).

4. Командний процесор (інтерпретатор команд) - файл COMMAND.COM.

5. Утиліти і драйвери, що розширюють можливості системи.

Програма завантаження MS-DOS - завантажувальний запис (boot record), розташований на дискеті.

Вся пам'ять відповідно до архітектури IBM РС умовно може бути розбита на три частини.

У самих молодших адресах пам'яті (перші 1024 осередки) розміщується таблиця векторів переривань (див. розділ «Система переривань 32-розрядних мікропроцесорів i80x86», розділ 3). Це пов'язано з апаратною реалізацією процесора i8088, на якому була реалізована ПК. У подальших процесорах (починаючи з i80286) адреса таблиці переривань визначається через вміст відповідного регістра, але для забезпечення повної сумісності з першим процесором при включенні або апаратному скиданні в цей регістр заносяться нулі. За бажання, проте, у разі використання сучасних мікропроцесорів i80x86 можна розмістити вектори переривань і в іншій області.

Друга частина пам'яті відводиться для розміщення програмних модулів самої MS-DOS і для програм користувача. Розглянемо їх розміщення трохи нижче. Тут, проте, відмітимо, що ця область пам'яті називається Conventional Memory (основна, стандартна пам'ять).

Нарешті, третя частина адресного простору відведена для постійних пристроїв, що запам'ятовують, і функціонування деяких пристроїв вводу/виводу. Ця область пам'яті отримала назву UMA (upper memory areas - область верхньої пам'яті).

4.2 Розподіл оперативної пам'яті в Microsoft Windows 95/98

З погляду базової архітектури ОС Windows 95/98 вони обидві є 32-розрядними, багатопотоковими ОС з витісняючою багатозадачністю. Основний інтерфейс призначений для користувача цих ОС - графічний.

Для свого завантаження вони використовують операційну систему MS-DOS 7.0 (MS-DOS 98), і у випадку якщо у файлі MSDOS.SYS у секції [Options] прописане BOOTGUI = 0, то процесор працює в звичайному реальному режимі (див. наступний розділ). Розподіл пам'яті в MS-DOS 7.0. таке ж, як і в попередніх версіях DOS. Проте при завантаженні GUI-інтерфейсу перед завантаженням ядра Windows 95/98 процесор перемикається в захищений режим роботи і починає розподіляти пам'ять вже за допомогою сторінкового механізму.

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

Таким чином, в системі фактично діє тільки сторінковий механізм перетворення віртуальних адрес у фізичні. Програми використовують класичну «small» (малу) модель пам'яті [73]. Кожна прикладна програма визначається 32-бітовими адресами, в яких сегмент коду має те ж значення, що і сегмент даних. Єдиний сегмент програми відображається безпосередньо в область віртуального лінійного адресного простору, що складається з 4 кілобайтних сторінок. Кожна сторінка може розташовуватися де завгодно в оперативній пам'яті (природно, в тому місці, куди її розмістить диспетчер пам'яті, який сам знаходиться в невивантажній області) або може бути переміщена на диск, якщо не заборонено використовувати сторінковий файл.

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

У Windows 95/98 кожна 32-розрядна прикладна програма виконується в своєму власному адресному просторі, але всі вони використовують спільно один і той же 32-розрядний системний код. Доступ до чужих адресних просторів в принципі можливий. Іншими словами, віртуальні адресні простори не використовують всіх апаратних засобів захисту, закладених в мікропроцесор. В результаті неправильно написана 32-розрядна прикладна програма може привести до аварійного збою всієї системи. Всі 16-бітові прикладні програми Windows розділяють загальний адресний простір, тому вони так само уразливі один перед одним, як і в середовищі Windows 3.x.

Системний код Windows 95 розміщується вище за межу 2 Гбайт. У просторі з відмітками 2 і 3 Гбайт знаходяться системні бібліотеки DLL використовувані декількома програмами. Відмітимо, що в 32-бітових мікропроцесорах сімейства i80x86 є чотири рівні захисту, що іменуються кільцями з номерами від 0 до 3. Кільце з номером 0 є найбільш привілейованим, тобто максимально захищеним. Компоненти системи Windows 95, що відносяться до кільця 0, відображаються на віртуальний адресний простір між 3 і 4 Гбайт. До цих компонентів відносяться власне ядро Windows, підсистема управління віртуальними машинами, модулі файлової системи і віртуальні драйвери (VXD).

Область пам'яті між 2 і 4 Гбайт адресного простору кожної 32-розрядної прикладної програми спільно використовується всіма 32-розрядними прикладними програмами. Така організація дозволяє обслуговувати виклики API безпосередньо в адресному просторі прикладної програми і обмежує розмір робочої множини. Проте за це доводиться розплачуватися зниженням надійності. Ніщо не може перешкодити програмі, що містить помилку, провести запис в адреси, що належать системним DLL, і викликати крах всієї системи.

У області між 2 і 3 Гбайт також знаходяться всі 16-розрядні прикладні програми Windows, що запускаються. З метою забезпечення сумісності ці програми виконуються в спільно використовуваному адресному просторі, де вони можуть зіпсувати один одного так само, як і в Windows 3.х.

Адреси пам'яті нижче 4 Мбайт також відображаються в адресний простір кожної прикладної програми і спільно використовуються всіма процесами. Завдяки цьому стає можливою сумісність з існуючими драйверами реального режиму, яким необхідний доступ до цих адрес. Це робить ще одну область пам'яті незахищеною від випадкового запису. До самих нижніх 64 Кбайт цього адресного простору 32-розрядні прикладні програми звертатися не можуть, що дає можливість перехоплювати невірні покажчики, але 16-розрядні програми, які, можливо, містять помилки, можуть записувати туди дані.

4.3 Розподіл оперативної пам'яті в Microsoft Windows NT

У операційних системах Windows NT теж використовується плоска модель пам'яті. Відмітимо, що Windows NT 4.0 server практично не відрізняється від Windows NT 4.0 workstation; різниця лише в наявності у сервера деяких додаткових служб, додаткових утиліт для управління доменом і декілька інших значень в настройках системного реєстру. Проте схема розподілу можливого віртуального адресного простору в системах Windows NT разюче відрізняється від моделі пам'яті Windows 95/98. Перш за все, на відміну від Windows 95/98 в набагато більшому ступені використовується ряд серйозних апаратних засобів захисту, наявних в мікропроцесорах, а також застосований принципово інший логічний розподіл адресного простору.

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

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

Прикладним програмам виділяється 2 Гбайт локального (власного) лінійного (неструктурованого) адресного простору від межі 64 Кбайт до 2 Гбайт (перші 64 Кбайт повністю недоступні). Прикладні програми ізольовані одна від одної, хоча можуть спілкуватися через буфер обміну (clipboard), механізми DDE і OLE. Між відмітками 2 і 4 Гбайт розташовано низькорівневі системні компоненти Windows NT кільця 0, зокрема ядро, планувальник потоків і диспетчер віртуальної пам'яті. Системні сторінки в цій області наділені привілеями супервізора, які задаються фізичними схемами кільцевого захисту процесора.

У верхній частині кожної 2-гігабайтної області прикладної програми розміщений код системних DLL кільця 3, який виконує перенаправлення викликів в абсолютно ізольований адресний простір, де міститься вже власне системний код. Цей системний код, виступаючи як сервер-процес (server process), перевіряє значення параметрів, виконує запитану функцію і пересилає результати назад в адресний простір прикладної програми. Хоча сервер-процес сам по собі залишається процесом прикладного рівня, він повністю захищений від тієї, що викликає його прикладної програми і ізольований від неї.

Рис. 2.12. Модель розподілу віртуальної пам'яті в Windows NT

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

Для 16-розрядних прикладних Windows-програм ОС Windows NT реалізує сеанси Windows on Windows (WOW). На відміну від Windows 95/98 ОС Windows NT дає можливість виконувати 16-розрядні програми Windows індивідуально у власних просторах пам'яті або спільно в адресному просторі, що розділяється. Майже у всіх випадках 16- і 32-розрядні прикладні програми Windows можуть вільно взаємодіяти, використовуючи OLE, незалежно від того, виконуються вони в окремій або загальній пам'яті. Власні прикладні програми і сеанси WOW виконуються в режимі витісняючої багатозадачності, заснованої на управлінні окремими потоками. Множинні 16-розрядні прикладні програми Windows в одному сеансі WOW виконуються відповідно до кооперативної моделі багатозадачності. Windows NT може також виконувати в багатозадачному режимі декілька сеансів DOS. Оскільки Windows NT має повністю 32-розрядну архітектуру, не існує теоретичних обмежень на ресурси GDI і USER.

Тема №5. Особливості архітектури МП сімейства х86.

5.1 Реальний і захищений режими роботи процесора

Широко відомо, що першим мікропроцесором, на базі якого була створена IBM РС, був Intel 8088. Цей мікропроцесор відрізнявся від першого 16-розрядного мікропроцесора фірми Intel - 8086 - перш за все тим, що у нього була 8-бітова шина даних, а не 16-бітова (як у 8086). Обидва ці мікропроцесора призначалися для створення обчислювальних пристроїв, які б працювали в однозадачному режимі, тобто спеціальних апаратних засобів для підтримки надійних і ефективних мультипрограмних ОС в них не було.

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

Детально розглядати архітектуру перших 1 6-бітових мікропроцесорів i8086/i8088 ми не будемо, оскільки цей матеріал повинен вивчатися в попередніх дисциплінах учбового плану. Для тих же, хто з ним не знайомий, можна рекомендувати такі книги, як [52, 73], і багато інших. Проте нагадаємо, що в цих мікропроцесорах (а значить, і в решті мікропроцесорів сімейства i80x86 при роботі їх в реальному режимі) звернення до пам'яті з можливим адресним простором в 1 Мбайт здійснюється за допомогою механізму сегментної адресації (мал. 3.1). Цей механізм був використаний для збільшення кількості розрядів, що беруть участь у вказівці адреси елементу пам'яті, з якою в даний момент здійснюється робота, з 16 до 20 і тим самим збільшення об'єму пам'яті.

Конкретизуємо завдання і обмежимося розглядом визначення адреси команди. Для адресації операндів використовується аналогічний механізм, тільки беруть участь в цьому випадку інші сегментні регістри. Нагадаємо, що для определения фізичної адреси команди вміст сегментного регістра CS (code segment) умножається на 16 за рахунок додавання справа (до молодших біт) чотирьох нулів, після чого до набутого значення додається вміст покажчика команд (регістр IP, instruction pointer). Виходить двадцятибітове значення, яке і дозволяє вказати будь-який байт з 220.

Мал. 3.1. Схема визначення фізичної адреси для процесора 8086 В захищеному режимі роботи визначення фізичної адреси здійснюється абсолютно інакше. Перш за все використовується сегментний механізм для організації віртуальної пам'яті. При цьому адреси задаються 32-бітовими значеннями. Окрім цього, можлива сторінкова трансляція адрес, також з 32-бітовими значеннями. Нарешті, при роботі в захищеному режимі, який за умовчанням припускає 32-бітовий код, можливе виконання двійкових програм, створених для роботи мікропроцесора в 16-бітовому режимі. Для цього введений режим віртуальної 16-бітової машини і 20-бітові адреси реального режиму транслюються за допомогою сторінкового механізму в 32-бітові значення захищеного режиму. Нарешті, є ще один режим - 16-бітовий захищений, такий, що дозволяє 32-бітовим мікропроцесорам виконувати захищений 1 6-бітовий код, який був характерний для мікропроцесора 80286. Правда, слід зазначити, що цей останній режим майже не використовується.

5.2 Нові системні регістри мікропроцесорів i80x86

Основні регістри мікропроцесора i80x86, знання яких необхідне для розуміння захищеного режиму роботи, приведені на мал. 3.2. Слід звернути увагу на наступне:

покажчик команди EIP - 32 бітовий регістр, молодші 16 розрядів цього регістра є регістр IP;

регістр прапорів EFLAGS - 32 бита, молодші 16 розрядів представляють регістр FLAGS;

регістри загального призначення ЕАХ, ЕВХ. ЕСХ, EDX, а також ESP, ЕВР, ESI

EDI - 32-бітові, проте їх молодші 1 6 розрядів є відомі регістри AX, BX, CX, DX, SP, ВР, SI, DI;

сегментні регістри CS, SS, DS, ES, FS, GS - 16-бітові. При кожному з регістрів CS, SS, DS, ES, FS, GS зображені пунктиром приховані від програмістів (недоступні нікому, окрім власне мікропроцесора) 64-бітові регістри, в які завантажуються дескриптори відповідних сегментів;

регістр-покажчик на локальну таблицю сегментів поточного завдання - LDTR

(16 бітів). При цьому регістрі також є «тіньовий» (прихований від програміста) 64-бітовий регістр, в який мікропроцесор заносить дескриптор, вказуючий на таблицю дескрипторів сегментів завдання, що описують її локальний віртуальний адресний простір;

регістр-покажчик завдання TR1 (16 бітів). Указує на дескриптор в глобальній таблиці дескрипторів, що дозволяє дістати доступ до дескриптора задачі TSS - інформаційній структурі, яку підтримує мікропроцесор для управління завданнями;

регістр GDTR1 (48 бітів) глобальної таблиці GDT, що містить як дескриптори загальних сегментів, так і спеціальні системні дескриптори. Зокрема, в GDTR знаходяться дескриптори, з допомогу яких можна отримати доступ до сегментів TSS;

регістри CR0, що управляють, - CR3 (32-бітові) і деякі інші регістри.

регістр IDTR (48 бітів) таблиці дескрипторів переривань. Містить інформацію, необхідну для доступу до «таблиці переривань» IDT;

Регістр CR0, що управляє, містить цілий ряд прапорів, які визначають режими роботи мікропроцесора. Детально про ці прапори можна прочитати в книгах [2, 22, 48]. Ми ж просто обмежимося тим фактом, що самий молодший біт (РЕ, protect enable) цього регістра визначає режим роботи процесора. При РЕ=0 процесор функціонує в реальному режимі роботи, а при одиничному значенні мікропроцесор перемикається в захищений режим. Самий старший біт регістра CR0 (битий PG, paging) визначає, включений (PG=l) чи ні (PG=0) режим сторінкового перетворення адрес.

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

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

Тема №6 Будова основних файлових систем.

6.1 Функції файлової системи ОС і ієрархія даних

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

Як правило, всі сучасні ОС мають відповідні системи управління файлами. Надалі постараємося розрізняти файлову систему і систему управління файлами.

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

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

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

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

Слід ще раз відмітити, що будь-яка система управління файлами не існує сама по собі - вона розроблена для роботи в конкретній ОС. Як приклад можна сказати, що всім відома файлова система FAT (file allocation table) має безліч реалізації як система управління файлами. Так, система, що отримала це назва і розроблена для перших персональних комп'ютерів, називалася просто FAT (зараз її називають FAT-12). Її розробляли для роботи з дискетами, і якийсь час вона використовувалася при роботі з жорсткими дисками. Потім її удосконалили для роботи з жорсткими дисками більшого об'єму, і ця нова реалізація отримала назву FAT-16. Це назву файлової системи ми використовуємо і по відношенню до системи управління файлами самої MS-DOS. Реалізацію ж системи управління файлами для OS/2, яка використовує основні принципи системи FAT, називають super-FAT; основна відмінність - можливість підтримувати для кожного файлу розширені атрибути. Є версія системи управління файлами з принципами FAT і для Windows 95/98, для Windows NT і т.д. Іншими словами, для роботи з файлами, організованими відповідно до деякої файлової системи, для кожної ОС повинна бути розроблена відповідна система управління файлами. Ця система управління файлами працюватиме тільки в тій ОС, для якої вона і створена; але при цьому вона дозволить працювати з файлами, створеними за допомогою системи управління файлами іншої ОС, що працює за тими ж основними принципами файлової системи.

6.2 Структура магнітного диска

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

Інформація на магнітних дисках розміщується і передається блоками. Кожен такий блок називається сектором (sector), сектори розташовані на концентричних доріжках поверхні диска. Кожна доріжка (track) утворюється при обертанні магнітного диска під зафіксованою в деякому зумовленому положенні головкою читання/запису. Накопичувач на жорстких магнітних дисках (НЖМД) містить один або більше дисків (у сучасних поширених НЖМД часто - два або три). Проте зазвичай під терміном «жорсткий диск» розуміють весь пакет магнітних дисків.

Групи доріжок (треків) одного радіусу, розташованих на поверхнях магнітних дисків, утворюють так звані циліндри (cylinder). Сучасні жорсткі диски можуть мати по декілька десятків тисяч циліндрів, тоді як на поверхні дискети число доріжок (число циліндрів) нині, як правило, складає всього вісімдесят.

Кожен сектор складається з поля даних і поля службової інформації, що обмежує і ідентифікує його. Розмір сектора (точніше - ємкість поля даних) встановлюється контроллером або драйвером. Призначений для користувача інтерфейс DOS підтримує єдиний розмір сектора - 512 байт. BIOS же безпосередньо надає можливості роботи з секторами розміром 128, 256, 512 або 1024 байт. Якщо управляти контроллером безпосередньо, а не через програмний інтерфейс більш високого рівня, то можна обробляти сектори і з іншими розмірами. Проте в більшості сучасних ОС розмір сектора вибирається рівним 512 байт.

Фізична адреса сектора на диску визначається за допомогою трьох «координат», тобто представляється тріадою [c-h-s], де c - номер циліндра (доріжки на поверхні диска, cylinder), h - номер робочої поверхні диска (магнітної головки, head), а s - номер сектора на доріжці. Номер циліндра лежить в діапазоні 0...с-1, де с - кількість циліндрів. Номер робочої поверхні диска h належить діапазону 0...h-1, де h - число магнітних головок в накопичувачі. Номер сектора на доріжці s указується в діапазоні 1...s, де s - кількість секторів на доріжці. Наприклад, тріада [1-0-2] адресує сектор 2 на доріжці 0 (зазвичай верхня робоча поверхня) циліндра 1. Надалі ми теж користуватимемося саме цими позначеннями.

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

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

Розділи диска можуть бути двох типів - primary (зазвичай цей термін переводять як первинний) і extended (розширений). Максимальне число первинних розділів рівно чотирьом. При цьому на диску обов'язково повинен бути, принаймні, один primary-розділ. Якщо primary-розділів декілька, то тільки один з них може бути активним. Саме завантажувачу, розташованому в активному розділі, передається управління при включенні комп'ютера і завантаженню операційної системи. Решта primary-розділів в цьому випадку вважається «невидимими, прихованими» (hidden).

Згідно специфікаціям на одному жорсткому диску може бути тільки один extended-розділ, який, у свою чергу, може бути роздільний на велику кількість підрозділів, - логічних дисків (logical). У цьому сенсі термін «первинний» слід визнати не зовсім вдалим перекладом слова primary; можна це слово перевести і як «простий, примітивний». В цьому випадку стає зрозумілим і логічним термін extended.

Один з primary-розділів повинен бути активним, саме з нього повинні завантажуватися програма завантаження операційної системи, або так званий менеджер завантаження, призначення якого - завантажити програму завантаження ОС з якого-небудь іншого розділу, і вже з її допомогою завантажувати операційну систему. Оскільки до завантаження ОС система управління файлами працювати не може, то слід використовувати для вказівки згаданих завантажувачів виключно абсолютні адреси у форматі [с-h-s].

За фізичною адресою [0-0-1] на вінчестері розташовується головний завантажувальний запис (master boot record, MBR), що містить позасистемний завантажувач (non-system bootstrap - NSB), а також таблицю розділів (partition table, PT). Цей запис займає рівно один сектор, вона розміщується в пам'яті, починаючи з адреси 0:7C00h, після чого управління передається коду, що міститься в цьому найпершому секторі магнітного диска. Таким чином, в найпершому (стартовому) секторі фізичного жорсткого диска знаходиться не звичайний запис boot record, як на дискеті, а master boot record.

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

  1.  програма початкового завантаження (non-system bootstrap). Саме вона запускається BIOS після успішного завантаження в пам'ять першого сектора з MBR. Очевидно, що її розмір не перевищує 512 байт і її вистачає тільки на те, щоб завантажити наступну, трохи складнішу програму, зазвичай - стартовий сектор операційної системи - і передати йому управління;
  2.  таблиця опису розділів диска (partition table). Розташовується в MBR по зсуву 0:1BE і займає 64 байти;
  3.  сигнатура MBR. Останні два байти MBR повинні містити число AA55h. По наявності цієї сигнатури BIOS перевіряє, що перший блок був завантажений успішно. Сигнатура ця вибрана не випадково. Її успішна перевірка дозволяє встановити, що всі лінії передачі даних можуть передавати і нулі, і одиниці.

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

6.3 Розбиття дисків на розділи

У MS-DOS в первинному розділі може бути сформований тільки один логічний диск, а в розширеному - будь-яка їх кількість. Кожен логічний диск «управляється» своїм логічним приводом. Кожному логічному диску на вінчестері відповідає своя (відносна) логічна нумерація. Фізична ж адресація жорсткого диска наскрізна.

Первинний розділ DOS включає тільки системний логічний диск без яких-небудь додаткових інформаційних структур.

Рис.4.5. Розбиття диска на розділи

Розширений розділ DOS містить вторинний запис MBR (secondary MBR, SMBR), до складу якого замість partition table входить таблиця логічного диска (LDT, logical disk table), їй аналогічна. Таблиця LDT описує розміщення і характеристики розділу, що містить єдиний логічний диск, а також може специфікувати наступний запис SMBR. Отже, якщо в розширеному розділі DOS створене До логічних дисків, то він містить До екземплярів SMBR, зв'язаних в список. Кожен елемент цього списку описує відповідний логічний диск і посилається (окрім останнього) на наступний елемент списку.

Утиліти, що дозволяють розбити диск на розділи і тим самим сформувати як partition table, так і, можливо, спискову структуру з LDT (подібно до того, як це зображено на мал. 4.6), зазвичай називаються FDISK (від form disk), хоча є утиліти і з іншою назвою, що уміють виконати розбиття диска. Нагадаємо, що FDISK від MS-DOS дозволяє створити тільки один primary-розділ і один extended, який, у свою чергу, пропонується розділити на декілька логічних дисків. Аналогічні утиліти інших ОС мають істотно більше можливостей. Так, наприклад, FDISK системи OS/2 дозволяє створювати декілька primary-розділів, причому їх можна виділяти не тільки послідовно, починаючи з перших циліндрів, але і з кінця вільного дискового простору. Це зручно, якщо потрібно виключити з роботи деякий діапазон дискового простору (наприклад, із-за дефектів на поверхні магнітного диска). За допомогою цієї утиліти можна встановити і менеджер завантаження (boot-менеджер).

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

Як ми вже відзначали, абревіатура FAT (file allocation table) розшифровується як «таблиця розміщення файлів». Цей термін відноситься до лінійної табличної структури з відомостями про файли - іменами файлів, їх атрибутами і іншими даними, що визначають місцезнаходження файлів (або їх фрагментів) в середовищі FAT. Елемент FAT визначає фактичну область диска, в якій зберігається початок фізичного файлу.

Рис.4.6. Структура логічного диска

У файловій системі FAT логічний дисковий простір будь-якого логічного диска ділиться на дві області (мал. 4.6): системну область і область даних.

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

  •  завантажувальному запису (boot record, BR);
  •  зарезервованих секторів (reserved sector, ResSecs);
  •  таблиці розміщення файлів (file allocation table, FAT);
  •  кореневого каталога (root directory, RDir).

Таблиця розміщення файлів

Таблиця розміщення файлів є дуже важливою інформаційною структурою. Можна сказати, що вона є картою (образ) області даних, в якій описується стан кожної ділянки області даних. Область даних розбивають на так звані кластери. Кластер є один або декілька суміжних секторів в логічному дисковому адресному просторі (точніше - тільки в області даних). У таблиці FAT кластери, що належать одному файлу (некореневому каталогу), зв'язуються в ланцюжки. Для вказівки номера кластера і системі управління файлами FAT-16 використовується 16-бітове слово, отже, можна мати до 216 = 65536 кластерів (з номерами від 0 до 65535).

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

Таблиця 4.3. Співвідношення між розміром розділу і розміром кластерів в FAT16

Ємкість розділу, Мбайт

Кількість секторів в кластері

Розмір кластерів, Кбайт

16-127

4

2

128-255

8

4

256-511

16

8

512-1023

32

16

1024-2047

64

32

6.5 Файлова система NTFS (New Technology File System)

У назву файлової системи NTFS входять слова «New Technology)), тобто «нова технологія». Дійсно, NTFS містить ряд значних удосконалень і змін, що істотно відрізняють її від інших файлових систем. Проте в NTFS на відміну від FAT робота на дисках великого об'єму відбувається набагато ефективніше; є засоби для обмеження в доступі до файлів і каталогів, введені механізми, що істотно підвищують надійність файлової системи, знято багато обмежень на максимальну кількість дискових секторів і/або кластерів.

Основні можливості файлової системи NTFS

При проектуванні системи NTFS особлива увага була приділена наступним характеристикам [53]:

  •  | надійність. Високопродуктивні комп'ютери і системи сумісного користування (сервери) повинні володіти підвищеною надійністю, яка є ключовим елементом структури і поведінки NTFS. Одним із способів збільшення надійності є введення механізму транзакцій, при якому здійснюється журналювання файлових операцій;
  •  розширена функціональність. NTFS проектувалася з урахуванням можливого розширення. У ній було втілено багато додаткових можливостей – удосконалена відмовостійка, емуляція інших файлових систем, могутня модель безпеки, паралельна обробка потоків даних і створення файлових атрибутів, визначуваних користувачем;
  •  підтримка POSIX. Оскільки уряд США вимагав, щоб всі системи, що купуються ним, хоч би в мінімальному ступені відповідали стандарту POSIX, така можливість була передбачена і в NTFS. До базових засобів файлової системи POSIX належить необов'язкове використання імен файлів з урахуванням регістра, зберігання часу останнього звернення до файлу і механізм так званих «жорстких посилань» - альтернативних імен, що дозволяють посилатися на один і той же файл по двох і більш іменам;
  •  гнучкість. Модель розподілу дискового простору в NTFS відрізняється надзвичайною гнучкістю. Розмір кластера може змінюватися від 512 байт до 64 Кбайт; він є числом, кратним внутрішньому кванту розподілу дискового простору. NTFS також підтримує довгі імена файлів, набір символів Unicode і альтернативні імена формату 8.3 для сумісності з FAT.

NTFS чудово справляється з обробкою великих масивів даних і досить добре проявляє себе при роботі з томами об'ємом від 300-400 Мбайт і вище. Максимально можливі розміри тому (і розміри файлу) складають 16 Ебайт. Кількість файлів в кореневому і некореневому каталогах не обмежена. Оскільки в основу структури каталогів NTFS закладена ефективна структура даних, звана «бінарним деревом» (див. розділ «Файлова система HPFS»), час пошуку файлів в NTFS (на відміну від систем на базі FAT) не зв'язаний лінійною залежністю з їх кількістю.

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

Файлова система NTFS підтримує об'єктну модель безпеки NT і розглядає всі томи, каталоги і файли як самостійні об'єкти. NTFS забезпечує безпеку на рівні файлів; це означає, що права доступу до томів, каталогам і файлам можуть залежати від облікового запису користувача і тих груп, до яких він належить. Кожного разу, коли користувач звертається до об'єкту файлової системи, його права доступу перевіряються за списком дозволів даного об'єкту. Якщо користувач володіє достатнім рівнем має рацію, його запит задовольняється; інакше запит відхиляється. Ця модель безпеки застосовується як при локальній реєстрації користувачів на комп'ютерах з NT, так і при видалених мережевих запитах.

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

Структура тому з файловою системою NTFS

Розглянемо тепер структуру файлової системи NTFS. Найповніше вона описана в книзі [23]. Ми ж тут торкнемося тільки основних моментів.

Одним з основних понять, використовуваних при роботі з NTFS, є поняття тому (volume). Можливо також створення відмовостійкого тому, що займає декілька розділів, тобто використання RAID-технології. Як і багато інших систем, NTFS ділить весь корисний дисковий простір тому на кластери - блоки даних, що адресуються як одиниці даних. NTFS підтримує розміри кластерів від 512 байт до 64 Кбайт; стандартом же вважається кластер розміром 2 або 4 Кбайт.

Весь дисковий простір в NTFS ділиться на дві нерівні частини (рис.4.1 2). Перші 12 % диска відводяться під так звану MFT-зону - простір, який може займати, збільшуючись в розмірі, головний службовий метафайл MFT . Запис яких-небудь даних в цю область неможливий. MFT-зона завжди тримається порожньою - це робиться для того, щоб найголовніший, службовий файл (MFT) по можливості не фрагментувався при своєму зростанні. Інші 88 % тому є звичайним простором MFT для зберігання файлів.

Рис.4.12. Структура тома NTFS

MFT (master file table, загальна таблиця файлів) є централізованим каталогом решти всіх файлів диска, у тому числі і себе самого. MFT поділений на записі фіксованого розміру в 1 Кбайт, і кожен запис відповідає якому-небудь файлу (у загальному сенсі цього слова). Перші 16 файлів носять службовий характер і недоступні операційній системі - вони називаються метафайлами, причому найперший метафайл - сам MFT. Ці перші 16 елементів MFT - єдина частина диска, що має строго фіксоване положення. Копія цих же 1 6 записів зберігається в середині тому для надійності, оскільки вони дуже важливі. Решта частин MFT-файлу може розташовуватися, як і будь-який інший файл, в довільних місцях диска - відновити його положення можна за допомогою його самого, «зачепившись» за саму основу - за перший елемент MFT.

Тема №7. Архітектура ОС та принципи їх побудови.

7.1 Основні принципи побудови операційних систем.

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

7.1.1 Принцип модульності

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

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

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

7.1.2 Принцип функціональної вибірковості

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

Крім програмних модулів, що входять до складу ядра і постійно розташованих в оперативній пам'яті, може бути багато інших системних програмних модулів, які отримують назву транзитних. Транзитні програмні модулі завантажуються в оперативну пам'ять тільки при необхідності і у разі відсутності вільного простору можуть бути заміщені іншими транзитними модулями. Як синонім до терміну «транзитний» можна використовувати термін «диск-резидентный».

7.1.3 Принцип генерування ОС

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

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

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

7.1.4 Принцип функціональної надлишковості

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

7.1.5 Принцип віртуалізації

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

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

7.1.6 Принцип незалежності програм від зовнішніх пристроїв

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

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

7.1.7 Принцип сумісності

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

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

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

7.1.8 Принцип открытой и наращиваемой ОС

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

Цей принцип іноді трактують як розширюваність системи.

До відкритих ОС, перш за все, слід віднести UNIX-системи і, природно, ОС Linux.

7.1.9 Принцип мобільності

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

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

Введення стандартів POSIX переслідувало мету забезпечити переносимість створюваного програмного забезпечення.

7.1.10 Принцип забезпечення безпеки обчислень

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

Забезпечення захисту інформації від несанкціонованого доступу є обов'язковою функцією мережевих операційних систем. У багато сучасних ОС гарантується ступінь безпеки даних, відповідний рівню С2 в системі стандартів США. Основи стандартів в області безпеки були закладені в документі «Критерії оцінки надійних комп'ютерних систем». Цей документ, виданий Національним центром комп'ютерної безпеки (NCSC -National Computer Security Center) в США в 1983 році, часто називають Оранжевою книгою.

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

Ієрархія рівнів безпеки, приведена в Оранжевій книзі, позначає нижчий рівень безпеки як D, а вищий - як А.

Тема №8. Сучасні ОС. Складники та структура.

8.1 Сімейство операційних систем Windows.

Операційні системи Windows 9x

В ті роки, коли з'явилася перша система Windows, а це відбулося в листопаді 1985 року, найбільше розповсюдження мали комп'ютери на базі процесора i80286. Цей процесор хоч і мав засоби для організації мультизадачного режиму роботи (у ньому компанія Intel вперше реалізувала захищений режим роботи, підтримку віртуальної пам'яті з сегментним механізмом і багато ще іншого), але апаратна підтримка була дуже слабка і нездійснена. Тільки з широким розповсюдженням 32-розрядних процесорів (i80386 і всі подальші) з'явилася можливість відмовитися в системах Windows від підтримки 16-розрядного захищеного режиму роботи процесорів і як основний вибрати повноцінний 32-розрядний захищений режим.

Було випущено декілька версій Windows, поки нарешті в 1990 році вийшла одна з найпопулярніших систем того часу — система Windows 3.0. Це була операційна система, призначена для роботи на процесорах i80386, проте прикладні програми, які могли виконуватися під її управлінням, розраховувалися на інтерфейс Winl6 API. Само собою, забезпечувалося виконання DOS-застосувань, які на той момент домінували. Для свого запуску ця операційна система вимагала наявність середовища MS DOS. При запуску програми WIN.COM остання переводила мікропроцесор в захищений режим роботи і починала завантажувати ядро Windows. Частина драйверів замінювалася новими, а частина могла залишитися від MS DOS. Після завантаження Windows 3.0 на комп'ютері можна було паралельно виконувати декілька застосувань.

Після системи Windows 3.0 з'явилася система Windows 3.1 і, нарешті, мережева операційна система Windows 3.11 for Workgroups. Всі ці операційні системи, хоч і були популярні, мали певні недоліки, зокрема, не можна було задіювати більше 16 Мбайт пам'яті, не забезпечувалися належна надійність і продуктивність, оскільки не використовувалися все ті можливості 32-розрядного захищеного режиму роботи мікропроцесора, які цей режим надавав.

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

Далі в 1998 році компанія Microsoft відновила свою операційну систему ще раз, давши їй ім'я Windows 98. Ця операційна система мала ще більше саме 32-розрядної власної коди, володіла більшою стабільністю і продуктивністю, оскільки був усунений майже важ колишній 16-розрядний код, що виконувався достатньо часто і що мав всі характерні для нього недоліки. Зокрема, була введена нова модель 32-розрядних драйверів WDM (Windows Driver Model), яка дозволяє використовувати драйвери, що створюються для операційних систем сімейства Windows NT. Важливою для успіху цієї операційної системи була також повноцінна підтримка інтерфейсу USB (Universal Serial Bus — універсальна послідовна шина). Виявлені в системі помилки були виправлені в другій редакції цієї операційної системи. Нарешті, напередодні початку нинішнього тисячоліття Microsoft випустила свою останню версію операційної системи, яка також була заснована на архітектурі системи Windows 95. Це була Windows Millennium Edition (ME).

Випускаючи Windows ME, Microsoft переслідувала декілька першочергових цілей: перетворити споживчу операційну систему на повноцінну мультимедійну (не тільки ігрову) платформу; максимально спростити обслуговування системи; забезпечити зручні засоби створення домашніх мереж; забезпечити доступ до всього багатства ресурсів Інтернету. Основним, принциповим моментом (і основним недоліком, як це не покажеться дивним) була відмова від підтримки сеансів DOS, що дозволяє потенційно небагато збільшити надійність організовуваних обчислень. Операційна система Windows ME була призначена для використання на домашніх комп'ютерах, і це обставина, укупі з неможливістю організувати виконання програм, що вимагають відкриття сеансів DOS, не дозволила їй набути широкого поширення.

Операційні системи Windows NT/2000/XP

Компанія Microsoft в 1990 році оголосила про початок робіт із створення принципово нової операційної системи для персональних IBM РС сумісних комп'ютерів з прицілом на корпоративний сектор, яка крім банальної мультизадачності і підтримки віртуальної пам'яті володіла б, зокрема, такими якостями, як:

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

Операційна система вийшла в 1993 р. в двох варіантах і мала назву Windows NT 3.1 і Windows NT Advanced Server 3.1. Ці системи володіли великими можливостями. Проте Windows NT 3.1 як робоча станція поступалася системі OS/2, оскільки вимагала істотно більше оперативної пам'яті і мала відносно низьку швидкодію. Окрім цього, при роботі з дисками, що відформатували під файлову систему FAT, вона не підтримувала довгі імена.

Основним конкурентом серверної системи був сервер Novell Netware 3.x. Після виходу першої версії Windows NT Microsoft випустила Windows NT 3.5 для робочих станцій і однойменну серверну операційну систему. Остання мала вбудоване програмне забезпечення для зв'язку з серверами від Novell, підтримувала довгі імена при роботі з дисками FAT, і багато інших удосконалень.

Завершилося покоління операційних систем Windows NT 3.x версіями під номером 3.5.1. Системи Windows NT 3.x не змогли тоді завоювати визнання ні як серверні, ні як звичайні настільних систем, оскільки вимагали дуже великих (за мірками того часу) обчислювальних ресурсів.

У 1996 р. вийшли операційні системи Windows NT 4.0 Sever і Windows NT 4.0 Workstation. Операційні системи Windows NT 4.0 виявилися на рідкість вдалими. До моменту їх виходу обчислювальні ресурси середнього персонального комп'ютера вже були достатніми для ефективної роботи. Ці операційні системи як основний ресурс вимагали оперативну пам'ять. Офіційно серверна система вимагала 16 Мбайт, а робоча станція — 12 Мбайт, тоді як для реальної роботи пам'яті потрібно було мати рази в чотири більше. І оскільки вартість модулів напівпровідникової пам'яті для персональних комп'ютерів в ті роки дуже помітно знизилася, організації і окремі користувачі стали масово освоювати ці операційні системи. А згаданий переклад частини коди, відповідальної за роботу графічної підсистеми, в привілейований режим роботи процесора істотно збільшив швидкодію при обробці графіки і дозволив в подальшому почати перенесення призначених для користувача операційних систем на NT.

Потім компанія Microsoft розробила нове сімейство операційних систем класу NT, яке повинне було спочатку називатися Windows NT 5.0, проте з маркетингових міркувань було перейменовано в Windows 2000. У семействоэтих систем увійшли чотири операційні системи.

  •  Windows 2000 Professional — для використання як робоча станція замість Windows NT.40 Workstation або Windows 98. Ця операційна система може працювати на 2-процесорних комп'ютерах.
  •  Windows 2000 Server — для використання як контроллер домена і/або сервера (файлів, застосувань, баз даних, web і/або FTP, друк і т. д.) у відносно невеликій мережі, яку можуть собі дозволити мати підприємства малого і середнього бізнесу. Ця операційна система підтримує 4-процесорні конфігурації.
  •  Windows 2000 Advanced Server — для тих же цілей, що і Windows 2000 Server, але з упором на виконання функцій сервера застосувань і сервера баз даних. Володіє можливістю працювати на комп'ютері з вісьма процесорами і, найголовніше, організувати кластер з двох машин.
  •  Windows 2000 Datacenter Server — спеціальна версія операційної системи, призначена для роботи в обчислювальних мережах крупних підприємств. Система добре масштабується, дозволяє побудувати 4-вузловий кластер, причому кожна з машин може мати аж до 16 процесорів.

Напевно, найголовнішими особливостями цих операційних систем (в порівнянні з попередніми Windows NT 4.0) слід назвати підтримку механізму Plug and Play (як і в системах Windows 9x) і використання служби каталогів як основи для побудови мереж клієнт-сервер. Служба каталогів Microsoft отримала найменування Active Directory. Принциповою особливістю цієї технології є її глибока інтеграція з TCP/IP. Окрім цього, не можна не відзначити, що нові операційні системи отримали перероблену систему управління файлами, яка отримала найменування NTFS.

Осінню 2001 року Microsoft відновила операційну систему Windows 2000 Professional до Windows XP (eXPerience). При цьому вона випустила дві редакції. Одна з них була полегшеним варіантом системи для домашнього застосування. Вона отримала назву Windows XP Home Edition. Друга — повноцінна система з призначенням працювати як робоча станція, яка, як правило, підключається до локальної обчислювальної мережі з виходом в Інтернет. Системи Windows ХР в ще більшій мірі стали мультимедійними і орієнтованими на Інтернет.

Цікавим нововведенням для систем Windows стала можливість організувати одночасну роботу з комп'ютером двох користувачів: для одного безпосередньо (локально), а для другого видалено з іншого комп'ютера.

Нарешті, весною 2003 року на заміну сімейству Windows 2000 вийшли декілька серверних операційних систем, які отримали в назву число 2003. Це наступні 32-розрядні операційні системи для мікропроцесорів з архітектурою ia-32.

  •  Windows Small Business Server 2003 — призначена для побудови невеликих
  •  локальних обчислювальних мереж.
  •  Windows Server 2003 Web Edition — це сама «полегшена» система, вона не
  •  може виступати в ролі контроллера домена і бути сервером застосувань.
  •  Windows Server 2003 Standard Edition — основна багатоцільова операційна
  •  система, що прийшла на зміну Windows 2000 Server.
  •  Windows Server 2003 Enterprise Edition — аналог Windows 2000 Advanced Server.
  •  Windows Server 2003 Datacenter Edition.

Останні дві операційні системи мають різновиди для 64-розрядних процесорів Itanium 2 виробництва компанії Intel.

8.2 Сімейство операційних систем UNIX

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

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

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

Як відомо, Linux — це вільно поширювана версія UNIX-систем, яка спочатку розроблялася Лінусом Торвальдсом в університеті Хельсінкі (Фінляндія). Він запропонував розробляти її спільно і висунув умову, згідно якій початкові коди є відкритими, будь-хто може їх використовувати і змінювати, але при цьому зобов'язаний залишити відкритим і свій код, внесений до того або іншого модуля системи. Всі компоненти системи, включаючи початкові тексти, розповсюджуються з ліцензією на вільне копіювання і установку для необмеженого числа користувачів.

Таким чином, система Linux була створена за допомогою багатьох програмістів і ентузіастів UNIX-систем, що спілкуються між собою через інтернет. До даного проекту добровільно підключилися ті, хто має достатньо навиків і здібностей розвивати систему. Більшість програм Linux розроблені в рамках проекту GNU з Free Software Foundation (Кембрідж, штат Массачусетс). Але в нього внесли свій внесок і багато програмістів зі всього світу.

Спочатку система Linux створювалася як саморобна UNIX-подібна реалізація для машин типу IBM РС з процесором i80386. Проте незабаром Linux стала настільки популярна, і її підтримало таке велике число компаній, що в даний час є реалізації цієї операційної системи практично для всіх типів процесорів і комп'ютерів на їх основі. На базі Linux створюються і вбудовані системи, і суперкомп'ютери. Система підтримує кластеризацію і більшість сучасних інтерфейсів і технологій. Більшість властивостей Linux властиві іншим реалізаціям UNIX, крім того, є деякі унікальні властивості.

8.3 Операційна система реального часу QNX

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

Основною мовою програмування в системі є С. Основнt операційне середовище відповідає стандарту POSIX. Це дозволяє з невеликими доопрацюваннями переносити раніше розроблене програмне забезпечення в QNX для організації їх роботи в середовищі розподіленої обробки. Операційна система QNX, будучи мережевою і мультизадачною, в той же час є розрахованою на багато користувачів (багатотермінальною). Крім того, вона масштабована. З погляду призначеного для користувача інтерфейсу і інтерфейсу прикладного програмування вона дуже схожа на UNIX, оскільки виконує вимоги стандарту POSIX. Проте QNX — це не версія UNIX, хоча чомусь багато хто так вважає. Система QNX була розроблена, що називається, з нуля канадською фірмою QNX Software Systems Limited в 1989 році за замовленням Міністерства оборони США, причому на абсолютно інших архітектурних принципах, ніж використовувалися при створенні операційної системи UNIX. QNX була першою комерційною операційною системою, побудованою на принципах мікроядра і обміну повідомленнями. Система реалізована у вигляді сукупності незалежних (але що взаємодіють шляхом обміну повідомленнями) процесів різного рівня (менеджери і драйвери), кожен з яких реалізує певний вид послуг. Ці ідеї дозволили добитися декількох найважливіших переваг.


 

А также другие работы, которые могут Вас заинтересовать

50906. Измерение удельного заряда электрона методом магнетрона 40 KB
  Наименование средства измерения Предел измерения Цена деления шкалы Класс точности Предел основной погрешности Вольтметр Микроамперметр Амперметр Магнетрон: А соленоид D = мм L= мм N= ; Б диод R= мм Погрешности: А Б 3.Оценка границ погрешностей результата измерения; 9.
50908. Применение технических средств системы охранного телевидения для предупреждения угроз несанкционированного доступа злоумышленника к конфиденциальной информации 1.18 MB
  Первичный источник видеосигнала в составе системы охранной сигнализации; видеоканал: Совокупность технических средств СОТ обеспечивающих передачу телевизионного изображения от одной видеокамеры до экрана видеомонитора в составе СОТ; видеомонитор: Устройство отображения видеоинформации в составе СОТ; видеорегистратор: Устройство предназначенное для записи воспроизведения и хранения видеоинформации в составе СОТ; видеосервер: Устройство предназначенное для работы в составе цифровой СОТ и обеспечивающее преобразование аналогового...
50909. ОПРЕДЕЛЕНИЕ СКОРОСТИ ПУЛИ ПРИ ПОМОЩИ КРУТИЛЬНОГО БАЛЛИСТИЧЕСКОГО МАЯТНИКА 470 KB
  Цель работы: изучение принципа работы баллистического маятника и закона сохранения момента импульса экспериментальная проверка зависимостей между физическими величинами характеризующими крутильные колебания; экспериментальное определение постоянной упругих сил кручения и момента инерции баллистического маятника; определение коэффициента затухания крутильных колебаний. экспериментальное определение с помощью баллистического маятника скорости пуле. Она состоит из: баллистического маятника.
50912. Изучение поляризации отраженного от диэлектриков света 51 KB
  Для определения значения угла Брюстера по компоненте интенсивности отраженного света параллельной плоскости падения проводим измерения I2 в области ее минимальных значений изменяя значения угла с шагом 1. Зависимость интенсивности компоненты отраженного света параллельной плоскости падения от угла падения удобно занести в таблицу.644 Вывод: изучили свойства света поляризованного при отражении от диэлектриков изучили законы поляризации света при отражении от прозрачной среды.
50913. Построение теста с помощью MS Excel 549.5 KB
  Для организации выбора варианта ответа выполняем последовательность действий: Выбирается пункт меню Данные – Проверка В диалоговом окне выбирается тип данных Список В окне Источник перечисляются варианты ответов через точку с запятой. Например: Для подведения итогов тестирования можно предусмотреть специальный лист на котором будут подведены итоги ответов на каждый вопрос. Например: Для выставления оценки необходимо подсчитать какое количество процентов составляет число правильных ответов от общего числа вопросов исходя из общих...