czym dokładnie jest programowanie systemu?

26

Nigdy nie zrozumiałem, co oznacza programowanie systemu. Zwykle podana definicja to „... robienie czegoś w pobliżu OS lub rozszerzanie funkcji OS ...”.

Czy bezpośrednie korzystanie z Windows API zamiast niektórych bibliotek mówi, że czy we / wy plików sprawiają, że programowanie systemu? Czy pisanie programowania systemu Android? Jeśli napiszę coś, co ujawniłoby jądro Linuksa za pomocą konsoli, takiej jak aplikacja na Androida, czy programuję? Jeśli piszę oprogramowanie do sterowania pralką, czy piszę programowanie systemu?

Jestem początkującym programistą i to mnie dezorientuje bez końca. Proszę wyjaśnić, kontrastując to z „programowaniem aplikacji”.

kentjh
źródło
2
Ta definicja uległa zmianie, a sami programiści systemu nie wydają się być dzisiaj pewni unikalnej definicji. Ten problem pojawia się zwykle, gdy ludzie
debatują,
@Denys Séguret - ironiczne, jeśli nikt nie może zgodzić się, od czego ma zacząć „programowanie systemu”.
John

Odpowiedzi:

19

Osobiście podoba mi się definicja z Wikipedii :

Programowanie systemowe (lub programowanie systemowe) to działalność polegająca na programowaniu oprogramowania systemowego. Podstawową cechą wyróżniającą programowanie systemów w porównaniu z programowaniem aplikacji jest to, że programowanie aplikacji ma na celu tworzenie oprogramowania, które świadczy usługi dla użytkownika (np. Edytor tekstu), podczas gdy programowanie systemów ma na celu tworzenie oprogramowania, które świadczy usługi na sprzęcie komputerowym (np. Defragmentator dysku) ). Wymaga to większego stopnia świadomości sprzętowej.

Nemanja Trifunovic
źródło
12

Istnieje kilka pytań, które możesz sobie zadać, aby nabrać wprawy w podejmowaniu decyzji.

  • Czy system był pierwotnie sprzedawany bez tego programu? Angry Birds może być „aplikacją Killer” na smartfony (powód, dla którego ktoś ją kupuje), ale wciąż jest to osobna aplikacja innej firmy napisana długo po wprowadzeniu telefonu. Pisanie tego byłoby programowaniem aplikacji. Ale sterownik ekranu tego samego smartfona jest niezbędny do jego używania, więc byłoby to programowanie systemów.
  • Czy potrafisz sobie wyobrazić przeniesienie kodu na inną platformę bez większego przepisywania? TeX i troffzostały przeniesione do praktycznie dowolnego systemu z kilkoma zmianami, więc są aplikacjami, nawet jeśli znajdują się w dolnej części łańcucha narzędzi, z którego zwykle korzystają ludzie. System plików, w którym TeX zapisuje dane wyjściowe, np. UFS lub VFAT, jest przypadkiem granicznym. Możesz przenieść system plików do innego systemu operacyjnego, jeśli byłby całkowicie niesamowity, ale zwykle ludzie po prostu przejmują niesamowite pomysły i piszą własny system plików dla własnego systemu operacyjnego. To sprawia, że ​​oprogramowanie systemu plików.
  • Czy funkcjonalność jest zaimplementowana w jądrze lub w oddzielnych plikach binarnych? (Systemy plików również zajmują tutaj pośrednie miejsce. Wiele części wielu systemów plików to tak naprawdę kod jądra, ale wiele z nich ma znaczną część przestrzeni użytkownika.) Sterowniki wyświetlania grafiki mogą w zasadzie być zewnętrznymi komponentami podłączanymi, ale często są implementowane w jądrze lub przynajmniej z uprzywilejowanym bezpośrednim dostępem do jądra (a nawet sprzętu). To byłoby programowanie systemów. Z drugiej strony gry komputerowe, które korzystają ze stosu wyświetlania grafiki, są aplikacjami.

Na twoje pytania pisanie systemu operacyjnego Android było zdecydowanie programowaniem systemów. Pisanie programu korzystającego z wywołań interfejsu API systemu Windows to programowanie aplikacji. Nie jest tak przenośny, jakby był, gdybyś używał bibliotek międzyplatformowych, takich jak SDL lub OpenGL, ale w zasadzie można go przenosić, jest to kod innej firmy i działa w przestrzeni użytkownika. Aplikacja konsolowa, która ujawnia stan jądra Linuksa, jest interesującym eksperymentem myślowym. Zdecydowanie powiedziałbym, że wiąże się to z programowaniem systemów, ponieważ musiałbyś dużo wiedzieć o strukturze Linuksa (zauważ, że „Linux” to właściwie tylko jądro, a nie dystrybucja), aby pisać, a prawdopodobnie nawet z niego korzystać!

Kilian Foth
źródło
4

W skrócie: Pisanie oprogramowania, które rozszerza lub usprawnia funkcjonowanie systemu operacyjnego, takie jak sterowniki, aktualizacje narzędzi systemowych do systemów operacyjnych, a nawet zupełnie nowe systemy operacyjne.

Dotyczy to głównie zarządzania pamięcią; Operacje we / wy w najszerszym tego słowa znaczeniu, takie jak praca w sieci, dostęp do plików i zarządzanie urządzeniami; zarządzanie procesami (wielozadaniowość, administracja procesami itp.); metody interakcji użytkownika <-> z systemem (zarówno wejściowe jak i wyjściowe) oraz administracja użytkownikami Zasadniczo wszystko, co jest częścią systemu operacyjnego, która nie jest aplikacją, to programowanie systemów.

Na nie
źródło
3

Bezpośrednie korzystanie z interfejsu API systemu Windows było w pewnym momencie powszechnym sposobem pisania aplikacji dla systemu Windows. Więc nie, to nie jest programowanie systemów.

Programowanie systemów jest nie tylko „bliskie systemowi operacyjnemu” - jest to coś niezbędnego dla podstawowego funkcjonowania systemu komputerowego. Więc pisanie systemu operacyjnego to programowanie systemów. Pisanie sterowników wideo, sterowników systemu plików, sterowników sieciowych dla tego systemu operacyjnego to programowanie systemów. Pisanie kompilatora dla określonej kombinacji języka / mikroukładu to programowanie systemów.

Konsola 80x24
źródło
1

Zwykle odnosi się do „rzeczy niskiego poziomu, o których nie wiedzą, że nietechniczni użytkownicy końcowi istnieją lub nie wiedzą, że używają lub co robią”.

Niektóre przykłady, które często są uważane za programowanie systemu:

  • systemy operacyjne i sterowniki
  • kompilatory
  • emulatory i wirtualizacja
  • tworzenie dystrybucji, tj. tworzenie obrazów przestrzeni użytkownika.

    Zwykle wymaga to wybrania standardowej biblioteki C, systemu init i podstawowych komponentów przestrzeni użytkownika, takich jak powłoka.

Systemy oprogramowania odbywa się często w językach kompilowanych niższy poziom bez automatycznego zbierania śmieci jak C lub montaż, i mają tendencję do dostępu mniej wspólny system wywołuje często za pośrednictwem interfejsów POSIX C .

Jestem utrzymując ręce na tutorialu, który obejmuje kilka wątków programowych systemu tutaj .

Ciro Santilli
źródło
0

Określając to, chciałbym całkowicie unikać wszelkich szczegółów technicznych. Wtedy to staje się łatwe.

Aplikacja pozwala użytkownikowi zrobić coś użytecznego z jakąś technologią. Dlatego programowanie aplikacji ma na celu zapewnienie funkcji użytkownikowi, całkiem bezpośrednio.

Z drugiej strony programowanie systemu stanowiłoby podstawę do programowania aplikacji. Zapewnia funkcje programistom aplikacji, a nie użytkownikowi.

Ta definicja będzie obowiązywać, ale jest to kwestia perspektywy, kontekstu i ról. Dla programisty narzędziami programistycznymi są aplikacje. Dla użytkownika końcowego są bez znaczenia, po prostu znikają z obrazu.

Martin Maat
źródło
-3

Krótko mówiąc, programowanie systemu w porównaniu z programowaniem aplikacji polega na tym, że SP obsługuje oprogramowanie systemu operacyjnego do pracy z zasobami sprzętowymi, a AP obsługuje aktywność użytkowników końcowych.

TUSHAR
źródło
4
wydaje się, że nie oferuje to nic istotnego w porównaniu z punktami przedstawionymi i wyjaśnionymi w poprzednich 4 odpowiedziach
gnat