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

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

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

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

コメント

  • この定義は変更されており、システムプログラマー自身は'今日、独自の定義を確信しているようには見えません。この問題は通常、言語Xがシステムプログラミングに便利かどうかについて人々が議論するときに発生します…
  • @Denys S é guret-誰も同意できない場合は皮肉なことです"システムプログラミング"の出発点
  • Perlクックブックからの引用-第16章プロセス管理とコミュニケーション:"この章では、コマンドの起動と個別のプロセスの接続について説明します。それは、彼らの創造、コミュニケーション、そして究極の終焉を管理することです。システムプログラミングについてです。"

回答

私は個人的に Wikipediaの定義のように:

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

回答

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

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

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

回答

要するに:ドライバーやシステムユーティリティのOSのアップデートなど、OSの機能を拡張または強化するソフトウェアを作成する」 esまたは真新しいOS “es。

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

回答

WindowsAPIを直接使用するかつては、Windows用のアプリケーションを作成する一般的な方法でした。つまり、それはシステムプログラミングではありません。

システムプログラミングは単に「OSに近い」だけではありません。つまり、OSの作成はシステムプログラミングです。そのOSのビデオドライバー、ファイルシステムドライバー、ネットワークドライバーの作成はシステムプログラミングです。言語/チップセットの特定の組み合わせ用のコンパイラーの作成は、システムプログラミングです。

回答

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

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

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

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

システムプログラミングは、Cやアセンブリなどの自動ガベージコレクションを使用せずに、コンパイルレベルの低い言語で行われることが多く、 POSIXCインターフェース。

私はいくつかのシステムプログラミングトピックをカバーする実践的なチュートリアルを維持していますここ

a>。

回答

これを定義するときは、技術的な詳細を完全に避けます。そうすれば簡単になります。

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

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

この定義は当てはまりますが、視点、コンテキスト、および役割の問題です。コンピュータープログラマーにとって、プログラミングツールはアプリケーションです。エンドユーザーにとって、それらは意味がなく、全体像から外れています。

回答

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

コメント

  • これは'前の4つの回答で作成および説明されたポイントよりも実質的なものを提供していないようです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です