Co oznacza „programowanie systemu”?

33

Przygotowuję się do stażu jako programista gier w znanej na całym świecie firmie produkującej gry. Gdy przeszukałem ich witrynę w poszukiwaniu niezbędnych wymagań, pokazało mi to:

Dodano zaletę

  • Znajomość DirectX / OpenGL.
  • Silna znajomość matematyki 3D i fizyki.
  • Visual Studio IDE dla rozwoju C ++.
  • Programowanie systemu i koncepcje systemu operacyjnego.

Co dokładnie rozumieją przez programowanie systemu i koncepcje systemu operacyjnego?

Czy powinienem studiować programowanie w systemie Windows? A może powinienem iść do programowania w Linuksie (co oznacza, że ​​chcą, żebym poznał ważne pojęcia). A może to coś zupełnie innego?

Dhannanjai
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Josh
„Czy powinienem studiować programowanie w systemie Windows? Czy powinienem iść do programowania w systemie Linux” Oba, tam gdzie to możliwe. Przynajmniej zapoznaj się z ich interfejsami API, może spróbuj zrobić proste „otwórz okno” z odpowiednimi interfejsami API systemu operacyjnego, aby dowiedzieć się, jak różnią się one i jaki może być wysiłek.
Pharap,
@Pharap Technicznie nie ma „API systemu operacyjnego” dla Linuxa, który mógłby otworzyć okno, i lepiej jest użyć glut, glfw lub podobnego do otwarcia okna, aby działało zarówno z X, jak i Waylandem (oraz Windows i macOS).
Majora320,
@ Majora320 Nie, ale istnieje interfejs API powłoki, który go obsługuje, i zazwyczaj są one specyficzne dla dystrybucji Linuxa (tj. X jest używany w niektórych dystrybucjach Linuxa, ale zwykle nie w Windows i Mac). Możesz także użyć glut / glfw / SDL / cokolwiek, ważnym punktem jest przyjęcie podejścia niskiego poziomu, aby PO mógł użyć implementacji, aby dowiedzieć się o podstawowych pojęciach (komunikaty o zdarzeniach, user-land vs. os-land itp.). Przenośne / wyższego poziomu interfejsy API mają tendencję do wyodrębniania wielu rzeczy, które mogą utrudniać proces uczenia się.
Pharap,
@Dhannanjai Jeśli mogę być tak odważny, chciałbym polecić książkę pod tytułem Systemy operacyjne DeMYSTiFieD . Bardzo mi pomogło w latach college'u podczas prac nad sprzętem. Wyjaśnia wiele ważnych koncepcji systemów operacyjnych, takich jak POST, techniki planowania wątków (round-robin, kolejki uporządkowane itp.) I sterowniki.
Pharap,

Odpowiedzi:

54

„Programowanie systemu” (lub „programowanie systemu”) zwykle oznacza programowanie na niższym poziomie abstrakcji niż (na przykład) programowanie gry. Programowanie rozgrywki polega zwykle na budowaniu rzeczywistej mechaniki gry i funkcji, które użytkownik może zobaczyć, podczas gdy programowanie systemów polega raczej na budowaniu ram, na których pracują programiści.

Może to oznaczać grafikę, ładowanie i przesyłanie zasobów, audio, zarządzanie pamięcią, operacje na plikach, interfejsy API abstrakcji platformy i tak dalej. Szczegóły są dość zróżnicowane, a ponieważ w branży gier nie ma standardów dotyczących stanowisk pracy, podobnie nie ma standardów nazw domen programistycznych. W jednym studiu może się okazać, że „programowanie systemów” oznacza wszystko, co wymieniłem powyżej. Z drugiej strony może się okazać, że rozróżniają „programowanie grafiki” jako oddzielną domenę i nazywają każde inne zadanie nieprogramowania „programowaniem systemów”. W jeszcze innym przypadku mogą w ogóle nie używać tego terminu i po prostu nazywają to „programowaniem silnika”.

Ponieważ jest to domena niższego poziomu i zazwyczaj wymaga bezpośredniego połączenia z interfejsami API specyficznymi dla platformy dla wszystkich platform, na których budowana jest gra, znajomość tych platform będzie pomocna, podobnie jak znajomość bardziej ogólnej domeny (np. , koncepcji systemu operacyjnego, bez względu na to, jak działa konkretny system operacyjny, na przykład czym jest pamięć wirtualna lub jak działają wątki, jak działa buforowanie IO itp.).

Josh
źródło
2
W skrócie, powiedziałbym, że programowanie niesystemowe (rzeczywista gra) będzie w większości niezależne od platformy (nie przejmuj się, czy to Mac / PC / Xbox), podczas gdy programowanie systemów będzie o wiele bardziej specyficzne dla platformy (w kolejności w celu zapewnienia niezależnej od platformy warstwy dla programistów niesystemowych).
TripeHound,
22

Odpowiedź Josha jest naprawdę dobra, ale pomyślałem, że rzuciłem kilka kul o zespole Systems, w którym pracuję. Nie pracuję na systemach, ale dużo z nimi pracuję. Obowiązki zespołu systemów są bardzo różne w zależności od firmy.

Nasz zespół ds. Systemów odpowiada za wiele rzeczy:

  • Biblioteka matematyczna
  • Biblioteka zastępcza STD
  • Core Game Framework
  • Podstawowa struktura aplikacji
  • Wkład
  • Wiadomości o zdarzeniach
  • Systemy Component-Entity
  • Wiązanie skryptu
  • (i więcej)

Znajdzie się tutaj duża wiedza na temat domen Windows i Linux, a także wiedza z fizyki, logiki gry podstawowej i zarządzania pamięcią niskiego poziomu. Zespoły ds. Systemów będą zazwyczaj zaangażowane przynajmniej częściowo w każdy obsługiwany system operacyjny, ponieważ większość ich projektów opiera się na każdym systemie operacyjnym na dość niskim poziomie.

Niektóre rzeczy, które mogą należeć do zespołu „Systemów”, które dzielimy na osobne zespoły (ale nasz zespół Systemów nadal bardzo mocno wchodzi w interakcje):

  • Fizyka
  • Linux (serwer dedykowany)
  • Bezpośrednia obsługa innych systemów operacyjnych (iOS / Mac / Console / etc)
  • Buduj systemy
  • Audio
Słoik miodu
źródło
0

Programowanie systemów jest bardzo dobrze zdefiniowane, ale firmy starają się dostosować je do swoich potrzeb. Jeśli używasz lub piszesz wywołania systemowe, programujesz system. Wywołania systemowe to funkcje zapewniane przez jądro lub sterowniki przestrzeni użytkownika. Obejmuje to OpenGL, ponieważ jest to zasadniczo sterownik.

Cem Kalyoncu
źródło
Nie sądzę, aby programiści graficzni (eksperci OpenGL) mogliby ubiegać się o pracę programisty systemowego ...
Vaillancourt
Programowanie grafiki i programowanie OpenGL to dwie różne rzeczy. Jeden dotyczy algorytmów grafiki komputerowej, drugi dotyczy szczegółów API.
Cem Kalyoncu
0

Dodatkowe zalety wymienione powyżej dotyczą głównie programowania silnika gry, gdy jest to konieczne, a zatem wymaga użycia interfejsów API niskiego poziomu. Programowanie systemów wymaga od Ciebie wykonywania połączeń do dźwięku systemu operacyjnego, zarządzania procesami, manipulacji plikami, połączeń sieciowych i tak dalej ...

więcej witamin
źródło
-6

Ponieważ odnoszą się one do Visual Studio, programowanie systemu odnosi się do pisania programów specjalnie dla systemów operacyjnych Windows, co oznacza: syscalls systemu Windows (na przykład nie ma łańcucha fork-exec), konta użytkowników, gdzie umieścić określone dane użytkownika, modele udostępniania danych w okna Wyszukaj, na przykład, jak możesz sprawdzić bieżącego użytkownika w Visual C ++ lub jak rozpocząć nowy proces

Pojęcia dotyczące systemu operacyjnego, odnoszą się do planowania, abstrakcji plików, wątków, przestrzeni użytkownika itp. Os dev wiki i fora mogą być dobrą lekturą

Uwierzytelnianie użytkownika odbywa się na przykład w obu sekcjach, ponieważ Windows jest systemem operacyjnym dla jednego użytkownika, który ma znacznie głębszą integrację zarządzania użytkownikami i interfejsu użytkownika w jądrze.

Msdn jest bazą wiedzy dla wszystkich rzeczy związanych z programowaniem api, bibliotek itp. Systemu Windows https://msdn.microsoft.com/

Przepełnienie stosu dla faktycznego kodowania, jeśli utkniesz.

Git
źródło
Windows nie jest systemem operacyjnym dla jednego użytkownika.
Maximus Minimus,
A programowanie systemu nie oznacza pisania programów specjalnie dla danego systemu operacyjnego. Sterowniki mogą na przykład być łatwe dla wielu platform. Ponieważ rzeczywiste wywołania systemowe systemu Windows różnią się w zależności od wersji, zwykle jest obsługiwane przez kernel32.dll i user32.dll zamiast bezpośrednio komunikować się z jądrem.
Maciej Piechotka,
@MaciejPiechotka Programowanie systemowe programuje na poziomie zbliżonym do sprzętowego // systemu operacyjnego. Część sterownika, która jest wieloplatformowa, to interfejs API, a nie opakowanie syscall. W Linuksie syscalls są również pakowane w biblioteki, w przeciwnym razie nie można by zmienić implementacji poniżej. Na przykład uzyskanie temperatury procesora za pomocą rejestrów jest bardzo różne między osesami.
Git
@ LeComteduMerde-fou, jeśli spojrzysz tylko na sposób obsługi użytkowników, to tak. -> Klucze bezpieczeństwa (ctrl + alt + delete), GUI itp. Unix // BSD obsługuje użytkowników zupełnie inaczej
Git
@gismo Piszę sterowniki do życia - jest o wiele więcej sterowników, które nie są częścią systemu operacyjnego niż API;) Moje zdanie na temat wywołań systemowych było inne niż sterowniki. Oczywiście w Linuksie masz biblioteki, ale chodzi mi o to, że Linux ma ABI dla wywołań systemowych - tj. Wywołania systemowe, przynajmniej teoretycznie, są stabilne i udokumentowane (i są modelowane zgodnie z POSIX). W systemie Windows interfejs jądra <-> przestrzeni użytkownika nie jest uważany za stabilny we wszystkich wydaniach.
Maciej Piechotka