wat is systeemprogrammering precies?

Ik heb nooit begrepen wat systeemprogrammering betekende. De gebruikelijke definitie die wordt gegeven is “… iets doen dat dicht bij de Os staat of Os-functies uitbreiden …”.

Wordt de Windows API rechtstreeks gebruikt in plaats van sommige bibliotheken om te zeggen: maakt bestand i / o systeemprogrammering? Was het schrijven van Android OS-systeemprogrammering? Als ik iets schrijf dat de linux-kernel blootstelt via een console-achtige app op Android, doe ik dan systeemprogrammering? Als ik software schrijf om een wasmachine te bedienen, schrijf ik dan systeemprogrammering?

Ik ben een beginner in programmeren en dit verwart me enorm. Leg uit of u het contrasteert met “applicatieprogrammering”.

Opmerkingen

  • Deze definitie is gewijzigd en systeemprogrammeurs zelf doen ‘ t lijken vandaag de dag zeker te zijn van een unieke definitie. Dit probleem doet zich meestal voor wanneer mensen debatteren over de vraag of taal X geschikt is voor systeemprogrammering …
  • @Denys S é guret – Ironisch als niemand het eens kan worden over wat ” systeemprogrammering ” is om mee te beginnen.
  • Citaat uit Perl Cookbook – Hoofdstuk 16. Procesbeheer en Communicatie: ” Dit hoofdstuk gaat over het starten van commandos en het met elkaar verbinden van afzonderlijke processen. Het gaat over het beheren van hun creatie, communicatie en uiteindelijke ondergang. Het gaat over systeemprogrammering. ”

Antwoord

Ik persoonlijk zoals de definitie van Wikipedia :

Systeemprogrammering (of systeemprogrammering) is de activiteit van programmeersysteemsoftware. Het belangrijkste onderscheidende kenmerk van systeemprogrammering in vergelijking met applicatieprogrammering is dat applicatieprogrammering gericht is op het produceren van software die diensten levert aan de gebruiker (bijv. Tekstverwerker), terwijl systeemprogrammering erop gericht is software te produceren die diensten levert aan de computerhardware (bijv. Schijfdefragmentatie). ). Het vereist een grotere mate van hardware-bewustzijn.

Antwoord

Er zijn verschillende vragen die u uzelf kunt stellen om te oefenen bij het bepalen van die vraag.

  • Werd het systeem oorspronkelijk zonder dit programma verkocht? Angry Birds mag dan een “Killer App” zijn voor een smartphone (de reden waarom iemand hem koopt), maar het is nog steeds een aparte app van derden die is geschreven lang nadat de telefoon werd geïntroduceerd. Het schrijven ervan zou het programmeren van applicaties zijn geweest. Maar het beeldschermstuurprogramma van dezelfde smartphone is essentieel om het überhaupt te gebruiken, dus het zou systeemprogrammering zijn geweest.
  • Kunt u zich voorstellen dat u de code naar een ander platform porteert zonder deze grotendeels te herschrijven? TeX en troff zijn overgezet naar vrijwel elk systeem met weinig wijzigingen, dus het zijn applicaties, ook al bevinden ze zich onderaan de gereedschapsketen die mensen doorgaans gebruiken. Het bestandssysteem waarnaar TeX zijn uitvoer schrijft, bijv. UFS of VFAT, is een grensgeval. Je zou een bestandssysteem kunnen porten naar een ander besturingssysteem als het helemaal geweldig was, maar meestal nemen mensen gewoon geweldige ideeën over en schrijven ze hun eigen bestandssysteem voor hun eigen besturingssysteem. Dat maakt bestandssystemen systeemsoftware.
  • Is de functionaliteit geïmplementeerd in de kernel of in afzonderlijke binaire bestanden? (Bestandssystemen nemen hier ook een middenweg in. Veel delen van veel bestandssystemen zijn in feite kernelcode, maar veel hebben substantiële delen in de gebruikersruimte.) Grafische beeldschermstuurprogrammas kunnen in principe inplugbare externe componenten zijn, maar ze worden vaak geïmplementeerd in de kernel of op zijn minst met geprivilegieerde directe toegang tot de kernel (of zelfs tot de hardware). Dat zou systeemprogrammering zijn. Aan de andere kant zijn computerspellen die de grafische weergavestapel gebruiken, applicaties.

Op uw vragen was het schrijven van het Android-besturingssysteem beslist systeemprogrammering. Het schrijven van een programma dat gebruikmaakt van Windows API-aanroepen is applicatieprogrammering. Het is niet zo draagbaar als wanneer u platformonafhankelijke bibliotheken zoals SDL of OpenGL zou gebruiken, maar het kan in principe worden geport, het is code van derden en het werkt in de gebruikersruimte. Een console-app die de toestand van de Linux-kernel blootlegt, is een interessant gedachte-experiment. Ik zou zeker zeggen dat het systeemprogrammering inhoudt, aangezien je “veel zou moeten weten over de structuur van Linux (merk op dat” Linux “eigenlijk alleen de kernel is, niet de distributie) om te schrijven, en waarschijnlijk zelfs om het te gebruiken!

Answer

In het kort: software schrijven die de werking van een besturingssysteem uitbreidt of verbetert, zoals stuurprogrammas, updates van systeemhulpprogrammas voor OS ” es of zelfs gloednieuwe besturingssystemen.

Het betreft meestal het geheugenbeheer; I / O-bewerkingen in de breedste zin van het woord, zoals netwerken, bestandstoegang en apparaatbeheer; procesmanagement (multitasking, procesadministratie, etc.); user < -> systeeminteractie methoden (zowel in als uit) en gebruikersadministratie. In principe is alles wat deel uitmaakt van het besturingssysteem dat geen toepassing is, systeemprogrammering.

Answer

Direct gebruik van de Windows API was ooit een gebruikelijke manier om applicaties voor Windows te schrijven. Dus nee, dat is geen systeemprogrammering.

Systemen programmeren is niet alleen “dicht bij het besturingssysteem” – het is iets essentieel naar de kernwerking van het computersysteem. Dus het schrijven van een besturingssysteem is systeemprogrammering. Het schrijven van videostuurprogrammas, bestandssysteemstuurprogrammas, netwerkstuurprogrammas voor dat besturingssysteem is systeemprogrammering. Het schrijven van een compiler voor een bepaalde combinatie van taal / chipset is systeemprogrammering.

Answer

Normaal gesproken verwijst het naar “dingen op laag niveau waarvan niet-technische eindgebruikers niet weten of ze bestaan of niet weten heel duidelijk dat ze gebruiken of wat ze doen “.

Enkele voorbeelden die vaak als systeemprogrammering worden beschouwd:

  • besturingssystemen en stuurprogrammas
  • compilers
  • emulators een d virtualisatie
  • distributie creatie, dwz het creëren van userland images.

    Dit omvat normaal gesproken het selecteren van de C standaard bibliotheek, het init systeem en de basis userland componenten zoals een shell.

Systeemprogrammering wordt vaak gedaan in talen met een lager gecompileerd niveau zonder automatische garbagecollection zoals C of assembly, en hebben de neiging om toegang te krijgen tot minder gebruikelijke systeemoproepen, vaak via POSIX C-interfaces .

Ik onderhoud een praktische tutorial die verschillende systeemprogrammeringsonderwerpen hier .

Antwoord

Bij het definiëren hiervan zou ik helemaal wegblijven van alle technische details. Dan wordt het gemakkelijk.

Met een applicatie kan een gebruiker iets nuttigs doen met een stukje technologie. Applicatieprogrammering is dus gericht op het leveren van functies aan een gebruiker, heel direct.

Systeemprogrammering aan de andere kant zou de basis leggen om applicatieprogrammering mogelijk te maken. Het levert functies aan de applicatieprogrammeur in plaats van aan de gebruiker.

Deze definitie is geldig, maar het is een kwestie van perspectief en context en rollen. Voor een computerprogrammeur zijn programmeerhulpmiddelen applicaties. Voor een eindgebruiker zijn ze zinloos, gewoon buiten beeld.

Antwoord

Kortom, de systeemprogrammering in vergelijking met applicatieprogrammering is dat de SP de OS-software afhandelt om met hardwarebronnen te werken en AP de activiteit van de eindgebruikers afhandelt.

Opmerkingen

  • dit doet niet ‘ t lijkt iets substantieel te bieden over de punten die zijn gemaakt en uitgelegd in eerdere 4 antwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *