“시스템 프로그래밍”이란 무엇입니까?


33

저는 세계적으로 유명한 게임 개발 회사에서 게임 프로그래머로서 인턴쉽을 준비하고 있습니다. 필요한 전제 조건을 웹 사이트에서 검색했을 때 다음과 같이 표시되었습니다.

추가 된 이점

  • DirectX / OpenGL에 대한 지식
  • 3D 수학 및 물리학에 대한 강력한 명령.
  • C ++ 개발을위한 Visual Studio IDE.
  • 시스템 프로그래밍 및 OS 개념.

시스템 프로그래밍과 OS 개념이 정확히 무엇을 의미합니까?

Windows 프로그래밍을 공부해야합니까? 또는 Linux 프로그래밍을 진행해야합니까 (중요한 개념을 알고 싶어 함). 아니면 완전히 다른 것입니까?


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Josh

"Windows 프로그래밍을 공부해야합니까? 아니면 Linux 프로그래밍을 사용해야합니까?" 최소한 API를 읽었을 수도 있습니다. 각 OS API로 간단한 '창 열기'를 시도하여 서로 다른 점과 노력이 무엇인지 배울 수 있습니다.
Pharap

@Pharap 기술적으로, 윈도우를 열 수있는 Linux "OS API"는 없으며 X 및 Wayland (및 Windows 및 macOS)와 함께 작동하도록 glut, glfw 또는 이와 유사한 방법을 사용하여 윈도우를 여는 것이 좋습니다.
Majora320

@ Majora320 아니요, 그러나이를 처리하는 셸 API가 있으며 Linux 배포판에 고유 한 경향이 있습니다 (즉, X는 일부 Linux 배포판에서 사용되지만 일반적으로 Windows 및 Mac에서는 사용되지 않음). glut / glfw / SDL / 무엇이든 사용할 수있는 중요한 점은 OP가 구현을 사용하여 기본 개념 (이벤트 메시지, 사용자 영역 대 os 영역 등)에 대해 배울 수 있도록 낮은 수준의 접근 방식을 취하는 것입니다. 휴대용 / 상위 API는 학습 과정을 방해 할 수있는 많은 것들을 추상화하는 경향이 있습니다.
파라

@Dhannanjai 대담한 경우 운영 체제 DeMYSTiFieD 라는 책을 추천하고 싶습니다 . 그것은 대학 시절에 하드웨어 부서에서 많은 도움이되었습니다. POST, 스레드 스케줄링 기술 (라운드 로빈, 정렬 된 대기열 등) 및 드라이버와 같은 운영 체제의 많은 중요한 개념을 설명합니다.
파라

답변:


54

"시스템 프로그래밍"(또는 "시스템 프로그래밍")은 (예를 들어) 게임 플레이 프로그래밍보다 낮은 수준의 추상화에서 수행되는 프로그래밍을 의미하는 경향이 있습니다. 게임 플레이 프로그래밍은 일반적으로 사용자가 볼 수있는 실제 게임 메커니즘 및 전면 기능을 구축하는 데 관한 것이며 시스템 프로그래밍은 게임 플레이 프로그래머가 작동하는 프레임 워크를 구축하는 것에 관한 것입니다.

그래픽, 리소스로드 및 스트리밍, 오디오, 메모리 관리, 파일 IO, 플랫폼 추상화 API 등을 의미 할 수 있습니다. 세부 사항은 상당히 다양하며 게임 산업에는 직책에 대한 표준이 없기 때문에 프로그래밍 도메인 이름에 대한 표준도 비슷하지 않습니다. 한 스튜디오에서 "시스템 프로그래밍"은 위에 나열된 모든 것을 의미합니다. 또한 "그래픽 프로그래밍"을 별도의 도메인으로 구분하고 게임 플레이 프로그래밍이 아닌 다른 모든 작업을 "시스템 프로그래밍"이라고 부릅니다. 또 다른 경우에는 용어를 전혀 사용하지 않고 "엔진 프로그래밍"이라고 부르기도합니다.

하위 수준의 도메인이며 일반적으로 게임이 구축되는 플랫폼에 대해 플랫폼 별 API와 직접 직접 인터페이스되므로 일반적으로 해당 플랫폼에 대한 지식이 있으면보다 일반적인 도메인에 대한 지식이있는 것처럼 도움이됩니다 (예 : 가상 메모리, 스레드 작동 방식, IO 버퍼링 작동 방식 등과 같은 특정 OS 작동 방식에 관계없이 OS 개념


2
간단히 말해서, 비 시스템 프로그래밍 (실제 게임)은 대부분 플랫폼과 무관하며 (Mac / PC / Xbox 인 경우에는 신경 쓰지 않아도 됨) 시스템 프로그래밍 은 훨씬 더 플랫폼에 따라 다릅니다 (순서대로) 비 시스템 프로그래머를위한 플랫폼 독립적 계층 제공)
TripeHound

22

조쉬의 대답은 정말 좋지만, 내가 일하는 시스템 팀에 대한 글 머리 기호를 버리겠다고 생각했습니다. 나는 시스템에서 일하지 않지만 많은 시스템에서 일합니다. 시스템 팀의 책임은 회사마다 다릅니다.

Google 시스템 팀은 다음과 같은 많은 작업을 담당합니다.

  • 수학 라이브러리
  • STD 교체 라이브러리
  • 핵심 게임 프레임 워크
  • 핵심 응용 프로그램 프레임 워크
  • 입력
  • 이벤트 메시징
  • 컴포넌트 엔터티 시스템
  • 스크립트 바인딩
  • (그리고 더)

여기에는 많은 Windows 및 Linux 도메인 지식과 물리학, 핵심 게임 로직 및 저수준 메모리 관리에 대한 많은 지식이 있습니다. 대부분의 프로젝트는 각 OS에 상당히 낮은 수준으로 있기 때문에 시스템 팀은 일반적으로 지원되는 각 OS의 적어도 일부에 참여합니다.

"시스템"팀에 속할 수있는 몇 가지 사항은 별도의 팀으로 나뉩니다 (그러나 시스템 팀은 여전히 ​​매우 심하게 상호 작용합니다).

  • 물리학
  • 리눅스 (전용 서버)
  • 다른 OS (iOS / Mac / Consoles / etc)에 대한 직접적인 지원
  • 시스템 구축
  • 오디오

0

시스템 프로그래밍은 잘 정의되어 있지만 회사는 필요에 따라이를 확장하려고합니다. 시스템 호출을 사용하거나 작성중인 경우 시스템 프로그래밍을 수행하고 있습니다. 시스템 호출은 커널 또는 사용자 공간 드라이버가 제공하는 기능입니다. 기본적으로 드라이버이므로 OpenGL이 포함됩니다.


그래픽 프로그래머 (OpenGL 전문가)가 시스템 프로그래머 작업에 적용 할 것이라고 생각하지 않습니다.
Vaillancourt

그래픽 프로그래밍과 OpenGL 프로그래밍은 서로 다른 두 가지입니다. 하나는 컴퓨터 그래픽 알고리즘을 다루고 다른 하나는 API의 특정 사항을 다룹니다.
Cem Kalyoncu

0

위에 나열된 추가 이점은 주로 필요한 경우 게임 엔진 프로그래밍에 대한 것이므로 저수준 API를 사용합니다. 시스템 프로그래밍은 OS 오디오, 프로세스 관리, 파일 조작, 네트워크 호출 등에 대한 호출 방법을 알고 있어야합니다.


-6

그것들은 Visual Studio를 참조하기 때문에 시스템 프로그래밍은 Windows 운영 체제를 위해 특별히 프로그램을 작성하는 것을 의미합니다. 예를 들어 Visual C ++에서 현재 사용자를 확인할 수있는 방법 또는 새 프로세스를 시작하는 방법

OS 개념, 스케줄링, 파일 추상화, 스레드, 사용자 공간 등을 참조하십시오. os dev wiki 및 포럼은 잘 읽을 수 있습니다.

Windows는 단일 사용자 운영 체제이므로 사용자 관리 및 사용자 인터페이스의 커널 통합이 훨씬 깊기 때문에 사용자 인증은 두 섹션 모두에 해당됩니다.

msdn은 Windows 프로그래밍 API, 라이브러리 등 모든 것에 대한 지식 기반입니다 https://msdn.microsoft.com/

붙어있는 경우 실제 코딩에 대한 스택 오버 플로우.


Windows는 단일 사용자 OS가 아닙니다.
Maximus Minimus

그리고 시스템 프로그래밍은 주어진 OS를 위해 특별히 프로그램을 작성하는 것을 의미하지는 않습니다. 예를 들어 드라이버는 쉽게 크로스 플랫폼 일 수 있습니다. 실제 Windows syscall은 릴리스마다 다르므로 일반적으로 커널과 직접 대화하는 대신 kernel32.dll 및 user32.dll을 통해 처리됩니다.
Maciej Piechotka

@MaciejPiechotka Systemsprogramming은 하드웨어 운영 체제 근처에서 프로그래밍합니다. 크로스 플랫폼 드라이버의 일부는 syscall 래퍼가 아닌 API입니다. Linux에서 syscall은 라이브러리에서도 래핑됩니다. 그렇지 않으면 구현을 변경할 수 없습니다. 예를 들어 레지스터를 통해 CPU temp를 얻는 것은 oses마다 매우 다릅니다.
Git

@ LeComteduMerde-fou 사용자가 처리되는 방식 만 살펴보면 바로 그 것입니다. -> 보안 키 (ctrl + alt + delete), GUI 등. Unix // BSD는 사용자가 완전히 다른 것을 처리합니다
Git

@gismo 나는 생활을위한 드라이버를 작성합니다-API에 대한 OS 특정 부분이 아닌 드라이버에 훨씬 더 있습니다.) syscalls에 대한 나의 요점은 about 드라이버와 분리되었습니다. 물론 리눅스에는 라이브러리가 있지만 제 요점은 리눅스가 syscalls에 대한 ABI를 가지고 있다는 것입니다. Windows의 경우 userspace <-> 커널 인터페이스는 릴리스에서 안정적인 것으로 간주되지 않습니다.
Maciej Piechotka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.