Cosa si intende per "Programmazione del sistema"?


33

Mi sto preparando per uno stage come programmatore di giochi presso un'azienda di sviluppo di giochi di fama mondiale. Quando ho cercato nel loro sito Web i prerequisiti necessari, mi ha mostrato questo:

Vantaggio aggiunto

  • Conoscenza di DirectX / OpenGL.
  • Forte padronanza della matematica e della fisica 3D.
  • IDE di Visual Studio per lo sviluppo di C ++.
  • Programmazione del sistema e concetti del sistema operativo.

Cosa significano esattamente con la programmazione del sistema e i concetti del sistema operativo?

Dovrei studiare la programmazione di Windows? O dovrei andare con la programmazione Linux (nel senso che vogliono che conosca i concetti importanti). O è qualcosa di completamente diverso?


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Josh

"Dovrei studiare la programmazione di Windows? O dovrei andare con la programmazione di Linux" Entrambi dove possibile. Almeno leggi le loro API, forse prova a fare una semplice 'apri una finestra' con le rispettive API del sistema operativo in modo da imparare quanto sono diverse e quale sforzo può essere.
Pharap,

@Pharap Tecnicamente, non esiste alcuna "API del sistema operativo" Linux in grado di aprire una finestra, ed è meglio usare glut, glfw o simili per aprire una finestra in modo che funzioni sia con X che Wayland (e Windows e macOS).
Majora320,

@ Majora320 No, ma esiste un'API shell che la gestisce e tendono ad essere specifiche per le distribuzioni Linux (ovvero X viene utilizzato su alcune distribuzioni Linux, ma in genere non su Windows e Mac). Potresti anche usare glut / glfw / SDL / qualunque cosa, il punto importante è adottare un approccio di basso livello in modo che l'OP possa usare le implementazioni per conoscere i concetti sottostanti (messaggi di evento, user-land vs os-land ecc). Le API portatili / di livello superiore tendono a sottrarre molte cose che potrebbero ostacolare il processo di apprendimento.
Pharap,

@Dhannanjai Se potessi essere così audace, vorrei raccomandare un libro intitolato Sistemi operativi DeMYSTiFieD . Mi ha aiutato molto negli anni del college durante l'unità hardware. Spiega molti dei concetti importanti di sistemi operativi come POST, tecniche di pianificazione dei thread (round-robin, code ordinate ecc.) E driver.
Pharap,

Risposte:


54

"Programmazione di sistema" (o "programmazione di sistemi") tende a significare una programmazione effettuata a un livello di astrazione inferiore rispetto alla (ad esempio) programmazione di gioco. La programmazione del gameplay di solito riguarda la costruzione delle meccaniche di gioco effettive e le funzionalità frontali che un utente potrebbe vedere, mentre la programmazione dei sistemi riguarda più la costruzione dei framework su cui lavorano i programmatori di gameplay.

Ciò può significare grafica, caricamento e streaming delle risorse, audio, gestione della memoria, file IO, API di astrazione della piattaforma, ecc. I dettagli variano un po ', e poiché non esistono standard per titoli di lavoro nel settore dei giochi, allo stesso modo non esistono standard per i nomi dei domini di programmazione. In uno studio, potresti scoprire che "programmazione di sistemi" significa tutto ciò che ho elencato sopra. In un altro caso, potresti scoprire che distinguono la "programmazione grafica" come dominio separato e chiamano ogni altra attività di programmazione non di gioco "programmazione di sistemi". In un altro ancora, potrebbero non usare affatto il termine e chiamarlo semplicemente "programmazione del motore".

Poiché si tratta di un dominio di livello inferiore e in genere implica l'interfacciamento più diretto con le API specifiche della piattaforma per qualsiasi piattaforma per la quale il gioco è stato creato, conoscere le piattaforme sarà utile, così come avere una conoscenza del dominio più generale (ad es. , dei concetti del sistema operativo indipendentemente da come funzionano i sistemi operativi specifici, come ad esempio cos'è la memoria virtuale, o come funzionano i thread, come funziona il buffering IO, eccetera).


2
In breve, direi che la programmazione non di sistema (il gioco reale) sarà per lo più indipendente dalla piattaforma (non importa se si tratta di Mac / PC / Xbox), mentre la programmazione di sistemi sarà molto più specifica per piattaforma (in ordine fornire il livello indipendente dalla piattaforma per i programmatori non di sistema).
TripeHound,

22

La risposta di Josh è davvero buona, ma ho pensato di buttare giù alcuni punti elenco sul team di Systems in cui lavoro. Non lavoro sui sistemi ma lavoro molto con loro. Le responsabilità di un team di sistemi variano molto da una società all'altra.

Il nostro team di sistemi è responsabile di molte cose:

  • Biblioteca di matematica
  • Libreria di sostituzione STD
  • Core Game Framework
  • Core Application Framework
  • Ingresso
  • Messaggistica eventi
  • Sistemi a componenti
  • Rilegatura di script
  • (e altro)

C'è molta conoscenza del dominio Windows e Linux qui così come molta conoscenza della fisica, della logica di gioco principale e della gestione della memoria a basso livello. I team di sistemi di solito saranno coinvolti almeno in una parte in ciascun sistema operativo supportato poiché la maggior parte dei loro progetti si trova su ciascun sistema operativo a un livello piuttosto basso.

Alcune cose che potrebbero rientrare in un team di "Sistemi" che dividiamo in team separati (ma il nostro team di Sistemi interagisce ancora abbastanza pesantemente):

  • Fisica
  • Linux (server dedicato)
  • Supporto diretto per altri sistemi operativi (iOS / Mac / Console / ecc.)
  • Costruisci sistemi
  • Audio

0

La programmazione dei sistemi è molto ben definita, ma le aziende cercano di estenderla alle loro esigenze. Se stai usando o scrivendo chiamate di sistema, stai facendo la programmazione dei sistemi. Le chiamate di sistema sono le funzioni fornite dal kernel o dai driver userspace. Ciò include OpenGL in quanto è fondamentalmente un driver.


Non penso che i programmatori grafici (esperti OpenGL) si applicherebbero a un lavoro del programmatore di sistema ...
Vaillancourt

La programmazione grafica e la programmazione OpenGL sono due cose diverse. Uno riguarda gli algoritmi di computer grafica, l'altro riguarda i dettagli dell'API.
Cem Kalyoncu,

0

I vantaggi aggiunti sopra elencati sono principalmente per la programmazione del motore di gioco quando necessario, quindi comporta l'utilizzo di API di basso livello. La programmazione dei sistemi qui si aspetta che tu sappia come effettuare chiamate all'audio del sistema operativo, gestione dei processi, manipolazione dei file, chiamate di rete e così via ...


-6

Poiché fanno riferimento a Visual Studio, la programmazione del sistema si riferisce alla scrittura di programmi specifici per i sistemi operativi Windows, il che significa: windows syscalls (ad esempio non esiste una catena fork-exec), account utente, dove inserire i dati specifici dell'utente, modelli di condivisione dei dati in Windows cerca, ad esempio come è possibile verificare l'utente corrente in Visual c ++ o come avviare un nuovo processo

Concetti relativi al sistema operativo, fare riferimento a pianificazione, astrazione di file, thread, spazio utenti ecc. Os wiki wiki e forum possono essere una buona lettura

L'autenticazione utente è ad esempio in entrambe le sezioni, poiché windows è un sistema operativo per singolo utente, che ha un'integrazione del kernel molto più profonda della gestione utente e dell'interfaccia utente.

Il msdn è la base di conoscenza per tutte le cose che programmano API, librerie, ecc. Di Windows https://msdn.microsoft.com/

Stackoverflow per la codifica effettiva se si è bloccati.


Windows non è un sistema operativo per singolo utente.
Massimo minimo

E la programmazione del sistema non significa scrivere programmi specificamente per un determinato sistema operativo. I driver, ad esempio, possono essere facilmente multipiattaforma. Poiché le scale di sistema effettive di Windows differiscono da una versione all'altra, di solito viene gestita tramite kernel32.dll e user32.dll invece di parlare direttamente con il kernel.
Maciej Piechotka,

@MaciejPiechotka La programmazione di sistemi sta programmando su un livello vicino al sistema operativo // hardware. La parte di un driver multipiattaforma è l'API, non il wrapper syscall. In Linux, le librerie di sistema sono anche racchiuse nelle librerie, altrimenti non è possibile modificare l'implementazione sottostante. Ad esempio, ottenere la temperatura della CPU tramite i registri è molto diverso tra le dosi.
Git

@ LeComteduMerde-fou se guardi solo come vengono gestiti gli utenti, lo è. -> Chiavi di sicurezza (ctrl + alt + cancella), la GUI, ecc. Unix // BSD gestisce gli utenti completamente diversi
Git

@gismo Scrivo i driver per vivere - c'è molto di più nel driver che non è una parte specifica del sistema operativo quindi API;) Il mio punto su syscalls era separato rispetto a quello dei driver. Ovviamente in Linux hai librerie ma il mio punto è che Linux ha un ABI per i syscalls - cioè i syscalls, almeno in teoria, sono stabili e documentati (e strettamente modellati su POSIX). Per Windows l'interfaccia del kernel <-> spazio utente non è considerata stabile tra le versioni.
Maciej Piechotka
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.