Операційна система, ОС (, OS ) — комплекс базових програм, що взаємодіють з апаратним забезпеченням комп'ютера або віртуальної машини, керують обчисленнями, процесами та організовують взаємодію з користувачем.
Операційні системи складаються з ядра операційної системи та базового набору прикладних програм. Драйвери є важливою складовою багатьох дистрибутивів операційних систем.
Функції операційної системи Головні функції: Виконання на вимогу користувача тих елементарних (низькорівневих) дій, які є спільними для більшості програм і часто зустрічаються майже в усіх програмах (введення та виведення даних, запуск і зупинка інших програм, виділення та вивільнення додаткової пам'яті, робота з відображенням тощо) Стандартизований доступ до периферійних пристроїв (пристрої введення-виведення) Завантаження програм в оперативну пам'ять і їх виконання Керування оперативною пам'яттю (розподіл між процесами, організація віртуальної пам'яті) Керування доступом до даних енергонезалежних носіїв (жорсткий диск, оптичний диск тощо), організованим у тій чи іншій файловій системі Відтворення (відображення) інтерфейсу користувача Мережеві операції, підтримка стеку мережевих протоколів
Додаткові функції: Паралельне або псевдопаралельне виконання задач (багатозадачність) Розподіл ресурсів обчислювальної системи між процесами Організація надійних обчислень (неможливості впливу процесу на перебіг інших), грунтована на розмежуванні доступу до ресурсів Взаємодія між процесами: обмін даними, синхронізація Захист самої системи, а також даних користувача і програм від дій користувача або інших програм Багатокористувацький режим роботи та розподілення прав доступу (автентифікація, авторизація)
Поняття операційної системи пов'язане з такими поняттями, як:
— іменований та деяк впорядкований набір даних на пристрої зберігання інформації; операційна система забезпечує організацію файлів в файлові системи. Файлова система — набір правил (можливо, файлів, можливо каталогів / папкок), організованих деяким чином. Якщо організація файлів в файлову систему відбувається з використанням каталогів, то така файлова система називається ієрархічною. Програма — файл чи набір файлів (і, можливо, каталогів / папок), що містить набір інструкцій для виконання. Виконавцем інструкцій програми може бути: центральний процесор — якщо програма містить машинний код (звичайно отримують шляхом компіляції початкового тексту програми, написаного однією з компільованих мов); інтерпретатор — інша програма, яка забезпечує розпізнавання і виконання інструкцій (в окремих випадках інтерпретатор також називають віртуальною машиною); відеокарта — часто є допоміжним пристроєм у обробці інформації Завдання — програма в процесі виконання (в термінології операційних систем UNIX використовують термін «процес»). Команда — ім'я, яке використовує користувач, ОС або інша програма для виконання вказаної програми (може збігатися з назвою файлу, який містить програму) або поіменованої дії (вбудованої команди). Командний інтерпретатор — середовище та принцип, рядковий інтерфейс між користувачем і ПЗ загалом і призначений для виконання (отримання) команд. Команд, інтерпретаторів може бути декілька.
Типи операційних систем Відносно свого призначення, операційні системи бувають:
універсальні (для загального використання); спеціальні (для розв'язання спеціальних задач); спеціалізовані (виконуються на спеціальному обладнанні); однозадачні (в окремий момент часу можуть виконувати лише одну задачу); багатозадачні (в окремий момент часу здатні виконувати більше однієї задачі); однокористувацькі (в системі відсутні механізми обмеження доступу до файлів та на використання ресурсів системи); багатокористувацькі (система впроваджує поняття «власник файлу» та забезпечує механізми обмеження на використання ресурсів системи (квоти)), всі багатокористувацькі операційні системи також є багатозадачними; реального часу (система підтримує механізми виконання задач реального часу, тобто такі, для яких будь-які операції завжди виконуються за заздалегідь передбачуваний і незмінний при наступних виконаннях час). Відносно способу встановлення (інсталяції) операційної системи, операційні системи бувають:
вмонтовані (такі, що зберігаються в енергонезалежній пам'яті обчислювальної машини або пристрою без можливості заміни в процесі експлуатації обладнання); невмонтовані (такі, що інсталюються на один з пристроїв зберігання інформації обчислювальної машини з можливістю подальшої заміни в процесі експлуатації). Відносно відповідності стандартам операційні системи бувають:
стандартні (відповідають одному з загальноприйнятих відкритих стандартів, найчастіше POSIX); нестандартні (в тому числі такі, що розробляються відповідно до корпоративних стандартів).
Відносно ліцензії, можливостей розширення та можливостей внесення змін до вихідного коду операційні системи бувають: вільні — з вільними програмним кодом (GNU, BSD, MIT) відкриті (англ. open source) — з відкритим програмним кодом; власницькі () — комерційні з закритим кодом.
Складові ОС
До складу операційної системи входять: ядро операційної системи, що забезпечує розподіл та керування ресурсами обчислювальної системи; базовий набір прикладних програм, системні бібліотеки та програми обслуговування.
Ядро системи — це набір функцій, структур даних та окремих програмних модулів, які завантажуються в пам'ять комп'ютера при завантаженні операційної системи та забезпечують три типи системних сервісів: керування введенням-виведенням інформації (підсистема вводу-виводу ядра ОС); керування оперативною пам'яттю (підсистема керування оперативною пам'яттю ядра ОС); керування процесами (підсистема керування процесами ядра ОС).
Кожна з цих підсистем представлена відповідними функціями ядра системи.
Багатозадачні операційні системи також включають ще одну обов'язкову складову — механізм підтримки багатозадачності. Ця складова не надається як системний сервіс і тому не може бути віднесена до жодної з підсистем, а більше стосується концепції роботи.
Існує три основних механізми забезпечення багатозадачності (планування задач): шляхом надання процесора окремій задачі на квант часу, який визначається самою задачею (кооперативна багатозадачність; останнім часом практично не використовується або область використання значно обмежена всередині процесів); шляхом надання процесора окремій задачі на квант часу, який визначається обладнанням обчислювальної системи — інтервальним таймером; виділення під окрему задачу окремого процесора в багатопроцесорних системах. У перших двох випадках на кожному з процесорів в окремо взятий момент часу обраховується лише одна задача, але за рахунок достатньо малого кванта часу (в межах мілісекунд), що почергово надається кожній з задач, виникає почуття одночасного виконання в системі багатьох задач чи програм.
В сучасних системах, як правило комбінуються методи 2 і 3.
Вимоги до обладнання
Окрема операційна система зазвичай може виконуватись на обмеженому переліку обладнання, яке забезпечує потрібні їй механізми. Сучасні універсальні (і не тільки) операційні системи зазвичай вимагають апаратної підтримки наступних механізмів: підтримка сторінкового поділу оперативної пам'яті з можливістю апаратного захисту сторінок від модифікації даних окремими задачами (процесами); підтримка захищеного режиму виконання процесора (режиму ядра ОС), який передбачає можливість виконання команд вводу/виводу (та інших привілейованих інструкцій для керування апаратурою), при цьому спроба виконати подібну операцію в прикладній програмі блокується апаратно.
Можуть існувати і інші вимоги.
Підсистеми ядра ОС
Інтерфейс ядра операційної системи Функції ядра операційної системи можуть бути виконані внаслідок виконання в прикладних програмах спеціальних функцій — системних викликів. Призначення системного виклику полягає в тому, що прикладні програми не в змозі самотужки визначити, за якими адресами знаходяться функції ядра. Системний виклик в один з машинно-залежних способів реалізує механізм отримання адрес функцій ядра та передачу в ці функції необхідних параметрів системного виклику, а також отримання результату системного виклику. Найчастіше системні виклики забезпечуються через систему переривань, завдяки чому адреса функції ядра не тільки обраховується апаратно (в процесі обробки переривання), але й забезпечується захист інформаційних ресурсів ядра. Системні виклики найчастіше мають синтаксис функції мови програмування, на якій написано ядро ОС.
Підсистема керування введенням-виведенням Підсистема керування введенням-виведенням реалізує базові механізми обміну даними між пристроями введення-виведення та оперативною пам'яттю обчислювальної машини та забезпечує організацію файлів в файлові системи.
Операція введення виконується як читання даних з зовнішнього пристрою в оперативну пам'ять, операція виведення — як запис даних з оперативної пам'яті на зовнішній пристрій.
При роботі з файлами система введення-виведення впроваджує спеціальну абстракцію — потік вводу-виводу, що дозволяє програмам, які звертаються за сервісами введення-виведення, використовувати одноманітний перелік функцій роботи з файлами незалежно від типу пристрою, на якому знаходиться файл, та типу файлової системи, яка містить цей файл. Відмінності доступу до різних пристроїв та файлових систем забезпечуються додатковими програмними модулями — драйверами пристроїв та файлових систем.
В окремих операційних системах підсистема керування введенням-виведенням також може впроваджувати механізми, які призвані підвищити швидкість обміну даними між задачами та файлами. Найчастіше використовується механізм буферизації (кешування) даних, який полягає в тому, що при читанні даних з файлу підсистема намагається за одну операцію введення читати дані блоками зручного (звичайно досить великого) розміру, а не порціями, які запитує задача. Завдяки цьому за одну операцію введення в оперативну пам'ять потрапляють також додаткові дані, які зберігаються в кеші і надалі передаються в програму без додаткових звернень до пристрою. Подібним чином цей механізм працює і при виконанні операцій запису.
Підсистема керування оперативною пам'яттю
Будь-яка програма може виконуватись лише тоді, коли вона завантажена в оперативну пам'ять, так само, будь-які дані з файлів можуть оброблятись лише тоді, коли вони завантажені в оперативну пам'ять. Завантаження програми та даних в оперативну пам'ять призводить до того, що в оперативній пам'яті одночасно знаходяться одразу кілька компонентів: ядро операційної системи, командний інтерпретатор, програма, що виконується, та дані, що обробляються. Крім того, програма в процесі свого виконання може звертатись до підсистеми керування оперативною пам'яттю з запитами на виділення додаткової — динамічної — оперативної пам'яті.
В багатозадачних операційних системах кількість компонентів, що одночасно можуть знаходитись в оперативній пам'яті зростає пропорційно кількості задач і може сягати сотень.
Підсистема керування оперативною пам'яттю забезпечує розподіл оперативної пам'яті між різними компонентами, а також розподіляє пам'ять під кеш системи введення-виведення.
В окремих багатозадачних операційних системах підсистема керування оперативною пам'яттю також забезпечує віртуалізацію оперативної пам'яті, завдяки чому кожна задача (процес) отримує власну віртуальну пам'ять, причому таким чином, що нестача реальної (фізичної) пам'яті покривається за рахунок перерозподілу даних між оперативною пам'яттю та зовнішнім накопичувачем і переміщення даних між фізичною оперативною пам'яттю і зовнішнім накопичувачем приховується від задач. Це переміщення називається підкачуванням сторінок () або свопінгом ( — обмін) — в залежності від термінології конкретної ОС.
Запровадження механізму віртуалізації оперативної пам'яті дозволяє отримати два корисних наслідки:
