qu'est-ce que la programmation système exactement?


26

Je n'ai jamais compris ce que signifiait la programmation système. La définition habituelle donnée est "... faire quelque chose près des Os ou étendre les fonctionnalités d'Os ...".

Est-ce que l'utilisation directe de l'API Windows plutôt que de certaines bibliothèques pour dire que les entrées / sorties de fichiers en font une programmation système? Écrivait la programmation du système Android OS? Si j'écris quelque chose qui exposerait le noyau Linux via une console comme une application sur Android, est-ce que je fais de la programmation système? Si j'écris un logiciel pour contrôler une machine à laver, est-ce que j'écris la programmation du système?

Je suis un débutant en programmation et cela m'embrouille sans fin. Veuillez expliquer le contraste avec la "programmation d'application".


2
Cette définition a changé et les programmeurs système eux-mêmes ne semblent pas être sûrs d'une définition unique aujourd'hui. Ce problème survient généralement lorsque les gens se demandent si le langage X convient à la programmation système ...
Denys Séguret

@Denys Séguret - Ironique si personne ne peut s'entendre sur la "programmation système" par laquelle commencer.
John

Réponses:


19

Personnellement, j'aime la définition de Wikipedia :

La programmation système (ou programmation système) est l'activité du logiciel système de programmation. La principale caractéristique distinctive de la programmation de systèmes par rapport à la programmation d'applications est que la programmation d'applications vise à produire des logiciels qui fournissent des services à l'utilisateur (par exemple le traitement de texte), tandis que la programmation des systèmes vise à produire des logiciels qui fournissent des services au matériel informatique (par exemple le défragmenteur de disque ). Cela nécessite une plus grande connaissance du matériel.


12

Vous pouvez vous poser plusieurs questions pour vous entraîner à décider de cette question.

  • Le système a-t-il été vendu à l'origine sans ce programme? Angry Birds peut être une «application tueur» pour un téléphone intelligent (la raison pour laquelle quelqu'un l'achète), mais il s'agit toujours d'une application tierce distincte écrite longtemps après l'introduction du téléphone. L'écrire aurait été une programmation d'applications. Mais le pilote d'affichage du même téléphone intelligent est essentiel à son utilisation, il aurait donc été une programmation système.
  • Pouvez-vous imaginer porter le code sur une autre plate-forme sans le réécrire en grande partie? TeX et troffont été portés sur pratiquement n'importe quel système avec peu de changements, ce sont donc des applications, même si elles sont situées vers le bas de la chaîne d'outils que les gens utilisent généralement. Le système de fichiers dans lequel TeX écrit sa sortie, par exemple UFS ou VFAT, est un cas limite. Vous pouvez porter un système de fichiers vers un système d'exploitation différent s'il était totalement génial, mais généralement, les gens prennent le contrôle d'idées géniales et écrivent leur propre système de fichiers pour leur propre système d'exploitation. Cela fait des logiciels système de systèmes de fichiers.
  • La fonctionnalité est-elle implémentée dans le noyau ou dans des binaires séparés? (Les systèmes de fichiers occupent ici également un terrain d'entente. De nombreuses parties de nombreux systèmes de fichiers sont en fait du code du noyau, mais beaucoup ont des parties substantielles dans l'espace utilisateur.) Les pilotes d'affichage graphique peuvent en principe être des composants externes enfichables, mais ils sont souvent implémentés dans le noyau ou au moins avec un accès direct privilégié au noyau (ou même au matériel). Ce serait la programmation des systèmes. En revanche, les jeux informatiques qui utilisent la pile d'affichage graphique sont des applications.

À vos questions, écrire le système d'exploitation Android était définitivement une programmation système. L'écriture d'un programme qui utilise des appels API Windows est une programmation d'application. Il n'est pas aussi portable que si vous utilisiez des bibliothèques multi-plateformes telles que SDL ou OpenGL, mais il peut en principe être porté, il s'agit d'un code tiers et il s'exécute dans l'espace utilisateur. Une application console qui expose l'état du noyau Linux est une expérience de réflexion intéressante. Je dirais certainement que cela implique la programmation de systèmes, car il faudrait en savoir beaucoup sur la structure de Linux (notez que "Linux" n'est correctement que le noyau, pas la distribution) pour écrire, et probablement même pour l'utiliser!


4

En bref: un logiciel d'écriture qui étend ou améliore le fonctionnement d'un système d'exploitation, comme les pilotes, les mises à jour des utilitaires système pour les systèmes d'exploitation ou même les tout nouveaux systèmes d'exploitation.

Il s'agit principalement de la gestion de la mémoire; Opérations d'E / S dans le sens le plus large du terme comme mise en réseau, accès aux fichiers et gestion des périphériques; gestion des processus (multitâche, administration des processus, etc.); Méthodes d'interaction avec l'utilisateur <-> système (en entrée et en sortie) et administration des utilisateurs. Fondamentalement, tout ce qui fait partie du système d'exploitation qui n'est pas une application est une programmation système.


3

L'utilisation directe de l'API Windows était, à un moment donné, un moyen courant d'écrire des applications pour Windows. Donc non, ce n'est pas de la programmation système.

La programmation des systèmes n'est pas seulement «proche du système d'exploitation» - c'est quelque chose d'essentiel au fonctionnement de base du système informatique. L'écriture d'un système d'exploitation est donc une programmation système. L'écriture de pilotes vidéo, de pilotes de système de fichiers, de pilotes réseau pour ce système d'exploitation est une programmation système. L'écriture d'un compilateur pour une combinaison particulière de langage / chipset est une programmation système.


1

Normalement, il fait référence à "des éléments de bas niveau que les utilisateurs finaux non techniques ne connaissent pas ou qui ne savent pas très clairement qu'ils utilisent ou ce qu'ils font".

Quelques exemples qui seraient souvent considérés comme de la programmation système:

  • systèmes d'exploitation et pilotes
  • compilateurs
  • émulateurs et virtualisation
  • création de distribution, c'est-à-dire la création d'images de l'espace utilisateur.

    Cela implique notamment normalement de sélectionner la bibliothèque standard C, le système init et les composants de base de l'utilisateur comme un shell.

Systèmes de programmation est souvent fait dans les langues de niveau inférieur compilé sans la collecte des ordures automatique comme C ou de montage, et ont tendance à un accès moins système commun appelle souvent par le biais d' interfaces C POSIX .

Je maintiens un tutoriel pratique qui couvre plusieurs sujets de programmation système ici .


0

Lors de la définition de cela, j'éviterais tout détail technique. Ensuite, cela devient facile.

Une application permet à un utilisateur de faire quelque chose d'utile avec un morceau de technologie. La programmation d'applications vise donc à fournir des fonctionnalités à un utilisateur, de manière assez directe.

D'un autre côté, la programmation système jetterait les bases d'une programmation d'applications possible. Il fournit des fonctionnalités au programmeur d'application plutôt qu'à l'utilisateur.

Cette définition tiendra, mais c'est une question de perspective, de contexte et de rôles. Pour un programmeur informatique, les outils de programmation sont des applications. Pour un utilisateur final, ils sont dénués de sens, juste hors de vue.


-3

En bref, la programmation système par rapport à la programmation d'application est que le SP gère le logiciel OS pour travailler avec les ressources matérielles et AP gère l'activité des utilisateurs finaux.


4
cela ne semble pas offrir quoi que ce soit de substantiel par rapport aux points soulevés et expliqués dans les 4 réponses précédentes
gnat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.