vad är systemprogrammering exakt?

Jag har aldrig förstått vad systemprogrammering innebar. Den vanliga definitionen som ges är ”… gör något nära Os eller utvidgar Os-funktioner …”.

Gör det att systemprogrammeras med Windows API direkt istället för vissa bibliotek? Skrev Android OS-systemprogrammering? Om jag skriver något som skulle exponera Linux-kärnan genom en konsol som en app på Android gör jag systemprogrammering? Om jag skriver programvara för att styra en tvättmaskin, skriver jag systemprogrammering?

Jag är nybörjare i programmering och det här förvirrar mig till ingen ände. Vänligen förklara att kontrastera det med ”applikationsprogrammering”.

Kommentarer

  • Denna definition har ändrats och systemprogrammerare själva ’ verkar inte vara säker på en unik definition idag. Detta problem uppstår vanligtvis när människor diskuterar om språk X är lämpligt för systemprogrammering …
  • @Denys S é guret – Ironiskt om ingen kan komma överens om vad ” systemprogrammering ” är till att börja med.
  • Citat från Perl Cookbook – kapitel 16. Processhantering och Kommunikation: ” Detta kapitel handlar om att starta kommandon och koppla ihop separata processer. Det handlar om att hantera deras skapande, kommunikation och ultimata bortgång. Det handlar om systemprogrammering. ”

Svar

Jag personligen precis som definition från Wikipedia :

Systemprogrammering (eller systemprogrammering) är aktivitet för programmering av systemprogramvara. Det primära kännetecknet för systemprogrammering jämfört med applikationsprogrammering är att applikationsprogrammering syftar till att producera programvara som tillhandahåller tjänster till användaren (t.ex. ordbehandlare), medan systemprogrammering syftar till att producera programvara som tillhandahåller tjänster till datorhårdvaran (t.ex. diskdefragmentering ). Det kräver en större grad av hårdvarumedvetenhet.

Svar

Det finns flera frågor du kan ställa dig själv för att träna dig i att avgöra den frågan.

  • Säljs systemet ursprungligen utan detta program? Angry Birds kan vara en ”Killer App” för en smart telefon (anledningen till att någon köper den), men det är fortfarande en separat app från tredje part skriven långt efter att telefonen introducerades. Att skriva det skulle ha varit applikationsprogrammering. Men skärmdrivrutinen för samma smarta telefon är väsentlig för att använda den alls, så det skulle ha varit systemprogrammering.
  • Kan du tänka dig att överföra koden till en annan plattform utan att till stor del skriva om den? TeX och troff har portats till praktiskt taget alla system med få förändringar, så de är applikationer, även om de ligger längst ner i verktygskedjan som folk vanligtvis använder. Filsystemet som TeX skriver sin utdata till, t.ex. UFS eller VFAT är ett gränsfall. Du kunde porta ett filsystem till ett annat operativsystem om det var helt fantastiskt, men vanligtvis tar folk bara över fantastiska idéer och skriver sitt eget filsystem för sitt eget operativsystem. Det gör filsystem till systemprogramvara.
  • Är funktionaliteten implementerad i kärnan eller i separata binärer? (Filsystem upptar en mellanväg också här. Många delar av många filsystem är faktiskt kärnkod, men många har betydande delar i användarutrymmet.) Grafikdrivrutiner kan i princip vara pluggbara externa komponenter, men de implementeras ofta i kärnan eller åtminstone med privilegierad direktåtkomst till kärnan (eller till och med till hårdvaran). Det skulle vara systemprogrammering. Å andra sidan är datorspel som använder grafikdisplaystapeln applikationer.

För dina frågor var skrivning av Android OS definitivt systemprogrammering. Att skriva ett program som använder Windows API-samtal är applikationsprogrammering. Det är inte lika bärbart som om du använde plattformsbibliotek som SDL eller OpenGL, men det kan i princip överföras, det är tredjepartskod och körs i användarutrymme. En konsolapp som exponerar tillståndet för Linux-kärnan är ett intressant tankeexperiment. Jag skulle definitivt säga att det handlar om systemprogrammering, eftersom du ”måste veta mycket om Linux-strukturen (notera att” Linux ”är korrekt bara kärnan, inte distributionen) för att skriva och förmodligen till och med att använda den!

Svar

Kort sagt: Skrivprogramvara som utökar eller förbättrar ett operativsystems funktion, som drivrutiner, uppdateringar av systemverktyg till OS ” es eller till och med helt nya operativsystem.

Det handlar mest om Memory Management; I / O-operationer i ordets vidaste bemärkelse som nätverk, filåtkomst och enhetshantering; processhantering (multitasking, processadministration, etc.); användare < -> systeminteraktionsmetoder (både in och ut) och användaradministration. I grund och botten är allt som ingår i operativsystemet som inte är en applikation systemprogrammering.

Svar

Använda Windows API direkt var vid ett tillfälle ett vanligt sätt att skriva applikationer för Windows. Så nej, det är inte systemprogrammering.

Systemprogrammering är inte bara ”nära OS” – det är något viktigt till datorsystemets kärnfunktion. Så att skriva ett operativsystem är systemprogrammering. Att skriva videodrivrutiner, filsystemdrivrutiner, nätverksdrivrutiner för det operativsystemet är systemprogrammering. Att skriva en kompilator för en viss kombination av språk / chipset är systemprogrammering.

Svar

Normalt hänvisar det till ”lågnivå saker som icke-tekniska slutanvändare inte vet existerar eller inte vet mycket tydligt att de använder eller vad de gör ”.

Några exempel som ofta skulle betraktas som systemprogrammering:

  • operativsystem och drivrutiner
  • kompilatorer
  • emulatorer och d virtualisering
  • distributionskapande, dvs skapande av användarlandsbilder.

    Detta handlar särskilt om att välja C-standardbiblioteket, init-systemet och grundläggande användarlandskomponenter som ett skal.

Systemprogrammering görs ofta på språk med lägre kompilerade nivåer utan automatisk skräpsamling som C eller montering, och tenderar att komma åt mindre vanliga systemanrop ofta via POSIX C-gränssnitt .

Jag håller hand om handledning som täcker flera systemprogrammeringsämnen här .

Svar

När jag definierar detta skulle jag helt undvika tekniska detaljer. Då blir det enkelt.

En applikation tillåter en användare att göra något användbart med någon teknik. Så applikationsprogrammering är inriktad på att tillhandahålla funktioner till en användare, ganska direkt.

Systemprogrammering å andra sidan skulle lägga grunden för att möjliggöra applikationsprogrammering. Den levererar funktioner till applikationsprogrammeraren snarare än till användaren.

Denna definition kommer att gälla, men det handlar om perspektiv, sammanhang och roller. För en datorprogrammerare är programmeringsverktyg applikationer. För en slutanvändare är de meningslösa, bara utanför bilden.

Svar

Kort sagt, systemprogrammeringen jämfört med applikationsprogrammering är att SP hanterar OS-programvaran för att arbeta med hårdvaruresurser och AP hanterar slutanvändarnas aktivitet.

Kommentarer

  • detta gör inte ’ t verkar erbjuda något väsentligt över poäng som har gjorts och förklarats i tidigare 4 svar

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *