Was genau ist Systemprogrammierung?


26

Ich habe nie verstanden, was Systemprogrammierung bedeutet. Die übliche Definition lautet "... etwas in der Nähe des Betriebssystems tun oder die Betriebssystemfunktionen erweitern ...".

Wird die Windows-API direkt verwendet, anstatt dass einige Bibliotheken sagen, dass die Datei für die Systemprogrammierung erforderlich ist? Schreiben Sie eine Android OS-Systemprogrammierung? 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 zur "Anwendungsprogrammierung".


2
Diese Definition hat sich geändert, und Systemprogrammierer scheinen sich einer eindeutigen Definition heute 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

@Denys Séguret - Ironisch, wenn sich niemand einigen kann, mit was "Systemprogrammierung" zu beginnen ist.
John

Antworten:


19

Mir persönlich gefällt die Definition von Wikipedia :

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


12

Es gibt mehrere Fragen, die Sie sich stellen können, um die Entscheidung für diese Frage zu üben.

  • Wurde das System ursprünglich ohne dieses Programm verkauft? Angry Birds ist zwar eine "Killer-App" für ein Smartphone (der Grund, warum jemand sie kauft), es handelt sich jedoch immer noch um eine separate Drittanbieter-App, die lange nach der Einführung des Telefons geschrieben wurde. Es zu schreiben, wäre Anwendungsprogrammierung gewesen. Der Bildschirmtreiber desselben Smartphones ist jedoch für die Verwendung unbedingt erforderlich, daher wäre es eine Systemprogrammierung gewesen.
  • Können Sie sich vorstellen, den Code auf eine andere Plattform zu portieren, ohne ihn größtenteils neu zu schreiben? TeX und troffwurden mit wenigen Änderungen auf praktisch jedes System portiert, sodass es sich um Anwendungen handelt, auch wenn sie sich am unteren Rand der normalerweise verwendeten Toolkette befinden. Das Dateisystem, in das TeX seine Ausgabe schreibt, z. B. UFS oder VFAT, ist ein Grenzfall. Sie könnten ein Dateisystem auf ein anderes Betriebssystem portieren, wenn es großartig wäre, aber normalerweise übernehmen die Leute einfach großartige Ideen und schreiben ihr eigenes Dateisystem für ihr eigenes Betriebssystem. Das macht Dateisystem-System-Software.
  • Ist die Funktionalität im Kernel oder in separaten Binärdateien implementiert? (Dateisysteme nehmen auch hier einen Mittelweg ein. Viele Teile vieler Dateisysteme sind in der Tat Kernel-Code, aber viele haben wesentliche Teile im Benutzerbereich.) Grafiktreiber können im Prinzip steckbare externe Komponenten sein, werden aber häufig implementiert im Kernel oder zumindest mit privilegiertem direktem Zugriff auf den Kernel (oder sogar auf die Hardware). Das wäre Systemprogrammierung. Andererseits sind Computerspiele, die den Grafikanzeigestapel verwenden, Anwendungen.

Auf Ihre Fragen hin war das Schreiben des Android-Betriebssystems definitiv eine 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 anzeigt, ist ein interessantes Gedankenexperiment. Ich würde definitiv sagen, dass es sich um eine Systemprogrammierung handelt, da man viel über die Struktur von Linux wissen muss (beachten Sie, dass "Linux" eigentlich nur der Kernel ist, nicht die Distribution), um es zu schreiben und wahrscheinlich sogar zu verwenden!


4

Kurz gesagt: Schreiben von Software, die die Funktionsweise eines Betriebssystems erweitert oder verbessert, z. B. Treiber, Systemdienstprogrammupdates für Betriebssysteme oder sogar brandneue Betriebssysteme.

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


3

Die direkte Verwendung der Windows-API war früher eine gängige Methode zum Schreiben von Anwendungen für Windows. Also nein, das ist keine Systemprogrammierung.

Die Systemprogrammierung ist nicht nur "nah am Betriebssystem" - sie ist für die Kernfunktion des Computersystems von wesentlicher Bedeutung. Das Schreiben eines Betriebssystems ist also Systemprogrammierung. Das Schreiben von Grafiktreibern, Dateisystemtreibern und Netzwerktreibern für dieses Betriebssystem ist Systemprogrammierung. Das Schreiben eines Compilers für eine bestimmte Kombination von Sprache / Chipsatz ist Systemprogrammierung.


1

Normalerweise bezieht es sich auf "Low-Level-Inhalte, von denen nicht-technische Endbenutzer nichts wissen oder die nicht genau wissen, was sie verwenden oder was sie tun".

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

  • Betriebssysteme und Treiber
  • Compiler
  • Emulatoren und Virtualisierung
  • Erstellung von Distributionen, dh Erstellung von Userland-Images.

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

Die Systemprogrammierung erfolgt häufig in Sprachen mit niedrigerer Kompilierungsebene ohne automatische Garbage-Collection wie C oder Assembly. Der Zugriff auf seltenere Systemaufrufe erfolgt häufig über POSIX-C-Schnittstellen .

Ich bin eine praktische Anleitung beibehalten , die Programmierung mehrerer System Themen behandelt hier .


0

Wenn ich das definiere, würde ich mich von allen technischen Details fernhalten. Dann wird es einfach.

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

Andererseits würde die Systemprogrammierung die Grundlage für die Ermöglichung der Anwendungsprogrammierung bilden. Es bietet Funktionen für den Anwendungsprogrammierer und nicht für den Benutzer.

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


-3

Kurz gesagt: Die Systemprogrammierung im Vergleich zur Anwendungsprogrammierung besteht darin, dass der SP die Betriebssystemsoftware für die Arbeit mit Hardwareressourcen und der Zugriffspunkt für die Endbenutzeraktivität verwaltet.


4
dies scheint nicht zu bieten alles wesentliche über gemacht Punkte und erläuterte vor 4 Antworten
gnat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.