Системное программирование (или программирование систем ) - это вид программирования, который заключается в работе с системным программным обеспечением. Главным отличием системного программирования по сравнению с прикладным программированием является то, что прикладное программное обеспечение предназначено выпускать (создавать и обновлять) программы для пользователей (например, текстовые процессоры ), тогда как системное программирование предназначено выпускать программы, обслуживающие аппаратное обеспечение (например, дефрагментация диска ) что обусловливает значительную зависимости такого типа ПО от аппаратной части. Также для системного программирования характерно:
- программист должен учитывать аппаратное обеспечение и другие особенности системы, на которой предполагается запуск программы, и использовать эти особенности (например, применяя оптимизированные алгоритмы для определенной архитектуры )
- обычно используются низкоуровневые языки программирования или диалекты которые:
- могут работать в ресурсно-ограниченной среде
- максимально рациональные и имеют минимальные задержки по времени выполнения
- имеют малые библиотеки библиотеки периода выполнения (RTL), или вообще их не имеют
- позволит прямой доступ к памяти и управляющей логики
- позволяют программисту писать части программы на ассемблере
- налаживание может быть сложным, если невозможно запустить программу в режиме отладки за ограничений в ресурсах. Выполнение программы в эмулируемом среде может снять эту проблему.
Системное программирование существенно отличается от прикладного программирования, что заставляет программистов специализироваться в одной из этих областей.
Для системного программирования часто доступна только ограниченное количество инструментов. Налаживание иногда оказывается очень сложным. Библиотеки периода выполнения, если вообще доступны, имеют гораздо меньшие возможности, и делают меньше проверок на ошибки. Через эти ограничения, часто используются мониторинг и регистрация данных; операционные системы должны быть снабжены очень качественными подсистемами регистрации данных.
История
Сначала системные программисты непременно использовали ассемблер. Эксперименты с поддержкой аппаратной части в высокоуровневых языках программирования в конце 60-х привели к появлению таких языков как BLISS и BCPL, но С, которая помогла росту Unix, получила распространение уже в 1980-х. Недавно некоторое использования нашлось и для Embedded C++, например в системе ввода / вывода драйверов в Mac OS X.