що саме таке системне програмування?


26

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

Чи використовує API Windows безпосередньо, а не деякі бібліотеки, щоб сказати, чи вводяться файли вводу / виводу, це робить системне програмування? Чи було написано системне програмування ОС Android? Якщо я напишу щось, що розкривало б ядро ​​Linux через консоль, як додаток на Android, чи я займаюся системним програмуванням? Якщо я пишу програмне забезпечення для управління пральною машиною, чи пишу я системне програмування?

Я початківець у програмуванні, і це бентежить мене не до кінця. Поясніть, будь ласка, протиставляючи це "програмуванню прикладних програм".


2
Це визначення змінилося, і самі системні програмісти сьогодні, схоже, не впевнені в унікальному визначенні. Ця проблема зазвичай виникає, коли люди дискутують про те, чи зручна мова X для системного програмування ...
Denys Séguret

@Denys Séguret - Іронічно, якщо ніхто не може погодитися з того, з чого слід почати «системне програмування».
Джон

Відповіді:


19

Мені особисто подобається визначення з Вікіпедії :

Системне програмування (або системне програмування) - це діяльність програмного забезпечення системного програмного забезпечення. Основна відмітна характеристика системного програмування порівняно з прикладним програмуванням полягає в тому, що прикладне програмування має на меті виробляти програмне забезпечення, яке надає послуги користувачеві (наприклад, текстовий процесор), тоді як системне програмування має на меті виробляти програмне забезпечення, яке надає послуги комп'ютерному апаратному забезпеченню (наприклад, дефрагментатор диска ). Це вимагає більшого ступеня обізнаності з обладнанням.


12

Ви можете задати собі кілька питань, щоб скористатися практикою вирішення цього питання.

  • Чи спочатку система продавалася без цієї програми? Angry Birds може бути "додатком-вбивцею" для смарт-телефону (причина, чому хтось купує його), але це все ще окремий сторонній додаток, написаний задовго після введення телефону. Написати це було б програмуванням програм. Але драйвер дисплея того ж смартфона має важливе значення для його використання, тому це було б програмуванням систем.
  • Чи можете ви уявити, як перенести код на іншу платформу, не в основному переписуючи її? TeX і troffбули перенесені практично в будь-яку систему з невеликими змінами, тому вони є додатками, хоча вони розташовані внизу ланцюжка інструментів, якими зазвичай користуються люди. Файлова система, на яку TeX записує свій вихід, наприклад, UFS або VFAT, є прикордонним випадком. Ви можете перенести файлову систему в іншу ОС, якщо вона була абсолютно приголомшливою, але зазвичай люди просто переймають приголомшливі ідеї та записують власну файлову систему для своєї ОС. Це робить програмне забезпечення файлових систем.
  • Чи реалізована функціональність в ядрі або в окремих двійкових файлах? (Файлові системи тут також займають середнє місце. Багато частин багатьох файлових систем насправді є кодом ядра, але багато мають значну частину в просторі користувача.) Драйвери графічних дисплеїв можуть в принципі бути підключеними зовнішніми компонентами, але вони часто реалізуються в ядрі або принаймні з привілейованим прямим доступом до ядра (або навіть до апаратного забезпечення). Це було б програмування систем. З іншого боку, комп'ютерні ігри, які використовують стек графічного дисплея, - це програми.

На ваші запитання, написання ОС Android, безумовно, було програмуванням систем. Написання програми, яка використовує Windows API-дзвінки, - це програмування програм. Це не так портативно, як якщо б ви використовували крос-платформні бібліотеки, такі як SDL або OpenGL, але в принципі це можна перенести, це сторонній код і працює в просторі користувача. Консольний додаток, який розкриває стан ядра Linux, - цікавий продуманий експеримент. Я б точно сказав, що це передбачає системне програмування, оскільки вам потрібно було б багато знати про структуру Linux (зауважте, що "Linux" належним чином є лише ядром, а не дистрибутивом), щоб писати, і, ймовірно, навіть використовувати його!


4

Якщо коротко: написання програмного забезпечення, яке розширює або розширює функціонування ОС, як, наприклад, драйвери, оновлення системних утиліт до ОС або навіть абсолютно нових ОС.

В основному це стосується управління пам’яттю; Операції вводу / виводу в широкому розумінні цього слова, як мережа, доступ до файлів та управління пристроями; управління процесами (багатозадачність, адміністрування процесів тощо); користувальницькі <-> методи взаємодії з системою (і в і поза), і адміністрація користувача. В основному все, що є частиною ОС, яка не є додатком, - це системне програмування.


3

Використання Windows API безпосередньо було, в один момент, поширеним способом написання програм для Windows. Так ні, це не системне програмування.

Програмування систем не просто "близько до ОС" - це щось важливе для основного функціонування комп'ютерної системи. Отже, написання ОС - це системне програмування. Запис відеодрайверів, драйверів файлової системи, мережевих драйверів для цієї ОС - це системне програмування. Запис компілятора для певної комбінації мови / чіпсета - це системне програмування.


1

Зазвичай це стосується "речей низького рівня, про які нетехнічні кінцеві користувачі не знають, або не дуже чітко знають, що вони використовують або що роблять".

Деякі приклади, які часто вважатимуть системним програмуванням:

  • операційні системи та драйвери
  • компілятори
  • емулятори та віртуалізація
  • створення дистрибуції, тобто створення образів користувальницької землі.

    Це, зокрема, включає вибір стандартної бібліотеки C, системи init та основних компонентів, таких як оболонка.

Програмування систем часто виконується на мовах нижчого компільованого рівня без автоматичного збирання сміття, таких як C або збірка, і зазвичай мають доступ до менш поширених системних дзвінків часто через POSIX C інтерфейси .

Я підтримувати руки на підручник , який охоплює кілька тем системного програмування тут .


0

Визначаючи це, я б утримався від будь-яких технічних деталей. Тоді стає легко.

Додаток дозволяє користувачеві зробити щось корисне за допомогою якоїсь технології. Тому програмування прикладних програм орієнтоване на надання функцій користувачеві, досить безпосередньо.

З іншого боку, системне програмування заклало б основу, щоб зробити можливим програмування програм. Він надає функції програмісту програми, а не користувачеві.

Це визначення буде справедливим, але це питання перспективи, контексту та ролей. Для комп'ютерного програміста засоби програмування - це програми. Кінцевому користувачеві вони безглузді, просто вийшли з картини.


-3

Коротше кажучи, системне програмування в порівнянні з прикладним програмуванням полягає в тому, що SP обробляє програмне забезпечення ОС для роботи з апаратними ресурсами, а AP обробляє діяльність кінцевих користувачів.


4
це , здається, не пропонує нічого істотного по точкам зроблених і пояснено в попередніх 4 відповідей
комар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.