Qu'entend-on par «programmation système»?

33

Je prépare un stage en tant que programmeur de jeu dans une société de développement de jeux de renommée mondiale. Lorsque j'ai cherché sur leur site Web les conditions préalables nécessaires, cela m'a montré ceci:

Avantage ajouté

  • Connaissance de DirectX / OpenGL.
  • Maîtrise des mathématiques 3D et de la physique.
  • Développement de Visual Studio IDE pour C ++.
  • Programmation système et concepts de système d'exploitation.

Qu'entendent-ils exactement par programmation système et concepts de système d'exploitation?

Devrais-je étudier la programmation Windows? Ou devrais-je utiliser la programmation Linux (ce qui signifie qu'ils veulent que je connaisse les concepts importants). Ou est-ce quelque chose de totalement différent?

Dhannanjai
la source
Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
Josh
"Devrais-je étudier la programmation Windows? Ou devrais-je utiliser la programmation Linux?" Ayez au moins une lecture de leurs API, essayez peut-être de faire une simple "ouverture de fenêtre" avec les API de système d'exploitation respectives afin d'apprendre à quel point elles sont différentes et quel effort cela peut être.
Pharap
@Pharap Techniquement, il n’existe aucune "API système d’exploitation" sous Linux pouvant ouvrir une fenêtre. Il est préférable d’utiliser glut, glfw ou similaire pour ouvrir une fenêtre afin que cela fonctionne à la fois avec X et Wayland (ainsi que sous Windows et macOS).
Majora320
@ Majora320 Non, mais il existe une API shell qui la gère, et elles tendent à être spécifiques aux distributions Linux (c'est-à-dire que X est utilisé sur certaines distributions Linux, mais généralement pas sur Windows et Mac). Vous pouvez également utiliser glut / glfw / SDL / peu importe. L'important est d'adopter une approche de bas niveau afin que le PO puisse utiliser les implémentations pour en savoir plus sur les concepts sous-jacents (messages d'événement, utilisateur-pays vs os-pays, etc.). Les API portables / de niveau supérieur ont tendance à faire abstraction de nombreux éléments susceptibles d’entraver le processus d’apprentissage.
Pharap
@Dhannanjai Si je peux être aussi audacieux, je voudrais recommander un livre intitulé Operating Systems DeMYSTiFieD . Cela m'a beaucoup aidé dans mes années de collège au cours de l'unité de matériel. Il explique nombre des concepts importants des systèmes d'exploitation tels que POST, les techniques de planification de threads (alternances, files d'attente ordonnées, etc.) et les pilotes.
Pharap

Réponses:

54

"Programmation système" (ou "programmation système") a tendance à signifier une programmation réalisée à un niveau d'abstraction inférieur à celui d'une programmation de jeu (par exemple). La programmation de jeu consiste généralement à créer les mécanismes de jeu réels et les fonctionnalités frontales qu'un utilisateur peut voir, alors que la programmation système consiste davantage à créer les cadres sur lesquels travaillent les programmeurs de jeu.

Cela peut signifier des graphiques, le chargement et le streaming de ressources, l'audio, la gestion de la mémoire, les entrées / sorties de fichiers, les API d'abstraction de plate-forme, etc. Les détails varient un peu et, comme il n’existe pas de normes pour les intitulés de postes dans l’industrie du jeu vidéo, il n’existe pas non plus de normes pour les noms de domaines de programmation. Dans un studio, vous constaterez peut-être que "programmation système" désigne tout ce que j'ai énuméré ci-dessus. À un autre moment, vous constaterez peut-être qu'ils distinguent la "programmation graphique" en tant que domaine distinct et appellent toutes les autres tâches de programmation autres que le gameplay "programmation système". Dans un autre cas encore, ils pourraient ne pas utiliser le terme du tout et l'appeler simplement "programmation moteur".

Comme il s’agit d’un domaine de niveau inférieur et implique généralement une interface plus directe avec les API spécifiques à la plate-forme, quelle que soit la plate-forme pour laquelle le jeu est créé, il sera utile de connaître ces plates-formes, tout comme le fait de connaître le domaine plus général (par exemple, , des concepts de système d’exploitation sans tenir compte de la façon dont fonctionne le système d’exploitation spécifique, tels que la mémoire virtuelle, le fonctionnement des threads, le fonctionnement de la mise en mémoire tampon des E / S, etc.).

Josh
la source
2
En un mot, je dirais que la programmation non-système (le jeu actuel) sera essentiellement indépendante de la plate-forme (peu importe qu'il s'agisse de Mac / PC / Xbox), alors que la programmation système sera beaucoup plus spécifique à la plate-forme (dans l'ordre). fournir une couche indépendante de la plate-forme aux programmeurs non-systèmes).
TripeHound
22

La réponse de Josh est vraiment bonne, mais je me suis dit que je parlerais bien de l'équipe des systèmes où je travaille. Je ne travaille pas sur les systèmes mais je travaille souvent avec eux. Les responsabilités d'une équipe de systèmes varient beaucoup d'une entreprise à l'autre.

Notre équipe de systèmes est en charge de beaucoup de choses:

  • Bibliothèque mathématique
  • Bibliothèque de remplacement STD
  • Cadre de jeu de base
  • Cadre d'application de base
  • Contribution
  • Messagerie d'événement
  • Systèmes d'entité composant
  • Liaison de script
  • (et plus)

Il y a beaucoup de connaissances des domaines Windows et Linux ici, ainsi que de la physique, de la logique de jeu principale et de la gestion de la mémoire de bas niveau. Les équipes de systèmes seront généralement impliquées au moins en partie dans chaque système d'exploitation pris en charge, car la plupart de leurs projets reposent sur chaque système d'exploitation à un niveau assez bas.

Certaines choses pouvant appartenir à une équipe «Systèmes» que nous divisons en équipes distinctes (mais notre équipe Systèmes interagit toujours assez fortement):

  • La physique
  • Linux (serveur dédié)
  • Prise en charge directe d'autres systèmes d'exploitation (iOS / Mac / Consoles / etc.)
  • Construire des systèmes
  • l'audio
Essaim d'abeilles
la source
0

La programmation système est très bien définie, mais les entreprises essaient de l’étendre à leurs besoins. Si vous utilisez ou écrivez des appels système, vous effectuez une programmation système. Les appels système sont les fonctions fournies par le noyau ou les pilotes de l'espace utilisateur. Cela inclut OpenGL car il s’agit d’un pilote.

Cem Kalyoncu
la source
Je ne pense pas que les programmeurs graphiques (experts OpenGL) postuleraient à un poste de programmeur système ...
Vaillancourt
La programmation graphique et la programmation OpenGL sont deux choses différentes. L’un traite des algorithmes graphiques, l’autre des détails de l’API.
Cem Kalyoncu
0

Les avantages supplémentaires énumérés ci-dessus concernent principalement la programmation des moteurs de jeux lorsque cela est nécessaire, ce qui implique l'utilisation d'API de bas niveau. La programmation système attend ici que vous sachiez comment passer des appels vers le système d’audio audio, la gestion des processus, la manipulation de fichiers, les appels réseau, etc.

plusvitamines
la source
-6

Puisqu'ils font référence à Visual Studio, la programmation système fait référence à l'écriture de programmes spécifiquement pour les systèmes d'exploitation Windows, c'est-à-dire: appels système Windows (par exemple, il n'y a pas de chaîne fork-exec), comptes d'utilisateurs, où placer vos données spécifiques, modèles de partage de données Windows Recherchez, par exemple, comment vérifier l'utilisateur actuel dans Visual C ++ ou comment démarrer un nouveau processus

Concepts de système d'exploitation, référence à la planification, à l'abstraction de fichiers, aux threads, à l'espace utilisateur, etc. Le dev wiki et les forums peuvent être une bonne lecture

L’authentification de l’utilisateur se trouve par exemple dans les deux sections, car Windows est un système d’exploitation monoposte, qui intègre beaucoup plus profondément le noyau de la gestion des utilisateurs et de l’interface utilisateur.

Le msdn est la base de connaissances pour tout ce qui concerne la programmation Windows: apis, bibliothèques, etc. https://msdn.microsoft.com/

Stackoverflow pour le codage réel si vous êtes bloqué.

Git
la source
Windows n'est pas un système d'exploitation mono-utilisateur.
Maximus Minimus
Et la programmation système ne signifie pas écrire des programmes spécifiquement pour un système d'exploitation donné. Les pilotes, par exemple, peuvent être facilement multiplates-formes. Étant donné que les appels système Windows diffèrent d’une version à l’autre, ils sont généralement gérés via kernel32.dll et user32.dll au lieu de s’adresser directement au noyau.
Maciej Piechotka
@MaciejPiechotka Systemsprogramming programme à un niveau proche du système d'exploitation // matériel. La partie d’un pilote qui est multiplate-forme est l’API, pas l’encapsuleur syscall. Sous Linux, les appels système sont également emballés dans des bibliothèques, sinon vous ne pourriez pas modifier l’implémentation ci-dessous.Par exemple, obtenir le cpu temp via des registres est très différent d’un système à l’autre.
Git
@ LeComteduMerde-fou si vous ne regardez que la façon dont les utilisateurs sont gérés, c'est le cas. -> Touches de sécurité (ctrl + alt + suppr), l'interface graphique, etc. Unix // BSD gère les utilisateurs de manière complètement différente
Git
@gismo J'écris des pilotes pour vivre - il y a beaucoup plus de pilotes qui ne sont pas une partie spécifique à l'OS puis à l'API;) Mon point à propos des appels système était distinct de celui des pilotes à propos. Bien sûr, dans Linux, vous avez des bibliothèques, mais mon point est que Linux a une ABI pour les appels système, c'est-à-dire que les appels système, du moins en théorie, sont stables et documentés (et sont calqués sur POSIX). Pour Windows, l'interface utilisateur <-> du noyau n'est pas considérée comme stable entre les versions.
Maciej Piechotka