システムプログラミングとは正確には何ですか?


26

システムプログラミングの意味を理解したことがありません。与えられる通常の定義は、「... Osに近い何かをするか、Os機能を拡張する...」です。

一部のライブラリではなくWindows APIを直接使用して、ファイルI / Oがシステムプログラミングを行うと言っていますか?Android OSシステムプログラミングを書いていましたか?Androidのアプリのようなコンソールを介してLinuxカーネルを公開するようなものを書いたら、システムプログラミングをしていますか?洗濯機を制御するソフトウェアを書いている場合、システムプログラミングを書いていますか?

私はプログラミングの初心者であり、これは私を終わりのない混乱させています。「アプリケーションプログラミング」と対比して説明してください。


2
この定義は変更されており、システムプログラマー自身は今日、独自の定義を確信していないようです。人々は...言語Xは、システムプログラミングのための便利であるかどうかについて討論するとき、この問題は通常くる
デニス・Séguret

@DenysSéguret-皮肉なことに、「システムプログラミング」が何で始まるかについて誰も同意できない場合。
ジョン

回答:


19

私は個人的にウィキペディア定義が好きです:

システムプログラミング(またはシステムプログラミング)は、システムソフトウェアをプログラミングする作業です。システムプログラミングの主な特徴は、アプリケーションプログラミングと比較した場合、アプリケーションプログラミングはユーザーにサービスを提供するソフトウェア(ワードプロセッサなど)を生成することを目的とするのに対し、システムプログラミングはコンピュータハードウェアにサービスを提供するソフトウェア(ディスクデフラグ)。これには、より高度なハードウェア認識が必要です。


12

その質問を決定する際に練習を積むためにあなた自身に尋ねることができるいくつかの質問があります。

  • システムはもともとこのプログラムなしで販売されていましたか?Angry Birdsはスマートフォンの「キラーアプリ」(誰かがそれを買う理由)かもしれませんが、それはまだ電話が導入されてからずっと後に書かれた独立したサードパーティのアプリです。それを書くのはアプリケーションのプログラミングだったでしょう。しかし、同じスマートフォンのディスプレイドライバーは、まったくそれを使用するために不可欠であるため、システムプログラミングでした。
  • コードを大幅に書き換えずに別のプラットフォームに移植することを想像できますか?TeXは、troffほとんど変更のないほぼすべてのシステムに移植されているため、一般的に使用されるツールチェーンの下部に配置されていても、アプリケーションです。TeXが出力を書き込むファイルシステム(UFSやVFATなど)は、境界線の場合です。ファイルシステムがまったく素晴らしいものであれば別のOSに移植することもできますが、通常、人々は素晴らしいアイデアを引き継ぎ、独自のOS用に独自のファイルシステムを作成します。それがファイルシステムシステムソフトウェアになります。
  • 機能はカーネルまたは別のバイナリに実装されていますか?(ここでもファイルシステムは中間的な位置を占めます。多くのファイルシステムの多くの部分は実際にはカーネルコードですが、多くはユーザー空間にかなりの部分を持っています。)グラフィックディスプレイドライバーは原則としてプラグ可能な外部コンポーネントですが、しばしば実装されますカーネル内、または少なくともカーネル(またはハードウェア)に直接アクセスする特権が必要です。それはシステムのプログラミングでしょう。一方、グラフィックディスプレイスタックを使用するコンピューターゲームはアプリケーションです。

あなたの質問に、Android OSを書くことは間違いなくシステムプログラミングでした。Windows API呼び出しを使用するプログラムの作成は、アプリケーションプログラミングです。SDLやOpenGLなどのクロスプラットフォームライブラリを使用した場合のように移植性はありませんが、原則として移植でき、サードパーティコードであり、ユーザー空間で実行されます。Linuxカーネルの状態を公開するコンソールアプリは、興味深い思考実験です。Linuxの構造( "Linux"はディストリビューションではなくカーネルのみであることに注意してください)を作成し、おそらく使用するために、多くのことを知っている必要があるので、間違いなくシステムプログラミングが必要です。


4

つまり、ドライバー、OSのシステムユーティリティの更新、さらには新しいOSなど、OSの機能を拡張または強化するソフトウェアを作成することです。

主にメモリ管理が含まれます。ネットワーク、ファイルアクセス、デバイス管理など、広義のI / O操作。プロセス管理(マルチタスク、プロセス管理など); ユーザー<->システム相互作用メソッド(インとアウトの両方)とユーザー管理。基本的に、アプリケーションではないOSの一部であるものはすべて、システムプログラミングです。


3

Windows APIを直接使用することは、ある時点では、Windows用のアプリケーションを作成する一般的な方法でした。いいえ、システムプログラミングではありません。

システムプログラミングは、「OSに近い」だけでなく、コンピューターシステムの中核機能に不可欠なものです。したがって、OSの作成はシステムプログラミングです。そのOS用のビデオドライバー、ファイルシステムドライバー、ネットワークドライバーの作成は、システムプログラミングです。言語/チップセットの特定の組み合わせ用のコンパイラを書くことは、システムプログラミングです。


1

通常、「非技術的なエンドユーザーが存在することを知らない、または使用していることや何をしているのかを明確に知らない低レベルのもの」を指します。

多くの場合、システムプログラミングと見なされるいくつかの例:

  • オペレーティングシステムとドライバー
  • コンパイラ
  • エミュレーターと仮想化
  • ディストリビューションの作成、つまりユーザーランドイメージの作成。

    これには通常、C標準ライブラリ、initシステム、およびシェルなどの基本的なユーザーランドコンポーネントの選択が含まれます。

システムプログラミングは多くの場合、Cやアセンブリのような自動ガベージコレクションを行わずに低レベルのコンパイル済み言語で行われ、POSIX Cインターフェイスを介してあまり一般的ではないシステムコールにアクセスする傾向があります

ここでは、いくつかのシステムプログラミングのトピックをカバーするハンズオンチュートリアルを維持しています


0

これを定義するときは、技術的な詳細を完全に明確にする必要があります。その後、簡単になります。

アプリケーションを使用すると、ユーザーは何らかのテクノロジーを使用して有用なことを実行できます。そのため、アプリケーションプログラミングは、ユーザーに機能を非常に直接提供することを目的としています。

一方、システムプログラミングは、アプリケーションプログラミングを可能にするための基盤となります。ユーザーにではなく、アプリケーションプログラマに機能を提供します。

この定義は保持されますが、それは視点とコンテキストと役割の問題です。コンピュータープログラマーにとって、プログラミングツールはアプリケーションです。エンドユーザーにとっては、彼らは無意味であり、写真からは見えません。


-3

要するに、アプリケーションプログラミングと比較した場合のシステムプログラミングは、SPがOSソフトウェアを処理してハードウェアリソースを処理し、APがエンドユーザーのアクティビティを処理するということです。


4
これは、前の4つの回答で作成され説明されたポイントに対して実質的な何かを提供していないようです
-gnat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.