Jeg har aldrig forstået, hvad systemprogrammering betød. Den sædvanlige definition er “… gør noget tæt på Os eller udvider Os-funktioner …”.
Bruger Windows API direkte i stedet for nogle biblioteker for at sige, gør fil i / o det systemprogrammering? Skrev jeg Android OS-systemprogrammering? Hvis jeg skriver noget, der udsætter linux-kernen gennem en konsol som en app på Android, laver jeg systemprogrammering? Hvis jeg skriver software til at styre en vaskemaskine, skriver jeg da systemprogrammering?
Jeg er begynder inden for programmering, og det forvirrer mig til ingen ende. Forklar, hvordan du kontrasterer det med “applikationsprogrammering”.
Kommentarer
- Denne definition er ændret, og systemprogrammerere selv ‘ synes ikke at være sikker på en unik definition i dag. Dette problem opstår normalt, når folk diskuterer om sprog X er praktisk til systemprogrammering …
- @Denys S é guret – Ironisk, hvis ingen kan være enige om hvad ” systemprogrammering ” er at starte med.
- Citat fra Perl Cookbook – kapitel 16. Process Management og Kommunikation: ” Dette kapitel handler om at starte kommandoer og forbinde separate processer sammen. Det handler om at styre deres skabelse, kommunikation og ultimative død. Det handler om systemprogrammering. ”
Svar
Jeg personligt ligesom definition fra Wikipedia :
Systemprogrammering (eller systemprogrammering) er aktivitet ved programmering af systemsoftware. Det primære kendetegn ved systemprogrammering sammenlignet med applikationsprogrammering er, at applikationsprogrammering sigter mod at producere software, der leverer tjenester til brugeren (f.eks. Tekstbehandler), mens systemprogrammering sigter mod at producere software, der leverer tjenester til computerhardwaren (f.eks. Diskdefragmentering). ). Det kræver en større grad af hardwarebevidsthed.
Svar
Der er flere spørgsmål, du kan stille dig selv for at få øvelse i at afgøre dette spørgsmål.
- Blev systemet oprindeligt solgt uden dette program? Angry Birds kan være en “Killer App” til en smartphone (grunden til, at nogen køber den), men det er stadig en separat tredjepartsapp skrevet længe efter, at telefonen blev introduceret. At skrive det ville have været programmer, der programmerede. Men skærmdriveren til den samme smartphone er overhovedet vigtig for at bruge den, så det ville have været systemprogrammering.
- Kan du forestille dig at overføre koden til en anden platform uden stort set at omskrive den? TeX og
troff
er blevet overført til stort set ethvert system med få ændringer, så de er applikationer, selvom de er placeret i bunden af værktøjskæden, som folk typisk bruger. Filsystemet, som TeX skriver sin output til, f.eks. UFS eller VFAT er en grænseoverskridende sag. Du kunne port et filsystem til et andet operativsystem, hvis det var helt fantastisk, men normalt tager folk bare over fantastiske ideer og skriver deres eget filsystem til deres eget operativsystem. Det gør filsystem til systemsoftware. - Er funktionaliteten implementeret i kernen eller i separate binære filer? (Filsystemer optager også en mellemvej her. Mange dele af mange filsystemer er faktisk kernekode, men mange har betydelige dele i brugerrummet.) Grafikdisplaydrivere kan i princippet være stikbare eksterne komponenter, men de implementeres ofte i kernen eller i det mindste med privilegeret direkte adgang til kernen (eller endda til hardwaren). Det ville være systemprogrammering. På den anden side er computerspil, der bruger den grafiske displaystak, applikationer.
På dine spørgsmål var det helt klart systemprogrammering at skrive Android OS. At skrive et program, der bruger Windows API-opkald, er applikationsprogrammering. Det er ikke så bærbart, som det ville være, hvis du brugte platforme-biblioteker som SDL eller OpenGL, men det kan i princippet overføres, det er tredjepartskode, og det kører i brugerrummet. En konsolapp, der udsætter tilstanden for Linux-kernen, er et interessant tankeeksperiment. Jeg vil bestemt sige, at det involverer programmering af systemer, da du “skulle vide meget om Linux-strukturen (bemærk, at” Linux “korrekt kun er kernen, ikke distributionen) for at skrive og sandsynligvis endda bruge den!
Svar
Kort sagt: Skrivesoftware, der udvider eller forbedrer funktionen af et operativsystem, som drivere, opdateringer af systemværktøjer til OS ” es eller endda helt nye operativsystemer.
Det involverer mest Memory Management; I / O-operationer i den bredeste forstand af ordet som netværk, filadgang og enhedsadministration; processtyring (multitasking, procesadministration osv.); bruger < -> systeminteraktionsmetoder (både ind og ud) og brugeradministration. Dybest set er alt, hvad der er en del af operativsystemet, der ikke er en applikation, systemprogrammering.
Svar
Brug af Windows API direkte var på et tidspunkt en almindelig måde at skrive applikationer til Windows på. Så nej, det er ikke systemprogrammering.
Systemprogrammering er ikke bare “tæt på operativsystemet” – det er noget vigtigt til computersystemets kernefunktion. Så at skrive et operativsystem er systemprogrammering. Skrivning af videodrivere, filsystemdrivere, netværksdrivere til det OS er systemprogrammering. At skrive en kompilator til en bestemt kombination af sprog / chipsæt er systemprogrammering.
Svar
Normalt refererer det til “lavt niveau ting, som ikke-tekniske slutbrugere ikke ved, eksisterer eller ikke ved meget klart, at de bruger, eller hvad de gør “.
Nogle eksempler, der ofte betragtes som systemprogrammering:
- operativsystemer og drivere
- kompilatorer
- emulatorer og d virtualisering
-
distribution oprettelse, dvs. oprettelse af userland-billeder.
Dette involverer især normalt at vælge C-standardbiblioteket, init-systemet og basale userland-komponenter som en shell.
Systemprogrammering udføres ofte på lavere kompilerede sprog uden automatisk affaldsindsamling som C eller samling, og har tendens til at få adgang til mindre almindelige systemopkald ofte gennem POSIX C-grænseflader .
Jeg opretholder en praktisk vejledning, der dækker flere systemprogrammeringsemner her .
Svar
Når jeg definerer dette, vil jeg helt fjerne alle tekniske detaljer. Så bliver det let.
En applikation giver brugeren mulighed for at gøre noget nyttigt med noget stykke teknologi. Så applikationsprogrammering er målrettet mod at levere funktioner til en bruger, direkte direkte.
Systemprogrammering på den anden side ville lægge grunden til at muliggøre applikationsprogrammering. Det leverer funktioner til applikationsprogrammereren snarere end til brugeren.
Denne definition holder, men det er et spørgsmål om perspektiv, kontekst og roller. For en computerprogrammerer er programmeringsværktøjer applikationer. For en slutbruger er de meningsløse, lige ude af billedet.
Svar
Kort sagt, Systemprogrammeringen sammenlignet med applikationsprogrammering er, at SP håndterer OS-softwaren til at arbejde med hardwarressourcer, og AP håndterer slutbrugernes aktivitet.
Kommentarer
- dette betyder ikke ‘ t ser ud til at tilbyde noget væsentligt over punkter, der er fremsat og forklaret i tidligere 4 svar