Nigdy nie rozumiałem, co oznacza programowanie systemowe. Zwykle podawana definicja to „… robienie czegoś zbliżonego do systemu operacyjnego lub rozszerzanie jego funkcji…”.
Czy używanie API systemu Windows bezpośrednio, a nie niektórych bibliotek, do powiedzenia, czy plik i / o powoduje, że jest to programowanie systemowe? Czy pisałeś programowanie systemu Android OS? Jeśli napiszę coś, co ujawniłoby jądro Linuksa za pośrednictwem aplikacji konsolowej na Androida, czy robię programowanie systemu? Jeśli piszę oprogramowanie do sterowania pralką, to czy piszę programowanie systemu?
Jestem początkującym w programowaniu i to nie ma końca. Proszę wyjaśnić, w przeciwieństwie do „programowania aplikacji”.
Komentarze
- Ta definicja uległa zmianie i sami programiści systemowi nie ' Wydaje się, że dziś jestem pewien unikalnej definicji. Ten problem pojawia się zwykle, gdy ludzie debatują o tym, czy język X jest wygodny do programowania systemu …
- @Denys S é guret – ironia losu, jeśli nikt nie może się zgodzić od czego ” programowanie systemowe ” ma się zacząć.
- Cytat z książki kucharskiej Perla – rozdział 16. Zarządzanie procesami i Komunikacja: ” Ten rozdział dotyczy uruchamiania poleceń i łączenia ze sobą oddzielnych procesów. Chodzi o zarządzanie ich tworzeniem, komunikacją i ostatecznym upadkiem. Chodzi o programowanie systemów. ”
Odpowiedź
Osobiście jak definicja z Wikipedii :
Programowanie systemowe (lub programowanie systemowe) to działalność w zakresie programowania oprogramowania systemowego. Podstawową cechą wyróżniającą programowanie systemów w porównaniu z programowaniem aplikacji jest to, że programowanie aplikacji ma na celu wytworzenie oprogramowania, które dostarcza usługi użytkownikowi (np. Edytor tekstu), podczas gdy programowanie systemów ma na celu wytworzenie oprogramowania, które zapewnia usługi dla sprzętu komputerowego (np. Defragmentator dysku ). Wymaga większej znajomości sprzętu.
Odpowiedź
Istnieją 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ć „zabójczą aplikacją” dla smartfona (powód, dla którego ktoś ją kupuje), ale nadal jest to osobna aplikacja innej firmy napisana długo po wprowadzeniu telefonu. Pisanie tego byłoby programowaniem aplikacji. Ale sterownik wyświetlacza tego samego smartfona jest w ogóle niezbędny, aby go w ogóle używać, więc byłoby to programowanie systemowe.
- Czy możesz sobie wyobrazić przeniesienie kodu na inną platformę bez przeważającego przepisywania go? TeX i
troff
zostały przeportowane do praktycznie każdego systemu z kilkoma zmianami, więc są to aplikacje, mimo że znajdują się w dolnej części łańcucha narzędzi, z którego zwykle korzystają ludzie. System plików, w którym TeX zapisuje swoje dane wyjściowe, np. UFS lub VFAT to przypadek graniczny. Mógłbyś przenieść system plików na inny system operacyjny, gdyby 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 system plików jest oprogramowaniem systemu. - Czy ta funkcjonalność jest zaimplementowana w jądrze czy w oddzielnych plikach binarnych? (Systemy plików również zajmują tutaj pośredni poziom. Wiele części wielu systemów plików to w rzeczywistości kod jądra, ale wiele z nich ma znaczną część w przestrzeni użytkownika). Sterowniki wyświetlacza graficznego mogą w zasadzie być podłączanymi komponentami zewnętrznymi, ale często są one implementowane w jądrze lub przynajmniej z uprzywilejowanym bezpośrednim dostępem do jądra (lub nawet do sprzętu). To byłoby programowanie systemów. Z drugiej strony, gry komputerowe, które używają stosu graficznego, to aplikacje.
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, jak gdybyś używał bibliotek wieloplatformowych, takich jak SDL lub OpenGL, ale w zasadzie można go przenieść, 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 wymaga to programowania systemów, ponieważ „musiałbyś dużo wiedzieć o strukturze Linuksa (zwróć uwagę, że„ Linux ”to właściwie tylko jądro, a nie dystrybucja), aby pisać, a prawdopodobnie nawet używać! / p>
Odpowiedź
Krótko mówiąc: pisanie oprogramowania, które rozszerza lub ulepsza działanie systemu operacyjnego, np. sterowniki, aktualizacje narzędzi systemowych do systemu operacyjnego ” es lub nawet zupełnie nowy system operacyjny.
Dotyczy to głównie zarządzania pamięcią; Operacje we / wy w najszerszym znaczeniu tego słowa, takie jak praca w sieci, dostęp do plików i zarządzanie urządzeniami; zarządzanie procesami (wielozadaniowość, administracja procesami itp.); użytkownik < -> metody interakcji z systemem (zarówno wejścia, jak i wyjścia) oraz administrowanie użytkownikami. Zasadniczo wszystko, co jest częścią systemu operacyjnego, a nie jest aplikacją, jest programowaniem systemów.
Odpowiedź
Bezpośrednie użycie interfejsu API systemu Windows był 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” – to jest coś istotnego do podstawowego funkcjonowania systemu komputerowego. Zatem pisanie systemu operacyjnego jest programowaniem systemów. Pisanie sterowników wideo, sterowników systemu plików, sterowników sieciowych dla tego systemu operacyjnego jest programowaniem systemów. Pisanie kompilatora dla określonej kombinacji języka / chipsetu jest programowaniem systemów.
Odpowiedź
Zwykle odnosi się do „rzeczy niskiego poziomu, o których nietechniczni użytkownicy końcowi nie wiedzą, że istnieją lub nie wiedzą bardzo wyraźnie, że używają lub co robią ”.
Niektóre przykłady, które często byłyby uważane za programowanie systemu:
- systemy operacyjne i sterowniki
- kompilatory
- emulatory an d wirtualizacja
-
tworzenie dystrybucji, tj. tworzenie obrazów przestrzeni użytkownika.
Zwykle wymaga to wybrania standardowej biblioteki C, systemu inicjującego i podstawowych komponentów środowiska użytkownika, takich jak powłoka.
Programowanie systemów jest często wykonywane w językach niższego poziomu skompilowanych bez automatycznego czyszczenia pamięci, takich jak C lub assembler, i często uzyskuje dostęp do mniej popularnych wywołań systemowych przez Interfejsy POSIX C .
Prowadzę samouczek, który obejmuje kilka tematów programowania systemowego tutaj .
Odpowiedź
Definiując to, unikałbym wszelkich szczegółów technicznych. Wtedy staje się to łatwe.
Aplikacja pozwala użytkownikowi zrobić coś pożytecznego za pomocą jakiejś technologii. Tak więc programowanie aplikacji ma na celu dostarczanie funkcji użytkownikowi, całkiem bezpośrednio.
Z drugiej strony programowanie systemowe położyłoby podwaliny pod umożliwienie programowania aplikacji. Dostarcza funkcje programiście aplikacji, a nie użytkownikowi.
Ta definicja będzie obowiązywać, ale jest to kwestia perspektywy, kontekstu i ról. Dla programisty narzędzia programistyczne to aplikacje. Dla użytkownika końcowego są bez znaczenia, po prostu znikają z obrazu.
Odpowiedź
Krótko mówiąc, programowanie systemu w porównaniu z programowanie 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.
Komentarze
- to nie ' nie wydaje się oferować niczego istotnego w stosunku do punktów przedstawionych i wyjaśnionych w poprzednich 4 odpowiedziach