Практично всі програми на Linux Ubuntu 10.04 LTS використовують будь-які операції введення-виведення. Навіть таке на вигляд просте заняття як веб-серфінг виробляє велику кількість маленьких файлів, які записуються на диск. Без планувальник, кожен раз коли відбувається запит на введення-виведення, відбувалося б взаємодію з ядром і такі операції б виконувалися негайно. Більш того, може виникнути така ситуація, коли ви можете отримати величезну кількість запитів на введення-виведення, яке (щоб задовольнити всі запити користувача) змусить головки диска буквально кидатися по ньому сторони в сторону. Ще важливіше те, що з часом різниця між продуктивністю жорстких дисків і всі інші компоненти виросла дуже швидко, що означає пред'явлення ще більших вимог до вводу-виводу для забезпечення загальної високої продуктивності системи. Так, коли ядро має обслужити переривання - призупиняється робота всіх інших додатків. Тому, з боку це може виглядати як зниження чуйності системи або навіть як уповільнення її роботи.
Планування подій введення-виведення несе в собі необхідність вирішення багатьох питань. Наприклад, планувальником необхідно зберігати надійшли запити в спеціальній черзі. Яким чином він буде зберігати ці події, чи можливо буде змінити порядок подій, скільки часу будуть зберігається ці події, чи будуть виконуватися всі збережені події по досягненню певних умов або з якоюсь періодичністю - все це дуже важливі аспекти роботи планувальника. Від того як саме реалізовані перераховані аспекти роботи планувальника залежить загальна продуктивність роботи системи введення-виведення і те, як сприймається ця система користувачами.
Одним з важливих переваг, яке планування введення-виведення дає системі - є зберігання різних подій в черзі і навіть можливість її (черги) зміни для здійснення окремих операцій введення-виведення швидше за інших. Оскільки швидкість операцій введення-виведення може виявитися значно повільніше, ніж в інших частин системи, перерозподіл запитів на звернення до диска таким чином, щоб мінімізувати переміщення головок диска може підвищити загальну продуктивність роботи системи. Нові файлові системи теж можуть працювати з урахуванням деяких з цих концепцій, тому вони цілком можуть самі оптимізувати операції введення-виведення з точки зору швидкості роботи пристрою зберігання даних. Ви навіть можете шляхом настройки самого планувальника ефективніше адаптувати систему до незвичайних властивостей SSD (твердотільні накопичувачі не мають головок читання-запису в порівнянні з традиційними жорсткими дисками).
Є кілька типових методів, які використовуються планировщиками введення-виведення:
Злиття запитів: в рамках цієї техніки, запити на читання-запис схожого призначення об'єднуються для скорочення кількості дискових операцій і збільшення тривалості системних викликів введення-виведення (що, як правило, призводить до підвищення продуктивності самого введення-виведення).
«Алгоритм ліфта»: Запити введення-виведення упорядковуються виходячи з фізичного розміщення даних на диску таким чином, щоб головки диска якомога більше переміщалися в одному напрямку і як можна більш впорядковано.
Упорядкування запитів: Ця техніка переупорядочівать запити на основі їх пріоритету. Алгоритм реалізації даної техніки залежить від конкретного планувальника.
Крім того, майже всі планувальники введення-виведення враховують фактор «ресурсного голодування», тому в підсумку будуть обслужені всі запити.
В даний час в Linux Ubuntu 10.04 LTS існує чотири планувальника вводу-виводу:
- CFQ (Completely Fair Queuing - алгоритм повністю чесної черги)
Планувальник NOOP (no-operate) є найпростішим. Він поміщає всі вхідні запити вводу-виводу в простий буфер типу FIFO (First-In, First-Out - перший увійшов, першим вийшов) і потім просто запускає їх на виконання. Зауважимо, що це відбувається для всіх процесів, що існують в системі, незалежно від типу запитів вводу-виводу (читання, запис, пошук необхідної доріжки тощо). Також він виконує щось подібне злиття запитів.
Планувальник NOOP використовує мінімальну кількість інструкцій процесора на операцію введення-виведення для виконання найпростішої функціональності: злиття і сортування запитів. Даний планувальник передбачає, що самі пристрої зберігання даних будуть оптимізувати швидкодію операцій введення-виведення.
Потенційно, планувальник NOOP буде добре працювати з пристроями зберігання даних, які не мають механічних частин для читання даних (тобто головок диска). Причина криється в тому, що даний планувальник робить ніяких спроб оптимізувати рух головок, виконуючи найпростіше злиття запитів, що також сприяє підвищенню пропускної здатності диска.
Anticipatory IO Scheduler (передбачається планувальник), як випливає з назви, намагається припустити до жодних блокам диска будуть виконані наступні запити. Він виконує злиття запитів, найпростіший односпрямований алгоритм ліфта, об'єднання запитів на читання і запис. Після того як планувальник обслужив запит на читання-запис, він передбачає, що наступний запит буде для подальшого блоку, зупиняючись на невелику кількість часу. Якщо такий запит надходить, то він обслуговується дуже швидко, оскільки головки диска знаходяться в потрібному місці. Такий підхід привносить незначне уповільнення в роботу системи введення-виведення через необхідність очікування наступного запиту. Однак цей недолік може бути компенсований збільшенням продуктивності запитів до сусідніх областей диска.
Deadline IO Scheduler (планувальник граничних термінів) був написаний Дженсен АКСБ, широко відомим розробником ядра.
Основоположним принципом його роботи є гарантоване час запуску запитів вводу-виводу на обслуговування. Він поєднує в собі такі можливості як злиття запитів, односпрямований алгоритм ліфта і встановлює граничний термін на обслуговування всіх запитів (звідси і така назва). Він підтримує дві спеціальні «черги термінів виконання» (deadline queues) на додаток до двох окремих «відсортованим черг» на читання і запис (sorted queues). Завдання в черзі термінів виконання упорядковано відповідно до часу виконання запитів за принципом «менше час - більш раннє обслуговування - ближче до початку черги». Черги на читання і запис упорядковано на основі запитуваної ними номера сектора (алгоритм ліфта).
Даний планувальник дійсно допомагає пропускної здатності у випадках читання з секторів з великим номером блоку. Операції читання можуть іноді заблокувати додатки, оскільки поки вони виконуються, додатки чекають їх завершення. З іншого боку, операції записи можуть виконуватися набагато швидше, оскільки вони виробляються в дисковий кеш. Більш повільні операції читання з зовнішніх областей диска переміщаються до кінця черги, а більш швидкі операції читання з ближчих областей надійдуть на обслуговування раніше. Такий алгоритм планувальника дозволяє швидше обслужити всі запити на читання-запис, навіть якщо існують запити на читання з далеких областей диска.
CFQ надає користувачам (процесам) конкретного пристрою зберігання даних необхідну кількість запитів вводу-виводу для певного проміжку часу. Це зроблено для багатокористувацьких систем, так як всі користувачі в таких системах отримають один і той же рівень відгуку. Більш того, CFQ досягає деяких з характеристик anticipatory scheduler по високої пропускної здатності, оскільки дозволяє обслуговується черзі простоювати якийсь час по завершенню виконання запиту на введення-виведення в очікуванні запиту, який може виявитися близьким до щойно виконаному запиту.
У Windows Seven для організації введення / виведення використовується I / O Manager, а в Linux Ubuntu планувальник CFQ. В обов'язки I / O Manager входить безліч функцій, таких як створення, читання, запис і безліч інших операції над файлами, реалізація підсистеми вводу / виводу і багато іншого. Тоді як планувальник CFQ відповідає тільки за організацію системи введення / виводу. Це дає йому ряд переваг над I / O Manager, так як він більш ні на що не відволікається, крім як організацію введення / виводу. Також цей планувальник досягає досить високої пропускної здатності за рахунок використання злиття запитів і алгоритму ліфта. На підставу цих доводів можна зробити висновок, що саме для організації введення / виведення CFQ краще, ніж I / O Manager. Але у I / O Manager є маса додатковий функції, яких немає в CFQ, що дозволяє йому працювати з більш широким колом завдань.
У цій роботі ми порівнювали дві операційні системи Windows Seven і Linux Ubuntu 10.04 LTS по ряду критеріїв.
Операційні системи Windows Seven і Linux Ubuntu 10.04 LTS досить сильно відрізняються в реалізації різних сервісів і служб. Відповідно до темами, порушеними в цій статті, можна відзначити кілька глобальних відмінностей.
У Linux Ubuntu 10.04 LTS графічна система існує окремо від ядра і функціонує як звичайна програма. В операційних системах Windows Seven графічна система інтегрована в ядро. У разі використання операційної системи на робочій станції, особливо при запуску графікоемкіх додатків, можливо, краще, коли графічна система входить в ядро - в цьому випадку вона може швидше працювати. А при роботі на сервері краще відділення графічної системи від ядра ОС, так як вона завантажує пам'ять і процесор. У разі Linux графічну систему можна просто відключити, до того ж, якщо системний адміністратор її все-таки хоче використовувати, в Linux є кілька графічних оболонок на вибір, деякі з них досить слабо завантажують машину. Ця ж особливість Unix-подібних операційних систем дозволяє запускати ці ОС на машинах з дуже скромними обсягами ОЗУ і т.п. У разі Windows Seven ж графічна система занадто тісно інтегрована в ОС, тому вона повинна запускатися навіть на тих серверах, на яких вона зовсім не потрібна.
Відзначимо також методику поділу прав доступу в Windows Seven і Linux Ubuntu 10.04 LTS. У першому - поділ прав доступу засноване на ACL (access control lists), тобто, наприклад, можна налаштувати систему таким чином, щоб адміністратор не мав можливості керувати файлами користувачів. У Linux же завжди є привілейований користувач - root, який має доступ абсолютно до всього. Тобто теоретично модель безпеки в Windows Seven краще: щоб повністю заволодіти добре налагодженою системою Windows, хакеру доведеться ламати більше, в Linux же досить зламати доступ до root. Але теорія кілька змащується практикою з того боку, що в Windows не так швидко, як в Linux, закладаються "дірки", що вже відноситься до плюсів відкритої моделі розробки. В результаті виявляється, що в Windows за статистикою більше дірок, через які зловмисник може пробратися в систему. Але, знову ж таки, точно про кількість дірок в Linux і Windows можна буде сказати тільки тоді, коли кількість користувачів обох видів ОС буде приблизно однаковим.
У Linux підтримуються кілька файлових систем, найбільш просунуті - це Ext2, Ext3, Ext4. ОС Windows Seven зав'язана за великим рахунком на одну файлову систему - NTFS. Файлова система Ext4 працює швидше, за рахунок застосування блоків, екстентів і механізму «відкладеного розподілу». Хоча ФС NTFS більш надійна. Так що вибір файлової системи залежить від конкретних цілей користувача, але для звичайних персональних комп'ютерів більш кращою є ext4.
Можна було б згадати багатий набір програмного забезпечення, яке може поставлятися разом з Linux, між тим, Windows також розвивається в цьому напрямку. При всьому при цьому можна з упевненістю сказати, що для звичайного користувача використовує звичайний персональний комп'ютер, краще буде Windows Seven.