La programmation système , ou programmation système , est l'activité de programmation de logiciels de systèmes informatiques . La principale caractéristique distinctive de la programmation système par rapport à la programmation d'applications est que la programmation d'applications vise à produire des logiciels qui fournissent des services directement à l'utilisateur (par exemple, un traitement de texte ), tandis que la programmation système vise à produire des logiciels et des plates-formes logicielles qui fournissent des services à d'autres logiciels, sont limités en termes de performances, ou les deux (par exemple, des systèmes d'exploitation , des applications informatiques , des moteurs de jeu , l'automatisation industrielle et des applications de logiciels en tant que service ).
La programmation système requiert une connaissance approfondie du matériel. Son objectif est d'utiliser efficacement les ressources disponibles, soit parce que le logiciel lui-même est essentiel aux performances, soit parce que même de petites améliorations d'efficacité se transforment directement en économies de temps ou d'argent significatives.
Aperçu
Les attributs suivants caractérisent la programmation système :
- Le programmeur peut faire des hypothèses sur le matériel et d’autres propriétés du système sur lequel le programme s’exécute, et exploitera souvent ces propriétés, par exemple en utilisant un algorithme connu pour être efficace lorsqu’il est utilisé avec du matériel spécifique.
- Habituellement, un langage de programmation de bas niveau ou un dialecte de langage de programmation est utilisé afin que :
- Les programmes peuvent fonctionner dans des environnements aux ressources limitées
- Les programmes peuvent être efficaces avec peu de temps d'exécution , éventuellement avec une petite bibliothèque d'exécution ou aucune bibliothèque du tout.
- Les programmes peuvent utiliser un contrôle direct et « brut » sur l'accès à la mémoire et le flux de contrôle
- Le programmeur peut écrire des parties du programme directement en langage assembleur
- Souvent, les programmes système ne peuvent pas être exécutés dans un débogueur . L'exécution du programme dans un environnement simulé peut parfois être utilisée pour réduire ce problème.
En programmation système, les fonctionnalités de programmation disponibles sont souvent limitées. L'utilisation de la récupération automatique des données n'est pas courante et le débogage est parfois difficile à réaliser. La bibliothèque d'exécution , si elle est disponible, est généralement beaucoup moins puissante et effectue moins de vérifications d'erreurs. En raison de ces limitations, la surveillance et la journalisation sont souvent utilisées ; les systèmes d'exploitation peuvent avoir des sous-systèmes de journalisation extrêmement élaborés.
L'implémentation de certaines parties dans les systèmes d'exploitation et les réseaux nécessite une programmation système, par exemple l'implémentation de la pagination ( mémoire virtuelle ) ou d'un pilote de périphérique pour un système d'exploitation.
Histoire
À l'origine, les programmeurs système écrivaient invariablement en langage assembleur . Les expériences de prise en charge matérielle dans les langages de haut niveau à la fin des années 1960 ont conduit à des langages tels que PL/S , BLISS , BCPL et ALGOL étendu pour les grands systèmes de Burroughs . Forth a également des applications en tant que langage système. Dans les années 1970, C s'est répandu, aidé par la croissance d' Unix . Plus récemment, un sous-ensemble de C++ appelé Embedded C++ a été utilisé, par exemple dans les pilotes du kit d'E/S de macOS . Les ingénieurs travaillant chez Google ont créé Go en 2007 pour améliorer la productivité des développeurs dans les grands systèmes distribués , avec des fonctionnalités axées sur les développeurs telles que la concurrence , le garbage collection et une compilation de programmes plus rapide que C et C++. En 2015, Rust est sorti, un langage de programmation à usage général souvent utilisé dans la programmation système. Rust a été conçu dans un souci de sécurité de la mémoire et pour être aussi performant que C et C++.
Signification alternative
Pour des raisons historiques, certaines organisations utilisent le terme programmeur système pour décrire une fonction qui serait plus précisément appelée administrateur système . Cela est particulièrement vrai dans les organisations dont les ressources informatiques ont historiquement été dominées par les mainframes , bien que le terme soit même utilisé pour décrire des fonctions qui n'impliquent pas de mainframes. Cette utilisation est née du fait que l'administration des mainframes IBM impliquait souvent l'écriture de code assembleur personnalisé ( le langage d'assemblage de base d'IBM (BAL)), qui s'intégrait au système d'exploitation tel que OS/MVS , DOS/VSE ou VM/CMS . En effet, certains produits logiciels IBM bénéficiaient de contributions de code substantielles du personnel de programmation des clients. Ce type de programmation est de moins en moins courant et de plus en plus réalisé en C plutôt qu'en assembleur, mais le terme programmeur système est toujours utilisé comme titre de poste de facto pour le personnel administrant les mainframes IBM, même dans les cas où ils ne participent pas régulièrement à des activités de programmation système.