(以下の内容を慎重ハッハッハ見て、照合されていません)
はじめの知識:
メインメモリは:格納プログラムとコンピュータの動作中に必要なデータに使用されるストレージシステムの中核であり、CPUが直接ランダムにアクセスできます。
(メインメモリは読み出しおよび書き込み動作は、コントローラの制御下で行われ、読み取り専用または書き込み可能に、正しい読み取りおよび書き込み動作を達成するために、コントローラからのコマンドを受信した後)
CPU:コンピュータの全体のコアと、命令ストリームは、空間的に正確に時間制御の実施形態であるデータストリームです。
(命令ストリーム:それがCPUによって実行される命令のシーケンスを指し、データ・ストリーム:指示操作手段が順次アクセスデータシーケンスに記載)
問題を解決するためにコンピュータを使用している場合は、まずこの問題解決のためのプログラムを準備する必要があり、そしてプログラムは、命令の順序集合です。
長いメインメモリへのプログラムのように、「ストアドプロシージャ」の概念に基づき、自動的に完全なタスクがフェッチすると、コンピュータが命令を実行します。
(前提がメインメモリにロードされたプログラムである間に実行されるプログラムは、実行CPU用に呼び出さなければなりません)
だから、どのようにメインメモリにプログラムするには?
1.プログラムは、リンクがロードされています
フローチャートは、おおよそ次の通り:
次のように具体的なプロセスは、次のとおりです。
(1)コンパイル(一般的な高レベル言語コンパイラは、これらのプロセスを、前処理コンパイル及び組み立てされます)
ユーザー源(例えば.cファイルなど)コンパイル済みのオブジェクトモジュール(.OBJアセンブリ言語または機械語)
前処理:
チェンDuiyuanは、次の操作を行うためのコードをプリコンパイル:
すべての注釈を削除します
すべての#defineを削除し、すべてのマクロ定義を展開します
#INCLUDEファイル注は、ソース内の対応する場所にファイルの内容を挿入する処理を再帰的に実行される含みます
C言語をコンパイルするには、次のコマンドを使用して、gccとファイルhello.iにプリコンパイル済みの結果を出力します
gcc -E hello.c -o hello.i
コンパイル:
ファイルの後のコード生成と最適化アセンブラ対応する中間ファイルを生成するために、字句解析、構文解析、意味解析を前処理コンパイルされます。私たちは、前処理後のファイルをコンパイルするには、次のコマンドを使用します。
gcc -S hello.i -o hello.s
あるいは、我々はまた、プリコンパイルされ、1つのステップに結合することができます
gcc -S hello.c -o hello.s
具体讲解一下编译过程:(后续完成)
词法分析:
语法分析:
语义分析:
中间代码生成:
代码优化与目标代码生成:
アセンブリ:
目的は、命令のほとんどすべてのマシン命令の対応は、コンパイルプロセスが比較的単純であるため、機械命令にアセンブラアセンブリコードをコンパイルすることです。私たちは、コンパイルを達成するために、次のコマンドを使用することができます
gcc -c hello.s -o hello.o
それとも我々はまた元に直接コードファイルはオブジェクトファイルにコンパイルされていることができます
gcc -c hello.c -o hello.o
ファイルを生成した組み立て作業は、それらの間のわずか数の微妙な違いがあり、ターゲットの実行可能ファイル構造は一貫して、対象のファイル(オブジェクトファイル)と呼ばれます。ターゲットファイルが実行されていない、目的のファイルがリンクされた後に実行可能ファイルを生成することができ、このステップを経るためにそれをリンクします。
(2)リンク
ターゲットの複数のモジュールは、フォームライブラリをコンパイルして、所望のロードモジュールを形成するためにそれらを一緒にリンクします。(ロードモジュール、統一アドレス空間を有するが、それは、参照アドレスである「0」のいずれかに基づいている間)
(3)負荷
ロードモジュール実際の物理メモリアドレス空間、プログラムアドレスに関連付けられたコードを変更します。(このプロセスは、アドレス再配置と呼ばれています)。
メモリへのプログラムは、オペレーティング・システムは、必要なリソースのメモリに新しいジョブの割り当てのためのプロセスを作成し、それが(アプリケーションのブランクのPCB、初期化プロセスの説明は、プロセスのためのリソースやストレージ容量を割り当てるため、プロセスが実行可能待ち行列に挿入され、 )で
これは、ストレージ管理オペレーティングシステムに関係するメモリ負荷の人々です。(メモリ?連続領域または不連続領域の領域にどのプログラム?)
ここでは、一般的にページングされたメモリ管理、ストレージ管理セグメント、セグメントページのストレージ管理および仮想メモリ管理を必要とするだろう。
プログラムをロードした後に、CPUの命令の実行にそれを制御する方法?
メインメモリの2.CPU基本的な操作
CPU、メインメモリの読み出し及び書き込み動作、最初は、アドレスバス上のCPUアドレス信号が与えられ、その後、対応する読み出し又は書き込みコマンドを発行し、データ・バス上で情報を交換します。次のように基本的な読み出し動作は以下のとおりです。
質問があるので、彼らはどこから来たアドレスがCPUの始まりを合図しますか?
ときにCPU、メインメモリ、およびI / Oデバイスが、バスの同じセットに取り付けられたので、CPUのI / Oデバイスその交換情報を主記憶されている:(バスでプログラムへのI / Oソフトウェアプログラムのユーザ(現在、一般的に単一のバス構造プログラムの実行、プログラム命令シーケンスの開始アドレス、即ち、メモリのアドレスの開始前にCPUとメインメモリ)から構成されるホストへの入力情報(に)他のタスクを処理し続けることができる場合にPCにプログラムの最初の命令第1のメモリ読み出し命令からの指示に従ってPCのCPU(フェッチ))。
コンパイル中に生成されたプログラムのオブジェクトコードに、マシン固有の機械語への中間コードによってコード生成アルゴリズム。以下のような:
したがって、適切な命令がプログラムメモリにロードされます。
3.CPUスケジューリングプロセスの実行プログラム