Я никогда не понимал, что означает системное программирование. Обычно дается следующее определение: «... делать что-то близкое к Os или расширять возможности Os ...».
Использует ли Windows API напрямую, а не некоторые библиотеки, чтобы сказать, делает ли файловый ввод / вывод системным программированием? Пишет системное программирование Android OS? Если я напишу что-нибудь, что откроет ядро Linux через консоль, как приложение на Android, я занимаюсь системным программированием? Если я пишу программное обеспечение для управления стиральной машиной, пишу ли я системное программирование?
Я новичок в программировании, и это не смущает меня до конца. Пожалуйста, объясните, противопоставляя это "прикладному программированию".
systems-programming
kentjh
источник
источник
Ответы:
Мне лично нравится определение из Википедии :
источник
Есть несколько вопросов, которые вы можете задать себе, чтобы практиковаться в решении этого вопроса.
troff
были портированы практически на любую систему с небольшими изменениями, поэтому они являются приложениями, даже если они расположены в нижней части цепочки инструментов, которую обычно используют люди. Файловая система, в которую TeX записывает свои выходные данные, например UFS или VFAT, является пограничным случаем. Вы могли бы портировать файловую систему на другую ОС, если она была совершенно потрясающей, но обычно люди просто берутся за потрясающие идеи и пишут свои собственные файловые системы для своих собственных ОС. Это делает системное программное обеспечение файловых систем.На ваши вопросы, написание ОС Android было определенно системным программированием. Написание программы, использующей вызовы API Windows, является прикладным программированием. Он не так переносим, как если бы вы использовали кросс-платформенные библиотеки, такие как SDL или OpenGL, но в принципе его можно портировать, он является сторонним кодом и работает в пространстве пользователя. Консольное приложение, отображающее состояние ядра Linux, представляет собой интересный мысленный эксперимент. Я бы определенно сказал, что это связано с системным программированием, поскольку вам нужно много знать о структуре Linux (обратите внимание, что «Linux» - это, по сути, только ядро, а не дистрибутив), чтобы писать и, возможно, даже использовать его!
источник
Вкратце: написание программного обеспечения, которое расширяет или улучшает функционирование ОС, например, драйверов, обновлений системных утилит для ОС или даже совершенно новых ОС.
В основном это касается управления памятью; Операции ввода-вывода в широком смысле этого слова, такие как работа в сети, доступ к файлам и управление устройствами; управление процессами (многозадачность, администрирование процессов и т. д.); user <-> методы взаимодействия с системой (как внутри, так и снаружи) и администрирование пользователей. В основном все, что является частью ОС, а не приложением, является системным программированием.
источник
Использование Windows API напрямую было, в какой-то момент, обычным способом написания приложений для Windows. Так что нет, это не системное программирование.
Системное программирование - это не просто «близость к ОС», это нечто важное для функционирования ядра компьютерной системы. Поэтому написание ОС - это системное программирование. Написание видеодрайверов, драйверов файловых систем, сетевых драйверов для этой ОС - системное программирование. Написание компилятора для конкретной комбинации языка / чипсета - системное программирование.
источник
Обычно это относится к «низкоуровневым вещам, которые нетехнические конечные пользователи не знают, существуют или не очень четко знают, что они используют или что они делают».
Некоторые примеры, которые часто рассматриваются как системное программирование:
создание дистрибутива, т. е. создание пользовательских изображений.
Это обычно включает в себя выбор стандартной библиотеки C, системы инициализации и базовых пользовательских компонентов, таких как оболочка.
Системное программирование часто делается в нижней скомпилированных языках уровня без автоматической сборки мусора , как C или сборки, и , как правило, доступ реже система часто вызывает через интерфейсы POSIX C .
Я продолжаю практическое руководство, которое охватывает несколько тем системного программирования здесь .
источник
При определении этого я бы держался подальше от любых технических деталей. Тогда это становится легко.
Приложение позволяет пользователю делать что-то полезное с некоторыми технологиями. Таким образом, прикладное программирование нацелено на предоставление функций пользователю, напрямую.
Системное программирование, с другой стороны, заложило бы основу, чтобы сделать возможным прикладное программирование. Он предоставляет функции для прикладного программиста, а не для пользователя.
Это определение сохранится, но это вопрос перспективы, контекста и ролей. Для программиста инструменты программирования являются приложениями. Для конечного пользователя они бессмысленны, просто вне картины.
источник
Короче говоря, системное программирование по сравнению с прикладным программированием заключается в том, что SP обрабатывает программное обеспечение ОС для работы с аппаратными ресурсами, а точка доступа - действиями конечных пользователей.
источник