Systemprogrammierung ist die Programmierung von Computersystemsoftware [ 1 ] . Das Hauptunterscheidungsmerkmal der Systemprogrammierung im Vergleich zur Anwendungsprogrammierung besteht darin , dass die Anwendungsprogrammierung Software entwickelt, die dem Benutzer direkt Dienste bereitstellt (z. B. Textverarbeitungsprogramme ), während die Systemprogrammierung Software und Softwareplattformen entwickelt , die anderen Softwarediensten bereitstellen, leistungsbeschränkt sind oder beides (z. B. Betriebssysteme , Anwendungen der Computerwissenschaften , Game-Engines , industrielle Automatisierung und Software-as-a-Service- Anwendungen). [ 1 ]
Die Systemprogrammierung erfordert ein hohes Maß an Hardwarekenntnissen. Ihr Ziel ist die effiziente Nutzung der verfügbaren Ressourcen, entweder weil die Software selbst leistungskritisch ist oder weil selbst kleine Effizienzverbesserungen direkt zu erheblichen Zeit- oder Kosteneinsparungen führen.
Überblick
Die folgenden Eigenschaften kennzeichnen die Systemprogrammierung:
- Der Programmierer kann Annahmen über die Hardware und andere Eigenschaften des Systems treffen, auf dem das Programm ausgeführt wird, und wird diese Eigenschaften oft ausnutzen, beispielsweise durch die Verwendung eines Algorithmus , von dem bekannt ist, dass er bei Verwendung mit bestimmter Hardware effizient ist.
- Üblicherweise wird eine Low-Level-Programmiersprache oder ein Programmiersprachendialekt verwendet, damit:
- Programme können in ressourcenbeschränkten Umgebungen ausgeführt werden.
- Programme können effizient sein und nur geringen Laufzeitaufwand haben, indem sie entweder eine kleine Laufzeitbibliothek oder gar keine verwenden.
- Programme können die Speicherzugriffe und den Kontrollfluss direkt und „roh“ steuern.
- Der Programmierer kann Teile des Programms direkt in Assemblersprache schreiben.
- Systemprogramme lassen sich oft nicht im Debugger ausführen . Die Ausführung des Programms in einer simulierten Umgebung kann dieses Problem manchmal verringern.
In der Systemprogrammierung stehen oft nur eingeschränkte Programmiermöglichkeiten zur Verfügung. Automatische Speicherbereinigung ist unüblich, und das Debuggen gestaltet sich mitunter schwierig. Die Laufzeitbibliothek ist, sofern überhaupt vorhanden, meist deutlich weniger leistungsfähig und führt weniger Fehlerprüfungen durch. Aufgrund dieser Einschränkungen werden häufig Überwachung und Protokollierung eingesetzt; Betriebssysteme verfügen mitunter über äußerst komplexe Protokollierungssubsysteme.
Die Implementierung bestimmter Komponenten in Betriebssystemen und Netzwerken erfordert Systemprogrammierung, beispielsweise die Implementierung von Paging ( virtueller Speicher ) oder eines Gerätetreibers für ein Betriebssystem.
Geschichte
Ursprünglich programmierten Systemprogrammierer ausnahmslos in Assemblersprache . Experimente mit Hardwareunterstützung in höheren Programmiersprachen Ende der 1960er-Jahre führten zu Sprachen wie PL/S , BLISS , BCPL und dem erweiterten ALGOL für Burroughs Large Systems . Auch Forth findet Anwendung als Systemprogrammiersprache. In den 1970er-Jahren verbreitete sich C , begünstigt durch das Wachstum von Unix . In jüngerer Zeit findet eine Teilmenge von C++ namens Embedded C++ Verwendung, beispielsweise in den I/O-Kit-Treibern von macOS . [ 2 ] Ingenieure bei Google entwickelten 2007 Go , um die Produktivität von Entwicklern in großen verteilten Systemen zu steigern . Go bietet entwicklerorientierte Funktionen wie Parallelverarbeitung , automatische Speicherbereinigung (Garbage Collection ) und eine schnellere Programmkompilierung als C und C++. [ 3 ] 2015 erschien Rust , eine universelle Programmiersprache, die häufig in der Systemprogrammierung eingesetzt wird. Rust wurde mit Blick auf Speichersicherheit und Leistungsfähigkeit im Vergleich zu C und C++ entwickelt.
Alternative Bedeutung
Aus historischen Gründen verwenden manche Organisationen den Begriff „Systemprogrammierer“ für eine Funktion, die korrekterweise als „Systemadministrator“ bezeichnet werden sollte . Dies gilt insbesondere für Organisationen, deren Computerressourcen traditionell von Großrechnern dominiert werden , obwohl der Begriff auch für Funktionen verwendet wird, die keine Großrechner betreffen. Diese Verwendung entstand, weil die Administration von IBM-Großrechnern häufig das Schreiben von kundenspezifischem Assembler-Code ( IBM Basic Assembly Language , BAL) erforderte, der in das Betriebssystem wie OS/MVS , DOS/VSE oder VM/CMS integriert wurde . Tatsächlich enthielten einige IBM -Softwareprodukte erhebliche Codebeiträge von Kundenprogrammierern. Diese Art der Programmierung ist zunehmend seltener und wird vermehrt in C statt in Assembler durchgeführt, aber der Begriff „ Systemprogrammierer“ wird immer noch als faktische Berufsbezeichnung für Mitarbeiter verwendet, die IBM-Großrechner administrieren, selbst wenn sie nicht regelmäßig Systemprogrammiertätigkeiten ausführen.
Siehe auch
Referenzen
- ^ a b „Panel: Systems Programming in 2014 and Beyond“ . Microsoft . Abgerufen am 4. Dezember 2015 .
- ^ Apple Inc. (14. August 2009). „Richtlinien für das Design von I/O-Kit-Gerätetreibern“ . developer.apple.com . Apple Inc. Abgerufen am 16. September 2014 .
- ^ „Go bei Google: Sprachdesign im Dienste der Softwareentwicklung – Die Programmiersprache Go“ . go.dev . Abgerufen am 11.04.2024 .