Основні функції і структура ОС

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

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

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

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

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

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

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

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

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

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

Ядро, як можна зрозуміти з назви, це основна, «сама системна» частина операційної системи. Є різні визначення ядра. Відповідно до одного з них, ядро ​​- це резидентна частина системи, тобто до ядра відноситься той програмний код, який постійно знаходиться в пам'яті протягом всієї роботи системи. Решта модулі ОС є транзитними, тобто підвантажуються в пам'ять з диска в міру необхідності на час своєї роботи. До транзитним частинам системи відносяться:

· Утиліти (utilities) - окремі системні програми, які вирішують окремі завдання, такі як форматування і перевірку диска, пошук даних в файлах, моніторинг (відстежування) роботи системи та багато іншого;

· Системні бібліотеки підпрограм, що дозволяють прикладним програмам використовувати різні спеціальні можливості, підтримувані системою (наприклад, бібліотеки для графічного виводу, для роботи з мультимедіа і т.п.);

· Інтерпретатор команд - програма, що виконує введення команд користувача, їх аналіз і виклик інших модулів для виконання команд;

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

· Інші види програм, в залежності від конкретної системи.

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

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

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

В якості програмного інтерфейсу системи, тобто засобів для звернення прикладних програм до послуг ОС, використовується документований набір системних викликів або функцій API (Applied Programming Interface). Між цими двома термінами є деяка різниця. Під системними викликами розуміються функції, реалізовані безпосередньо програмами ядра системи. При їх виконанні відбувається перехід з режиму користувача в режим ядра, а потім назад. На відміну від цього, API-функції визначаються як функції, описані в документації ОС, незалежно від того, чи виконуються вони ядром або ж системними бібліотеками, що працюють в режимі користувача. У Windows часто кілька різних API-функцій звертаються до одного і того ж недокументованих системного виклику, але мають різні обрамляють частини, що працюють в режимі користувача.

Там, де різниця між двома цими поняттями несуттєво, можна використовувати нейтральний термін «системні функції».