che cos'è esattamente la programmazione del sistema?


26

Non ho mai capito cosa significasse la programmazione del sistema. La solita definizione fornita è "... fare qualcosa di simile all'OS o estendere le funzionalità di Os ...".

L'uso diretto dell'API di Windows anziché di alcune librerie per dire che l'i / o sui file rende la programmazione del sistema? Scrivere la programmazione del sistema operativo Android? Se scrivo qualcosa che espone il kernel di Linux attraverso una console come un'app su Android, sto programmando il sistema? Se sto scrivendo un software per controllare una lavatrice, sto scrivendo la programmazione del sistema?

Sono un principiante nella programmazione e questo mi sta confondendo a non finire. Spiegare il contrasto con "programmazione dell'applicazione".


2
Questa definizione è cambiata e gli stessi programmatori di sistema non sembrano essere sicuri di una definizione unica oggi. Questo problema si presenta in genere quando le persone discutono se il linguaggio X sia conveniente per la programmazione del sistema ...
Denys Séguret,

@Denys Séguret - Ironico se nessuno può essere d'accordo su quale "programmazione del sistema" debba iniziare.
John,

Risposte:


19

Personalmente mi piace la definizione da Wikipedia :

La programmazione di sistema (o programmazione di sistemi) è l'attività del software di sistema di programmazione. La principale caratteristica distintiva della programmazione dei sistemi rispetto alla programmazione delle applicazioni è che la programmazione delle applicazioni mira a produrre software che fornisce servizi all'utente (ad es. Elaboratore di testi), mentre la programmazione dei sistemi mira a produrre software che fornisce servizi all'hardware del computer (ad esempio la deframmentazione del disco ). Richiede un maggior grado di consapevolezza dell'hardware.


12

Esistono diverse domande che puoi porre a te stesso per esercitarti nel decidere quella domanda.

  • Il sistema è stato originariamente venduto senza questo programma? Angry Birds potrebbe essere una "Killer App" per uno smartphone (il motivo per cui qualcuno lo acquista), ma è ancora un'app di terze parti separata scritta molto tempo dopo l'introduzione del telefono. Scrivere sarebbe stata una programmazione di applicazioni. Ma il driver dello schermo dello stesso smartphone è essenziale per usarlo, quindi sarebbe stata la programmazione dei sistemi.
  • Riesci a immaginare il porting del codice su un'altra piattaforma senza riscriverlo? TeX e troffsono stati portati praticamente su qualsiasi sistema con poche modifiche, quindi sono applicazioni, anche se si trovano nella parte inferiore della catena di strumenti che le persone utilizzano in genere. Il file system in cui TeX scrive il proprio output, ad esempio UFS o VFAT, è un caso limite. Si potrebbe porta un file system a un sistema operativo diverso se fosse semplicemente meraviglioso, ma di solito la gente basta prendere sulle idee impressionante e scrivere il proprio file system per il proprio sistema operativo. Ciò rende il software del file system.
  • La funzionalità è implementata nel kernel o in binari separati? (Anche qui i file system occupano una via di mezzo. Molte parti di molti file system sono in realtà codice del kernel, ma molte hanno parti sostanziali nello spazio utente.) I driver di visualizzazione grafica possono in linea di principio essere componenti esterni collegabili, ma sono spesso implementati nel kernel o almeno con accesso diretto privilegiato al kernel (o anche all'hardware). Sarebbe una programmazione di sistemi. D'altra parte, i giochi per computer che utilizzano lo stack di visualizzazione grafica sono applicazioni.

Per le tue domande, scrivere il sistema operativo Android era sicuramente una programmazione di sistemi. Scrivere un programma che utilizza le chiamate API di Windows è la programmazione dell'applicazione. Non è portatile come se si utilizzassero librerie multipiattaforma come SDL o OpenGL, ma in linea di principio può essere trasferito, è un codice di terze parti e viene eseguito nello spazio utente. Un'app console che espone lo stato del kernel Linux è un interessante esperimento mentale. Direi sicuramente che coinvolge la programmazione di sistemi, dal momento che dovresti sapere molto sulla struttura di Linux (nota che "Linux" è correttamente solo il kernel, non la distribuzione) per scrivere, e probabilmente anche per usarlo!


4

In breve: scrivere software che estende o migliora il funzionamento di un sistema operativo, come driver, aggiornamenti delle utilità di sistema ai sistemi operativi o persino nuovi sistemi operativi.

Coinvolge principalmente la gestione della memoria; Operazioni di I / O nel senso più ampio della parola come rete, accesso ai file e gestione dei dispositivi; gestione dei processi (multi tasking, amministrazione dei processi, ecc.); metodi di interazione del sistema <-> utente (sia dentro che fuori) e amministrazione utente. Fondamentalmente tutto ciò che fa parte del sistema operativo che non è un'applicazione è la programmazione dei sistemi.


3

L'uso diretto dell'API di Windows era, a un certo punto, un modo comune per scrivere applicazioni per Windows. Quindi no, non si tratta di programmazione di sistemi.

La programmazione dei sistemi non è solo "vicina al sistema operativo", è qualcosa di essenziale per il funzionamento principale del sistema informatico. Quindi scrivere un sistema operativo è una programmazione di sistemi. Scrivere driver video, driver di filesystem, driver di rete per quel SO è la programmazione di sistemi. Scrivere un compilatore per una particolare combinazione di linguaggio / chipset è la programmazione dei sistemi.


1

Normalmente, si riferisce a "cose ​​di basso livello che gli utenti finali non tecnici non sanno che esistono o non sanno molto chiaramente che stanno usando o che cosa fanno".

Alcuni esempi che sarebbero spesso considerati programmazione del sistema:

  • sistemi operativi e driver
  • compilatori
  • emulatori e virtualizzazione
  • creazione di distribuzione, ovvero creazione di immagini per l'utente.

    Ciò implica normalmente la selezione della libreria standard C, del sistema init e dei componenti base dell'utente come una shell.

Sistemi di programmazione è spesso fatto in linguaggi di livello inferiore compilati senza garbage collection automatica come C o il montaggio, e tendono ad accesso meno sistema comune chiama spesso attraverso interfacce POSIX C .

Sto tenendo un tutorial pratico che copre diversi argomenti di programmazione del sistema qui .


0

Quando lo definisco, mi distacco completamente da tutti i dettagli tecnici. Quindi diventa facile.

Un'applicazione consente all'utente di fare qualcosa di utile con un po 'di tecnologia. Quindi la programmazione dell'applicazione è mirata a fornire funzionalità a un utente, direttamente.

La programmazione del sistema, d'altra parte, getterebbe le basi per rendere possibile la programmazione dell'applicazione. Fornisce funzionalità al programmatore dell'applicazione anziché all'utente.

Questa definizione sarà valida, ma è una questione di prospettiva, contesto e ruoli. Per un programmatore di computer, gli strumenti di programmazione sono applicazioni. Per un utente finale sono insignificanti, appena fuori dalla scena.


-3

In breve, la programmazione del sistema rispetto alla programmazione dell'applicazione è che SP gestisce il software del sistema operativo per lavorare con risorse hardware e AP gestisce l'attività degli utenti finali.


4
questo non sembra offrire nulla di sostanziale rispetto ai punti formulati e spiegati nelle precedenti 4 risposte
moscerino del
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.