「システムプログラミング」とはどういう意味ですか?


33

世界的に有名なゲーム開発会社でゲームプログラマーとしてインターンシップを準備しています。彼らのウェブサイトで必要な前提条件を検索したところ、次のことがわかりました。

追加された利点

  • DirectX / OpenGLの知識。
  • 3D数学と物理学に関する強力なコマンド。
  • C ++開発用のVisual Studio IDE。
  • システムプログラミングとOSの概念。

システムプログラミングとOSの概念とはどういう意味ですか?

Windowsプログラミングを勉強すべきですか?または、Linuxプログラミングを使用する必要があります(重要な概念を知ってほしいという意味です)。それともまったく違うものですか?


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ジョシュ

「Windowsプログラミングを勉強すべきか、それともLinuxプログラミングを勉強すべきか」両方の可能性がある場合。少なくともそれらのAPIを読んで、多分それぞれのOS APIで単純な「ウィンドウを開く」ことを試して、それらがどれほど違うか、どんな努力ができるかを学んでください。
ファラプ

@Pharap技術的には、ウィンドウを開くことができるLinux "OS API"はありません。XとWayland(およびWindowsとmacOS)の両方で動作するように、ウィンドウを開くにはglut、glfwなどを使用することをお勧めします。
Majora320

@ Majora320いいえ、しかしそれを処理するシェルAPIがあり、Linuxディストリビューションに固有である傾向があります(つまり、Xは一部のLinuxディストリビューションで使用されますが、通常はWindowsおよびMacでは使用されません)。glut / glfw / SDL / whateverを使用することもできますが、重要な点は、OPが実装を使用して基礎となる概念(イベントメッセージ、ユーザーランドvs OSランドなど)を学習できるように低レベルのアプローチを取ることです。ポータブル/高レベルAPIは、学習プロセスを妨げる可能性のある多くのものを抽象化する傾向があります。
ファラプ

@Dhannanjai私がとても大胆であれば、Operating Systems DeMYSTiFieDという本をお勧めします。ハードウェアユニットの期間中、大学時代に大いに役立ちました。POST、スレッドスケジューリング手法(ラウンドロビン、順序付けされたキューなど)、ドライバーなど、オペレーティングシステムの重要な概念の多くを説明しています。
ファラプ

回答:


54

「システムプログラミング」(または「システムプログラミング」)とは、(たとえば)ゲームプレイプログラミングよりも抽象化のレベルが低いプログラミングを意味する傾向があります。通常、ゲームプレイプログラミングは、ユーザーに表示される可能性のある実際のゲームメカニクスと正面向きの機能を構築することです。一方、システムプログラミングは、ゲームプレイプログラマが動作するフレームワークを構築することです。

これは、グラフィック、リソースのロードとストリーミング、オーディオ、メモリ管理、ファイルIO、プラットフォーム抽象化APIなどを意味する場合があります。詳細はかなり異なり、ゲーム業界には役職の標準がないため、プログラミングドメインの名前にも同様の標準はありません。あるスタジオでは、「システムプログラミング」が私が上に挙げたすべてを意味していることに気付くかもしれません。また、「グラフィックスプログラミング」を別個のドメインとして区別し、ゲームプレイ以外のプログラミングタスクをすべて「システムプログラミング」と呼ぶことがあります。さらに別の場合、彼らはこの用語をまったく使用せず、単に「エンジンプログラミング」と呼びます。

それは低レベルのドメインであり、通常、ゲームが構築されているプラ​​ットフォームのプラットフォーム固有のAPIとより直接的にインターフェースすることを含むため、より一般的なドメインの知識を持っているのと同様に、それらのプラットフォームの知識を持っていると役立ちます(例: 、仮想メモリとは何か、スレッドがどのように動作するか、IOバッファリングがどのように動作するかなど、特定のOSがどのように機能するかを考慮しないOSの概念。


2
一言で言えば、非システムプログラミング(実際のゲーム)はほとんどプラットフォームに依存しない(Mac / PC / Xboxの場合は気にしないでください)が、システムプログラミングはプラットフォーム固有(順序どおり)になります非システムプログラマーにプラットフォームに依存しないレイヤーを提供します)。
-TripeHound

22

Joshの答えは本当に良いのですが、私が働いているSystemsチームについてのいくつかの箇条書きを投げ捨てると思いました。私はシステムの仕事をしていませんが、私は彼らとたくさん仕事をしています。システムチームの責任は、会社によって大きく異なります。

私たちのシステムチームは多くのことを担当しています:

  • 数学ライブラリ
  • STD交換ライブラリ
  • コアゲームフレームワーク
  • コアアプリケーションフレームワーク
  • 入力
  • イベントメッセージング
  • コンポーネントエンティティシステム
  • スクリプトバインディング
  • (もっと)

ここには、WindowsおよびLinuxドメインに関する多くの知識があり、物理学、コアゲームロジック、低レベルメモリ管理に関する多くの知識もあります。プロジェクトのほとんどは各OSにかなり低いレベルで配置されるため、システムチームは通常、サポートされる各OSの少なくとも一部に関与します。

「システム」チームに分類される可能性のあるいくつかのことは、別々のチームに分かれます(ただし、システムチームはまだかなりやり取りしています)。

  • 物理
  • Linux(専用サーバー)
  • 他のOS(iOS / Mac / Consoles / etc)の直接サポート
  • ビルドシステム
  • オーディオ

0

システムプログラミングは非常に明確に定義されていますが、企業はそれをニーズに合わせて拡張しようとしています。システムコールを使用または作成している場合は、システムプログラミングを行っています。システムコールは、カーネルまたはユーザースペースドライバーによって提供される機能です。これには基本的にドライバーであるOpenGLが含まれます。


グラフィックプログラマー(OpenGLの専門家)がシステムプログラマーの仕事に当てはまるとは思わない...
Vaillancourt

グラフィックスプログラミングとOpenGLプログラミングは2つの異なるものです。1つはコンピューターグラフィックスアルゴリズムを扱い、もう1つはAPIの詳細を扱います。
Cem Kalyoncu

0

上記の追加の利点は、必要に応じて主にゲームエンジンのプログラミングに使用されるため、低レベルのAPIを使用することです。ここでのシステムプログラミングは、OSオーディオ、プロセス管理、ファイル操作、ネットワーク呼び出しなどの呼び出し方法を知っていることを期待しています...


-6

Visual Studioを参照しているため、システムプログラミングは、Windowsオペレーティングシステム専用のプログラムを記述することを意味します。つまり、Windowsのsyscalls(fork-execチェーンがないなど)、ユーザーアカウント、ユーザー固有のデータの配置場所、データ共有モデルwindowsルックアップ、たとえば、Visual C ++で現在のユーザーを確認する方法、または新しいプロセスを開始する方法

OSの概念。スケジューリング、ファイルの抽象化、スレッド、ユーザースペースなどを参照してください。osdev wikiおよびフォーラムは良い読み物です。

たとえば、Windowsは単一のユーザーオペレーティングシステムであり、ユーザー管理とユーザーインターフェイスのカーネル統合がはるかに深いため、ユーザー認証は両方のセクションにあります。

msdnは、WindowsプログラミングAPI、ライブラリなどに関するすべての知識ベースですhttps://msdn.microsoft.com/

スタックしている場合の実際のコーディングのStackoverflow。


WindowsはシングルユーザーOSではありません。
マキシマスミニマス

また、システムプログラミングとは、特定のOS専用のプログラムを記述することではありません。たとえば、ドライバーは簡単にクロスプラットフォームにできます。実際のWindowsシステムコールはリリースごとに異なるため、通常はカーネルと直接対話するのではなく、kernel32.dllとuser32.dllを介して処理されます。
マチェイピエチョトカ

@MaciejPiechotka Systemsprogrammingは、ハードウェア//オペレーティングシステムに近いレベルでプログラミングしています。クロスプラットフォームであるドライバーの部分は、syscallラッパーではなく、apiです。Linuxでは、syscallsもライブラリにラップされます。そうでない場合、下の実装を変更することはできません。たとえば、レジ​​スタを介してCPUの一時値を取得することは、システム間で非常に異なります。
Git

@ LeComteduMerde-fouは、ユーザーがどのように処理されるかを見るだけの場合です。->セキュリティキー(ctrl + alt + delete)、GUIなど。Unix// BSDはユーザーを完全に異なる方法で処理します
Git

@gismo私は生活のためのドライバーを書いています-ドライバーにはOS固有の部分ではなくAPIに比べてはるかに多くのことがあります;)syscallについての私のポイントは、ドライバーについてです。もちろんLinuxにはライブラリがありますが、私のポイントは、Linuxにはシステムコール用のABIがあることです。つまり、少なくとも理論的には、システムコールは安定して文書化されています(そしてPOSIXに基づいて厳密にモデル化されています)。Windowsの場合、ユーザー空間<->カーネルインターフェイスはリリース間で安定しているとは見なされません。
マチェイピエチョトカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.