Програмування служб Windows 7 з тригерами (ч.1), Windows, Операційні системи, статті

Кілька тижнів тому ми розглянули ізоляцію Сесії 0 в світлі програмної сумісності. Тому цілком природно, що ми повертаємося до обговорення служб в контексті Windows 7. Але на цей раз ми поговоримо про деякі вигоди оптимізації служб, доступних в Windows 7. Ця стаття присвячена новій можливості Windows 7 – Trigger Start Services. Але перш, ніж ми звернемося до API, давайте змалюємо загальний фон служб.


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


Ми вважаємо за краще вважати служби запущеними завданнями, які працюють у фоновому режимі і не зачіпають операції користувача. Служби в Windows відповідають за всі види фонової активності, починаючи зі служби Remote Procedure Call (RPC), Printer Spooler і аж до служби Network Location Awareness.


Протягом багатьох років Windows росла і разом з нею зростала кількість фонових служб. Будемо чесні, фонові служби в Windows відчуваються досить болісно – операційна система спочатку поставляється з безліччю служб. Крім цього, незалежні розробники ПЗ (ISV) та їх застосування додають ще більше служб. Назвемо в приклад хоча б служби оновлення програмного забезпечення. Разом з тим, деякі служби критично важливі й потрібні в процесі завантаження, в той час як необхідність в інших виникає пізніше, коли певний користувач виконує вхід в систему, а інші зовсім не мають потреби у запуску, поки не будуть викликані. Незважаючи на це, коли ви дивитеся на список запущених в даний момент служб, ви бачите безліч служб, яким немає необхідності працювати за схемою 24х7.
Що поганого в службах, які працюють 24 години на добу 7 днів на тиждень?
Є кілька проблем, пов’язаних з наявністю служб, що працюють за схемою 24х7. По-перше, навіщо щось має працювати (нехай навіть і у фоновому режимі), якщо в його роботі немає потреби? Будь запущений процес (Включаючи служби) використовує дорогоцінну пам’ять і ресурси ЦП, які могли б використовуватися для інших програм і служб. Якщо ви підрахуєте всі служби, запущені в певний момент, то вони служаться в значний обсяг пам’яті, дескрипторів, потоків і використання ЦП. Всі ці “розтрачувати” ресурси знижують загальну продуктивність комп’ютера, його чуйність і змушують користувача думати, що його комп’ютери мляві і повільні. До того ж, оскільки безліч працюючих служб налаштовані на автоматичний запуск (починають працювати зі входом в систему), ці служби впливають на час завантаження комп’ютера.


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


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


Нарешті, якщо служба працює за схемою 24х7, і якщо це добре відома служба (яка може виявитися в кожного популярного програми – наприклад, у PDF Reader), то це створює велику поверхню для атаки. Зловмисник може скористатися відомостями про те, що певна популярний додаток встановлює службу, що працює в режимі 24х7, і спробувати зламати її для отримання доступу до комп’ютера.


Враховуючи все вищесказане, ви можете здивуватися, чому так багато розробників налаштовують свої служби на постійну роботу, якщо у них є інша можливість. Навіть до Windows 7 було доступно кілька варіантів запуску служб:



На жаль, багато ISV (включаючи саму Microsoft) продовжують налаштовувати свої служби на автоматичний (Automated) або автоматичний відкладений запуск (Automatic Delayed), оскільки для всіх це представляється найпростішим рішенням. Служба просто працює 24х7 і завжди доступна, усуваючи будь-яку необхідність перевірки залежностей або того, чи запущена служба.


Можна привести безліч прикладів існуючих служб, які можуть витрачати значно менше ресурсів і стати безпечніше, не працюючи 24х7. Наприклад, подумайте про службу оновлення, яка перевіряє наявність нових оновлень для програми. Якщо комп’ютер не підключений до мережі і не має IP-адреси, навіщо працювати цій службі? Вона нічого не може зробити, так навіщо залишати працюючої програму, яка нічого не робить? Подумайте про службу управління політиками, яка використовується при зміні групових політик або при підключенні комп’ютера до домену або відключення від нього, але зараз, коли комп’ютер підключений до моєї домашньої мережі, служба, знову ж таки, працює даремно.

Поява служб з запуском по тригеру


Рішення вищевказаних проблем полягає у виведенні служби з “стану постійної роботи” в інші види фонової активності, такі як заплановані завдання або служби, що запускаються тригером. Ця стаття присвячена Windows 7 Trigger Start Services. Про Windows 7 Scheduled Tasks можна сказати дуже багато корисного, що і буде зроблено в наступних статтях.


Служби, що запускаються з тригеру (англ. trigger-start service), вперше з’явилися в Windows 7. По суті, це звичайна служба, яку ви можете налаштувати на запуск (або зупинку) у разі спрацювання тригера, тобто в певному випадку або стані, які ви самі ставите (наприклад, коли стає доступним IP-адреса або коли він зникає). Нижче наведено список доступних тригерів, за допомогою яких ви можете налаштувати режим запуску вашої служби:



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

Так що ж таке тригер?


Тригер складається з:


[lst]



Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*