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”.
systems-programming
kentjh
źródło
źródło
Odpowiedzi:
Osobiście podoba mi się definicja z Wikipedii :
źródło
Istnieje kilka pytań, które możesz sobie zadać, aby nabrać wprawy w podejmowaniu decyzji.
troff
został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.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ć!
źródło
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.
źródło
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.
źródło
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:
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 .
źródło
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.
źródło
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.
źródło