Was genau ist Systemprogrammierung?

Ich habe nie verstanden, was Systemprogrammierung bedeutet. Die übliche Definition lautet „… etwas in der Nähe der Os tun oder Os-Funktionen erweitern …“.

Verwendet die direkte Verwendung der Windows-API anstelle einiger Bibliotheken, um zu sagen, ob Datei-E / A die Systemprogrammierung? Hat das Programmieren des Android-Betriebssystems geschrieben? Wenn ich etwas schreibe, das den Linux-Kernel über eine Konsole wie eine App auf Android verfügbar macht, mache ich dann Systemprogrammierung? Wenn ich Software zur Steuerung einer Waschmaschine schreibe, schreibe ich dann Systemprogrammierung?

Ich bin ein Anfänger in der Programmierung und das verwirrt mich bis zum Äußersten. Bitte erläutern Sie den Kontrast zu „Anwendungsprogrammierung“.

Kommentare

  • Diese Definition hat sich geändert und Systemprogrammierer selbst verwenden nicht ‚ scheint sich heute einer eindeutigen Definition nicht sicher zu sein. Dieses Problem tritt normalerweise auf, wenn Leute darüber debattieren, ob Sprache X für die Systemprogrammierung geeignet ist …
  • @Denys S é guret – Ironisch, wenn sich niemand einigen kann Was “ Systemprogrammierung “ ist, um damit zu beginnen.
  • Zitat aus Perl Cookbook – Kapitel 16. Prozessmanagement und Kommunikation: “ In diesem Kapitel werden Befehle gestartet und separate Prozesse miteinander verbunden. Es geht darum, ihre Erstellung, Kommunikation und ihren endgültigen Niedergang zu verwalten. Es geht um Systemprogrammierung. “

Antwort

Ich persönlich wie die Definition aus Wikipedia :

Systemprogrammierung (oder Systemprogrammierung) ist die Aktivität der Programmiersystemsoftware. Das Hauptunterscheidungsmerkmal der Systemprogrammierung im Vergleich zur Anwendungsprogrammierung besteht darin, dass die Anwendungsprogrammierung darauf abzielt, Software zu erzeugen, die Dienste für den Benutzer bereitstellt (z. B. Textverarbeitung), während die Systemprogrammierung darauf abzielt, Software zu erzeugen, die Dienste für die Computerhardware bereitstellt (z. B. Defragmentierer) ). Es erfordert ein höheres Maß an Hardware-Kenntnis.

Antwort

Es gibt Mehrere Fragen, die Sie sich stellen können, um die Entscheidung zu üben.

  • Wurde das System ursprünglich ohne dieses Programm verkauft? Angry Birds ist möglicherweise eine „Killer-App“ für ein Smartphone (der Grund, warum jemand es kauft), aber es ist immer noch eine separate Drittanbieter-App, die lange nach Einführung des Telefons geschrieben wurde. Das Schreiben wäre das Programmieren von Anwendungen gewesen. Der Bildschirmtreiber desselben Smartphones ist jedoch für die Verwendung des Smartphones von entscheidender Bedeutung. Es wäre also eine Systemprogrammierung gewesen.
  • Können Sie sich vorstellen, den Code auf eine andere Plattform zu portieren, ohne ihn weitgehend neu zu schreiben? TeX und troff wurden mit wenigen Änderungen auf praktisch jedes System portiert, sodass es sich um Anwendungen handelt, obwohl sie sich am Ende der Werkzeugkette befinden, die normalerweise verwendet wird. Das Dateisystem, in das TeX seine Ausgabe schreibt, z. UFS oder VFAT ist ein Grenzfall. Sie könnten ein Dateisystem auf ein anderes Betriebssystem portieren, wenn es absolut fantastisch wäre, aber normalerweise übernehmen die Leute einfach großartige Ideen und schreiben ihr eigenes Dateisystem für ihr eigenes Betriebssystem. Das macht Dateisystem-Systemsoftware.
  • Ist die Funktionalität im Kernel oder in separaten Binärdateien implementiert? (Dateisysteme nehmen auch hier einen Mittelweg ein. Viele Teile vieler Dateisysteme sind tatsächlich Kernel-Code, aber viele haben wesentliche Teile im Benutzerraum.) Grafikdisplay-Treiber können im Prinzip steckbare externe Komponenten sein, werden jedoch häufig implementiert im Kernel oder zumindest mit privilegiertem direkten Zugriff auf den Kernel (oder sogar auf die Hardware). Das wäre Systemprogrammierung. Auf der anderen Seite sind Computerspiele, die den Grafikdisplay-Stack verwenden, Anwendungen.

Für Ihre Fragen war das Schreiben des Android-Betriebssystems definitiv Systemprogrammierung. Das Schreiben eines Programms, das Windows-API-Aufrufe verwendet, ist Anwendungsprogrammierung. Es ist nicht so portabel, als ob Sie plattformübergreifende Bibliotheken wie SDL oder OpenGL verwenden würden, aber es kann im Prinzip portiert werden, es ist Code von Drittanbietern und es wird im Benutzerbereich ausgeführt. Eine Konsolen-App, die den Status des Linux-Kernels verfügbar macht, ist ein interessantes Gedankenexperiment. Ich würde definitiv sagen, dass es sich um Systemprogrammierung handelt, da Sie „viel über die Struktur von Linux wissen müssen (beachten Sie, dass“ Linux „eigentlich nur der Kernel ist, nicht die Distribution), um es zu schreiben und wahrscheinlich sogar zu verwenden!

Antwort

Kurz gesagt: Schreiben von Software, die die Funktionsweise eines Betriebssystems erweitert oder verbessert, z. B. Treiber, Systemdienstprogramm-Updates auf das Betriebssystem “ es oder sogar brandneue Betriebssysteme.

Es handelt sich hauptsächlich um die Speicherverwaltung. E / A-Vorgänge im weitesten Sinne des Wortes wie Netzwerk, Dateizugriff und Geräteverwaltung; Prozessmanagement (Multitasking, Prozessadministration usw.); Benutzer <> -> Systeminteraktionsmethoden (sowohl rein als auch raus) und Benutzerverwaltung. Grundsätzlich ist alles, was Teil des Betriebssystems ist, das keine Anwendung ist, Systemprogrammierung.

Antwort

Verwenden Sie die Windows-API direkt war zu einem bestimmten Zeitpunkt eine übliche Methode zum Schreiben von Anwendungen für Windows. Nein, das ist keine Systemprogrammierung.

Die Systemprogrammierung ist nicht nur „nah am Betriebssystem“ – sie ist etwas Wesentliches Das Schreiben eines Betriebssystems ist also Systemprogrammierung. Das Schreiben von Videotreibern, Dateisystemtreibern und Netzwerktreibern für dieses Betriebssystem ist Systemprogrammierung. Das Schreiben eines Compilers für eine bestimmte Kombination aus Sprache / Chipsatz ist Systemprogrammierung.

Antwort

Normalerweise bezieht es sich auf „Low-Level-Inhalte, von denen nicht-technische Endbenutzer nicht wissen, dass sie existieren oder nicht wissen.“ sehr deutlich, dass sie verwenden oder was sie tun „.

Einige Beispiele, die häufig als Systemprogrammierung angesehen werden:

  • Betriebssysteme und Treiber
  • Compiler
  • Emulatoren an d Virtualisierung
  • Verteilungserstellung, dh Erstellung von Userland-Images.

    Dies beinhaltet normalerweise normalerweise die Auswahl der C-Standardbibliothek, des Init-Systems und grundlegender Userland-Komponenten wie eine Shell.

Die Systemprogrammierung erfolgt häufig in Sprachen auf niedrigerer kompilierter Ebene ohne automatische Speicherbereinigung wie C oder Assembly und greift häufig über POSIX C-Schnittstellen .

Ich pflege ein praktisches Tutorial, das verschiedene Systemprogrammierungsthemen abdeckt. hier .

Antwort

Bei der Definition würde ich mich von allen technischen Details fernhalten. Dann wird es einfach.

Eine Anwendung ermöglicht es einem Benutzer, mit einer Technologie etwas Nützliches zu tun. Die Anwendungsprogrammierung zielt also darauf ab, einem Benutzer Funktionen direkt bereitzustellen.

Die Systemprogrammierung würde andererseits die Grundlage für die Ermöglichung der Anwendungsprogrammierung bilden. Es bietet Funktionen eher für den Anwendungsprogrammierer als für den Benutzer.

Diese Definition gilt, ist jedoch eine Frage der Perspektive, des Kontexts und der Rollen. Für einen Computerprogrammierer sind Programmierwerkzeuge Anwendungen. Für einen Endbenutzer sind sie bedeutungslos, nur aus dem Bilde.

Antwort

Kurz gesagt, die Systemprogrammierung im Vergleich zu Bei der Anwendungsprogrammierung übernimmt der SP die Betriebssystemsoftware für die Arbeit mit Hardwareressourcen und der AP die Endbenutzeraktivität.

Kommentare

  • Dies ist nicht ‚ scheint nichts Wesentliches über Punkte zu bieten, die in den vorherigen 4 Antworten gemacht und erklärt wurden

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.