2

私は数年プログラミングをしていて、既存の/標準ライブラリを使用して独自の複雑なメソッドを作成する方法を知っています。私はいつも疑問に思っていました(たとえばJava)JavaでJFrameオブジェクトを作成するときにJFrameはどのように作成されますか?GUIまたはファイルの作成、ファイルの読み取りなどの複雑な操作をコーディングするために、標準コード(ライブラリなし)をどのように使用しますか。

私たちが使用するこれらすべての既存の方法を、ピラミッドを構築するために使用するビルディングブロックと比較できる場合。そもそもこれらのブロックはどのように作成されますか?(私は技術的に意味します)。標準ライブラリのないプログラミング言語は、変数、ループ、および数学です(そして、数学関数でさえ誰かによって作成されました)。

基本的な質問は、JavaまたはCまたはその他の言語(たとえば、Windowsで動作している場合)は、Windowsおよびその他の複雑な操作を作成するためにWindows .dllライブラリを呼び出すことによってすべての操作を完了しますか?

もしそうなら、これらの複雑な操作/メソッド/関数は、通常の変数、ループなどを使用してオペレーティングシステムでどのように作成されましたか。

プログラミングについての私の理解にはギャップがあります。コンピューターがバイナリー(電気=オン/オフ)を読み取ることを理解しています。誰かがアセンブリー/アセンブラーを作成して、バイナリーをより読みやすいコードに変換し、プロセッサー内のさまざまなレジスターから数値を移動します。これにより、基本的な数学、加算、減算、乗算、除算が可能になります。私の理解のギャップは、アセンブリから、変数を保持し、ループを実行し、GUI、オペレーティングシステムを作成するCのようなより高い言語へのジャンプです。

4

2 に答える 2

3

私はここで接続を述べようとしています(非常に)大まかなAFAIK

  • ハードウェア= 彼らの言語で指示された場合、実際に物事を行うことができます。つまり、電気パルス (電圧の高/低) の形で 1 と 0 のストリーム。
  • バス/ネットワーク= それらの電気パルスを供給/運ぶ
  • コントロール ユニット= CPU に常駐する重要なハードウェアの一部であり、バスを制御して信号/パルスをルーティングします。
  • 命令 (マシン コード) = コントロール ユニットが理解できる 1 と 0 のストリーム。これは、誰がそれを製造するかによって事前に決定されます。これにより、コントロール ユニットに、CPU レジスタ、メモリ、および I/O デバイス (つまり、コンピュータ ハードウェア) の操作方法を伝えることができます。
  • プロセス= メモリに常駐する一連の命令
  • オペレーティング システム= ハードウェアへのアクセスを提供する一連のプロセス。新しいプロセスは、既存のプロセスへのシステム コールで作成できます。syscall は人間が読める命令であり、最終的に機械コードに変換されます。
  • オブジェクト ファイル/バイナリ ファイル/実行可能ファイル= プロセスがメモリ内になく、実行もされていませんが、ディスクに存在する場合。CPU は BIOS に OS ローダーを探すように指示し、ブートローダーはマザー プロセスを開始して OS を開始し、そのマザー プロセスはディスクにある (カーネル) オブジェクト ファイルから他のプロセスを生成します。
  • アセンブラー= アセンブリ コードからオブジェクト コード (ファイル) を生成します。アセンブリコードは、CPUレジスタとメモリへの保存、ロード、さまざまなI / Oデバイスへの書き込み/シグナリングをすべて実行する、人間がすぐに読み取れる形式の命令です。
  • コンパイラ/インタプリタなど= 最終的により高水準の言語を命令に変換します (変数はメモリに格納され、ループはメモリ内のある場所から別の場所へのジャンプに変換されます。興味がある場合は、単純な C プログラムから生成されたアセンブリ コードを参照してくださいgcc -S source.c -o assembly.s)
  • プログラム (ソースコード) = 人間とコンパイラの両方が理解できる言語
  • ドライバー= ハードウェアとの通信に使用されるプログラム。特定のハードウェアを処理するために必要な命令を含むオブジェクト コードを生成します。プロプライエタリなハードウェアはその指示を明らかにしないため、バイナリをダウンロードする必要があります
  • ライブラリ/API = ディスクに格納されたオブジェクト コード/コンパイラが理解できるコードの一部であるため、プログラムを作成するたびに車輪を再発明する必要はありません。

したがって、Java から GUI を作成する場合、実際にはウィンドウ マネージャーに、ネイティブ メソッド呼び出しによって「半径 5px で角を丸くした 20x20 の長方形を描画する」という形式で GUI を作成するように要求し、ウィンドウ マネージャーはこの要求を OS プロセスに転送します。ドライバーを介して適切な命令をコントロール ユニットに転送すると、強力な CU がモニターに信号を送信して適切なピクセルに色を付け、GUI の感覚を与えます。

シンプルトンのように答えたり、トピック外の報告された質問に答えたりすることで、多くの反対票を獲得することを私は知っています:P

于 2012-07-24T20:04:44.163 に答える
1

あなたの質問に対する答えは非常に幅広く一般的なものですが、その答えにはオペレーティング システムの役割を理解することが含まれると思います。プログラムは、オペレーティング システムで許可されていないことは何も実行できません。また、プログラムの観点からオペレーティング システムへのインターフェイスが常に定義されています。このインターフェイスは、割り込みによるシステム コールのように非常に低レベルである場合もあれば、Win32 API の場合のように高レベルである場合もあります。これの多くは、ハードウェアとドライバーにも関係しています。ハードウェアなしではプログラムへの入力と出力を行うことができないためです。ハードウェアは、オペレーティング システムを介して最終プログラムから抽象化されます。例として、nVidia は、OpenGL、DirectX、WPF などの多くの API によって抽象化された Windows ドライバーを提供します。システム コールを介したビデオ カード ドライバへの低レベル アクセスを知っていれば、独自の API を作成できます。Java や C などのどの言語でも、これらのインターフェースを使用する必要があります。

それが役立つことを願っています...

于 2012-07-24T18:34:17.823 に答える