Системне програмування
Систе́мне програмува́ння (або програмування систем) — це вид програмування, який полягає у розробці програм, які взаємодіють з системним програмним забезпеченням (операційною системою), або апаратним забезпеченням комп'ютера[1]. Головною відмінністю системного програмування в порівнянні з прикладним програмуванням є те, що прикладне програмне забезпечення призначене для кінцевих користувачів (наприклад, текстові процесори, графічні редактори), тоді як результатом системного програмування є програми, які обслуговують апаратне забезпечення або операційну систему (наприклад, дефрагментація диска) що обумовлює значну залежність такого типу ПЗ від апаратної частини. Слід зазначити, що «звичайні» прикладні програми можуть використовувати у своїй роботі фрагменти коду, характерні для системних програм, і навпаки; тому чіткої межі між прикладним та системним програмуванням немає[2]. Оскільки різні операційні системи відрізняються як внутрішньою архітектурою, так і способами взаємодії з апаратним та програмним забезпеченням, то принципи системного програмування для різних ОС є відмінними. Тому розробка прикладних програм, які здійснюватимуть одні і ті ж дії на різних ОС, може суттєво відрізнятися.
В загальному для системного програмування характерні такі особливості (одна або кілька):
- програміст повинен враховувати особливості операційної системи та/або апаратного забезпечення, на яких передбачається запуск програми, та використовувати ці особливості (наприклад, застосовуючи оптимізовані алгоритми для певної архітектури)
- зазвичай використовуються низькорівневі мови програмування або діалекти які:
- можуть працювати у ресурсо-обмеженому середовищі
- максимально раціональні та мають мінімальні затримки за часом виконання
- мають малі бібліотеки бібліотеки періоду виконання (RTL), або взагалі їх не мають
- дозволяють виконувати прямий доступ до пам'яті та керівної логіки
- дозволяють програмісту писати частини програми на асемблері
- зневадження може бути складним, якщо неможливо запустити програму у відповідному режимі через обмеження у ресурсах. Виконання програми у імітованому середовищі може зняти цю проблему.
Системне програмування суттєво відрізняється від прикладного програмування, що змушує програмістів спеціалізуватися в одній із цих галузей.
Для системного програмування часто доступна тільки обмежена кількість інструментів. Зневадження інколи має підвищену складність. Бібліотеки періоду виконання, якщо взагалі доступні, мають набагато менші можливості, і роблять менше перевірок на помилки. Через ці обмеження, часто використовуються моніторинг та реєстрація даних; операційні системи мають бути забезпечені дуже якісними підсистемами реєстрації даних.
Спочатку системні програмісти неодмінно використовували асемблер. Експерименти з підтримкою апаратної частини у високорівневих мовах програмування у кінці 60-х призвели до появи таких мов як BLISS та BCPL, але С, яка допомогла росту Unix, набула поширення вже у 1980-х. Віднедавна деяке використання знайшлось і для Embedded C++, наприклад у системі вводу/виводу драйверів у Mac OS X. Станом на 2022-й в експериментальному режимі функціонує[3] підтримка мови Rust для програмування ядра Linux.
Прикладами програмного забезпечення, розробленого в результаті системного програмування, є реалізація основних частин операційної системи та програм для мережевої роботи. Наприклад, розробка віртуальної пам'яті або драйверів для операційної системи.
- ↑ Коноваленко І. В., Федорів П. С. Системне програмування у Windows з прикладами на Delphi, Т:ТНТУ.- 2012.
- ↑ Харт Джонсон М. Системное программирование в среде Windows / Джонсон М. Харт ; пер. с англ. — М. : Издательский дом «Вильямс», 2005.
- ↑ Rust For The Linux Kernel Sent Out For Review A Fourth Time. www.phoronix.com (англ.). Процитовано 14 липня 2022.