コンピューターの構造

最初のコンピューターが誕生してから現在に至るまで、コンピューターはコンピューティング、通信、輸送、エンターテイメントなどにおいて高い生産性を示しています。以下は私の個人的なコンピュータの理解です。

コンピュータの分野では、2人の偉大な開拓者、1人はチューリング、1人はフォンノイマンに言及する必要があります。チューリングはその仕事を成し遂げる方法を解決しました。彼はタスクをデータフローと制御フローに分割し、データフローは制御フローのガイダンスの下で最終結果を取得します。これは現在のソリューションプロジェクトにも当てはまります。データフローは一般的に使用されるデータ構造であり、制御フローはアルゴリズムです。Feng Neumannは、オペレーター、レジスター、および高速バスのコンピューター構造は広範囲に影響を及ぼし、これまでのところコンピューターはこのアーキテクチャーから逃れることはできないと提案しました。GPU、CPU、DSP、およびその他のインテリジェントハードウェアはすべて、1つ以上の機能の改善と最適化です。

半導体関連技術の発展に伴い、コンピューターの計算速度と記憶速度の容量は大幅な変化を遂げました。魔法のムーアの法則(価格が変わらない場合、集積回路に収容できるコンポーネントの数は18〜24か月ごとに2倍になり、パフォーマンスは2倍になります)法律。今日、算術プロセッサはすでにマルチコアGHzのコンピューティング速度を達成できます。理論上、中央プロセッサは1秒あたり10 ^ {10}の桁数を実行できます。この処理速度は、人々の処理速度をはるかに超えています。これはコンピュータの力のルーツの一つです。

コンピュータが自身の価値を反映したい場合は、対応するソフトウェアを開発する必要があります。では、通常のソフトウェアプログラムはコンピュータ上でどのように実行されるのでしょうか。

コンピュータの最下層は0と1の数字のみを認識します。中央計算ユニットは、要件に従って一連の命令をエンコードします。オペレーティングシステムは、命令に従ってAPIを提供します。コンパイル環境の開発者は、これらのAPIをカプセル化してSDKを取得します。ソフトウェア開発者は、SDKに基づいてソフトウェアを開発できます。コンピュータから上方を見ると、パッケージングの層があります。そして、コンピュータの実行プロセスは、これらのプロセスのまったく逆です。

したがって、まずソフトウェア開発者はタスクをコードに変換する必要があります。これは編集プロセスです。これには、データ構造の合理的な設計(クラスの高い凝集性と低い結合)、アルゴリズムの選択(空間と時間の複雑さ)などが含まれます。

次に、編集されたソフトウェアは、開発環境をコンパイルする必要があります。その中には、プログラムのプリコンパイルも含まれており(マクロはC言語で置き換えられています)、開発環境では、ファイルを基本単位としてコードを変換し、アセンブリ言語に変換する必要があります。各ファイルをコンパイルした後、対応するターゲットファイル。

もう一度、リンクします。コンパイルは、ファイルを基本単位として実行されます。コンパイルされたターゲットファイルには、他のファイルによって名前が付けられた変数または関数が含まれる場合があります。このプロセスでは、各ファイルをリンクする必要があります(Linuxシステムでは、makeファイルによって完了します)。最終的なリンクが形成されます。実行可能ファイル。動的ライブラリが静的に読み込まれると、動的ライブラリのコードが実行可能ファイルにコピーされ、最終的な実行可能ファイルは比較的大きくなります。動的読み込みが実行されると、関数のアドレスのみがここに記録され、形成される実行可能ファイルは小さくなり、メモリの占有量が少なくなります現在最も人気のある方法です。ただし、動的読み込みは動的ライブラリ読み込み関数に入る必要があるため、呼び出し時間が長くなる可能性があります。この手順の後、手順は完了です。

残りは実行部分です。実装プロセスについては、以下で詳しく説明します。

では、プログラムはどのようにプロセスになるのでしょうか。

最初に、アイコンまたは他のメソッドをダブルクリックしてプログラムをロードします(レジストリを起動するか、他のプロセスをロードします)。この時点で、オペレーティングシステムはプロセスのプロセス制御ブロックを作成し、それをCPUタスクキューに入れます。この時点で、プログラムは準備完了状態になり、CPUが実行されるのを待ちます。プロセスの実行順序は、他の記事のタスクスケジューリングを参照できます。プログラムがメモリに読み込まれるかどうかは、オペレーティングシステムによって異なります。ここでの読み込みは、仮想メモリ4G空間の位置(位置は固定)に基づいてアドレスを実際の物理アドレスにマッピングします詳細については、他のブログのメモリ管理を参照してください。

次に、プロセス条件が満たされると、CPUがプロセスを実行し、プロセスは実行状態になります。このとき、制御レジスターはアドレスに従って対応するコードとデータを見つけ、それを指定されたレジスターまたは他の拡張キャッシュに入れます。オペレーターはこれらのレジスターから操作を実行し、結果を別の指定されたレジスターに入れます。このサイクルが実行されます。

第3に、プロセス条件が満たされない場合、またはより高度なプロセスがCPUに優先する場合、現在のプロセスは、次に条件が満たされるまでCPUが実行されるまで、ブロッキング状態に保存されます。このとき、メモリ内のプロセスのデータは、オペレーティングシステムのディスクのSWAP領域に配置される場合があります(Windowsシステムは仮想メモリと呼ばれることが多く、実際には不正確です)。

最後に、プロセスが実行を終了するか、強制終了状態になると、プロセスは終了状態になります。このとき、プロセス関連のデータはメモリから削除されます。プロセス全体が終了します。

この時点で、人間の言語から機械コードまでのプロセスは、実現プロセスまで完了します。特定のアプリケーションに固有のこのコンピューターは、この構造に従って、複雑なモデルの高速計算と大規模システムのリアルタイム制御を実装できます。ただし、これらのモデルやシステムは一定の規則に従って人間が計算したものであり、コンピュータがうまく機能しているのはデータ転送です。今日の人工知能では、コンピューターが自己指定のルール(ビッグデータ)を完了するか、特定のルールに従ってコンピューターを一般化(ディープラーニング)してタスクを完了することを望んでいます。既存のフレームワークの下でそれを行うことができますか?音声認識と画像認識は、深層学習のトレーニングの下で​​多くの精度を向上させましたが、他の面で拡張することはできますか?

 

42件の元の記事を公開 賞賛4 10,000以上のビュー

おすすめ

転載: blog.csdn.net/wangyhwyh753/article/details/89455335