プログラマは、知識ディスクのハードコアを理解する必要があります

この記事では、突くしてください記事の歴史の中で第四シリーズ「ハードコアプログラマは知識を知っている必要があります」です

プログラマは、ハードコア知識記憶を理解する必要があります

プログラマは、CPUのハードコアな知識を理解する必要があります

バイナリプログラマは、知識のハードコアを理解する必要があります

我々はすべて知っているように、コンピュータの5つの基本要素である存储器、、 、控制器 ストレージ機能の観点から、メモリに分けることができる紹介されている私たちの上記の記事のメモリ、そしてこの記事で、私たちは、ディスクを導入し、メモリとディスクの間の関係。运算器输入和输出设备内存磁盘

ディスクを認識

まず、ディスクとメモリがメモリ機能を持っている、彼らは記憶装置です。違いは、メモリを介して、ということである电流磁気ディスクを介して行われ、記憶可能な磁记录技术実施店舗。メモリは高速で、詐欺高価なストレージ・デバイス、およびディスクが遅くなり、安価なストレージデバイス詐欺、コンピュータの電源がオフにされ、メモリ内のデータが失われ、ディスク上のデータを長期保存することができます。メモリが属し内部存储设备、それは、ハードドライブの一部です、外部存储设备一般的には、当社のコンピュータ、ディスクとメモリが共同作業を協力しています。

一般に、メモリメインメモリに(CPUの動作プログラム及びデータを格納するための責任)を指す。(ソフトディスク、フロッピーディスクと呼ぶ)は、以下である初期ディスク、フロッピーディスクを指し

(2000年に私は私の最初のコンピュータの叔母はこれを見ていた、まだ今それを知って、それが何であるかを知りませんでした。)

ディスクは現在一般的に使用されるハードディスク(ハードディスク、略してハードディスク)は、次のようです

プログラムが実行されませんメモリに読み込まれません

ディスクを理解する前に、あなたはまた、CPUの読み取り使って、プログラム命令の実行を達成するために、私たちのプログラムは、記憶装置に格納され、メモリの仕組みを実行する方法を知っておく必要があります。このメカニズムが呼び出され存储程序方式、このように今当たり前のように見えますが、コンピュータの配線を変更することで、コマンドを読み書きするために、以前のプログラムを実行しています。

主要コンポーネントは、コンピュータ・メモリ、ディスク記憶装置です。プログラムに保存されているディスクを実行するためにメモリにロードされなければならないディスクプログラムに保存され、解析のための責任とCPUのプログラムの内容を実行しますが、プログラム命令を読み出すためのプログラムカウンタによってメモリアドレスを指定する必要があるため、直接実行することはできませんA。

ディスク部材

ディスクキャッシュ

私たちは、上記のディスクを述べ、及びメモリは、多くの場合、共生関係、相互の協力で、お互いとの良好な協力関係を保持しています。すべてのメモリは、ディスクのデータから読み込まれます同じ内容を読み取るためにバインドされているので、役割は、我々は多くの場合、読み取りに必要なコンテンツを格納するための責任があるがあるでしょう。ソフトウェアが頻繁に使用されたときに我々は、すべてがそう缓存技术、その後、ハードウェアレベルも例外ではありません、ディスクキャッシュ、ディスクキャッシュが呼び出されるがあります磁盘缓存

これは、次のステップは、同一のコンテンツを読み取る際には、そのように、それは実際のディスク、ディスクキャッシュではなくによって読んでいないので、データ・ストレージ・モードにディスクメモリから読み出されたディスクキャッシュを指し取ります。技術やフレームワークの特定の種類の出現は、問題に対処するために、ディスクキャッシュが大幅ますバインドされているディスクアクセスの速度を向上させます

Windowsオペレーティングシステムでは、/ディスクキャッシュ技術は、しかし、それはほとんどのユーザーは、ディスクキャッシュを感じるし、コンピュータのハードディスクの進化とアクセス速度も進化しているため、実際のWindows 95のディスクキャッシュです提供します98は、すでに収集するために始めていました。

高速低速デバイス装置に記憶されたデータは、直接リモートWebサーバにウェブに、このようなキャッシュは広く使用されている、所望の高速デバイス、ウェブブラウザから読み出され、ネットワークを介してデータを取得することができますそれを表示します。したがって、拡大画像を読み込むとき、それは、Webブラウザがディスクに保存されたデータを得ることができたときに、多くの時間を過ごすことになりますし、必要に応じてそれは、ロードされた再せずに再読み込みされたときに、データを表示します。

仮想記憶

虚拟内存第二のメモリとディスクメディアの相互作用があります。仮想メモリは、ディスクの一部を指し假想内存使用します。これは、仮想的なディスクおよびディスクキャッシュ(実際にはメモリ)相対的な、仮想メモリが虚メモリ(実際にディスク)です。

仮想メモリは、コンピュータシステムのメモリ管理技術です。これは、アプリケーションが持っていると考えて行う连续可用場合、必要な店舗の一部メモリ(フルアドレス空間)が、実際に、それは通常、物理破片に分割され、ならびに外部ディスク・マネージャに、データ交換。

大きなメモリ空間のためのプログラムメモリが枯渇する場合は、コンピュータプログラムがメモリを介して実行されなければなりません。プログラムがまだ保存できるメモリ領域が不足していることを保証するために、メモリの使用量としてハードディスクの一部を思い付くことによってこの問題を解決するには、Windowsオペレーティングシステムは、仮想メモリ技術を使用しています。ハードディスク上のメモリの形で仮想存在であるPAGEFILE.SYSページングファイル。

仮想メモリによって、あなたはまだメモリのうち、プログラムを実行することができます。たとえば、あなたはまだのみ10メガバイト5メガバイトのメモリ空間の場合は、プログラムを実行することができます。CPUだけなので実行され、そのため、仮想あなたが必要とするメモリ空間とメモリ空間ができ、プログラムメモリにロードされ置换(swap)、その後、プログラムを実行します。

仮想メモリとメモリ交換

私達はちょうどそれが何であるかを置換ウェイを行い、CPUがプログラムの実行を継続できるようにする前に交換を行うために必要な仮想メモリとメモリの一部を言及していますか?行うには、いくつかの方法に分割されますか?

仮想メモリの方法分页式分段式2種類。Windowsは、ページングを使用しています。これは、プログラムの構成が考慮されていない場合には、実行が特定のページサイズに応じて分割され、意味され、ユニットとして交換します。タブ付きで、我々は、メモリにディスクの内容を置くと呼ばれPage In、ディスクに書き込まれたメモリの内容が呼び出されますPage Outページサイズはつまり、アプリケーションがディスクへの単位としてページ(ページ)に4KBのページ分割に従って実施される必要があり、その後、交換し、4キロバイトのWindowsコンピュータです。

メモリ機能を実現するために、Windowsがファイル(ページファイル、ページファイル)ディスク上の仮想メモリを使用しています。2回 - このファイルは、Windowsおよび管理、仮想メモリのサイズ、および同じファイルのサイズによって生成され、通常はメモリサイズは1です。

保存メモリ

Windowsは、GUIベースのオペレーティングシステムです。その前身は、されたMS-DOCプログラムの最初のバージョンは、メモリの128キロバイト上で実行することができますが、少なくとも今はWindowsが実行したいスムーズに花が512MBのメモリが必要ですが、通常は、多くの場合、十分ではありません。

おそらく多くの人々は、我々は、メモリの不足を解決するために、仮想メモリを使用することができ、仮想メモリが実際の時間のメモリにサプリメントを提供することができると思いますが、仮想メモリのページでとページアウトの使用は通常、遅いディスクアクセス、を伴います良好なパフォーマンスよりも害。したがって、仮想メモリは根本メモリ不足を解決することはできません。

基本的にメモリ不足の状況に対処する、のいずれかのメモリ容量に加えてメモリを増やすには、いずれかのアプリケーションを最適化し、それはのように小さくします。最初の勧告は、多くの場合、ポケットマネーを測定する必要があるので、私たちは、第二のケースでのみ懸念しています。

注意:以下のページは、C言語の導入に関連し、各プログラマ(ない言語)の知識は知っていると理解する必要があります。

DLLファイルを使用して実現される機能があります。

DLL(Dynamic Link Library)ファイルがある动态链接库定義によって、ランタイムは動的にロードすることができている、ファイルLibrary(函数和数据的集合)のファイル。また、複数のアプリケーションが同じDLLファイルを共有することがあります。そして、DLLファイルを共有することで、あなたは、メモリを節約する効果を達成することができます。

例えば、我々は特定の処理機能を持つ関数を記述したとMyFunc()実行アプリケーションAとBのアプリケーションは、この機能を使用する必要があります後、それぞれのアプリケーション(これは静的リンク、静的リンクと呼ばれる)は、2つのアプリケーションでMyFuncと()を建て、その後、同じ関数の2つのメモリがあります資源の浪費につながるプログラム。

DLLファイルの代わりに、アプリケーションを使用する実行ファイル(EXEファイル)を変更します。複数のアプリケーションがあるかもしれませんプログラムの実行時に同じDLLファイルの内容ので、メモリ機能MyFuncとは、()があるのみです

Windowsオペレーティングシステムは、実際には、多くのDLLファイルのコレクションです。インストール中に一部のアプリケーションでは、DLLファイルが追加されます。アプリケーションがメモリを節約するのに役立ちますこれらのDLLファイルは、を介して実行するために、あなたはEXEファイルなしでアップグレードすることができ、DLLファイルが更新を完了するためにアップグレードすることができます。

_stdcallを呼び出すことにより、ファイルサイズを小さくするためのプログラム

呼び出すことにより、_stdcall高レベルのC言語のスキルを使用してアプリケーションを作成する場合、プログラムファイルを減らすための方法を、使用することができます。私たちは、_stdcallが何であるかを知って来ます。

_stdcallがあるstandard call(标准调用)略語。Windowsが提供してDLLファイル内の関数は、基本的には主にメモリを節約するために、_stdcall方法を呼び出すことによって行わ。一方、Cのデフォルトで書かれたプログラムが_stdcallされていません。これは、C言語固有の呼び出しと呼ばれますC 调用関数のパラメータの受け渡しに対応するC言語の変数であるため、C言語がデフォルト_stdcallで使用されていない、関数呼び出し側は、この場合には、クリーンアップ操作のスタックがすることはできませんどのように多くのパラメータを最後に知ることができます。しかし、C言語では、パラメータや機能の数が固定された場合、指定された_stdcallは問題ありません。

C言語とJavaの最も重要な違いの一つは、C言語では、人為的にメモリ空間の放出を制御する必要があるということです

C言語では、関数を呼び出した後、人間の実行の必要性は、クリーンアップの指示を積み重ねます。不要なデータのために使用されるメモリのスタック領域に伝達関数パラメータから受信され、クリーニング動作が呼び出されます栈清理处理

例えば、次のコード

// 函数调用方
void main(){
  int a;
  a = MyFunc(123,456);
}

// 被调用方
int MyFunc(int a,int b){
  ...
}

コードは、デフォルトの設定に応じて、main()メソッド、メイン側の添付主な機能でクリーニング処理スタックからMyFuncとメイン関数呼び出し。同プログラムでは、メモリの浪費につながる数回、クリーンアップされます)(MyFuncと、その結果、複数回が呼ばれてもよいです。

次のようにコードのコンパイルした後、

push 1C8h                               // 将参数 456( = 1C8h) 存入栈中
push 7Bh                                // 将参数 123( = 7Bh) 存入栈中
call @LTD+15 (MyFunc)(00401014)         // 调用 MyFunc 函数
add esp,8                               // 运行栈清理

C言語の関数を使用して、スタックを介してパラメータを渡すためにpushスタックに格納されたデータにコマンドを、popスタックからデータを取得する命令です。32ビットCPUは、命令が一度記憶された4バイト(32ビット)データをプッシュすることができます。上記のコード2つのプッシュ操作の結果として、8バイトのデータが格納されています。スルーcall機能命令を呼び出すために、呼び出しが完了すると、スタックに格納されたデータはもはや必要ありません。そうすることで、彼らはESPの追加は、8本の命令、データレジスタ保存スタックは、ESPデータをクリーンアップする8(セットポイント高いバイトアドレス8)を、進行します。スタックはメモリフィールドを利用することができる、それぞれの場合であるので、元の状態に使用した後に回復することが必要です。上記の操作は実行スタックのクリーンアップです。さらに、C言語で、関数の戻り値は、レジスタにスタックではないが返されます。

クリーンアップ作業を積み重ね、クリーンアップ作業を実行し、繰り返しメソッドを呼び出すと呼ばれる別の方法でクリーンアップ作業を実行するために、使用_stdcall標準を参照する方法は、繰り返し実行スタックのクリーンアップのオーバーヘッドが、この場合には比較的小さい、メソッド呼び出しを呼び出します。

物理ディスク構造

私たちは、CPU、メモリ、物理的な構造を導入し、そして今、私たちは、ディスクの物理的な構造を導入する前に。ディスクの物理的構造を指すは、データを格納するためのディスクの形態です

そこを通ってディスクが使用される表面への物理的空間を複数に分割されています。二つの方法で分割:可变长方式扇区方式前者は可変構造が固定長の空間に分割されたディスク構造である物理的空間の長さに分割されています。Windowsのハードディスクやフロッピーディスクは、一般的分野で使用されているこのような方法で使用されています。セクタは、ディスク表面に複数の同心円に分割されている空間である磁道、トラック分割が記憶空間のサイズに従って製造され固定されています扇区

扇区物理ディスクの最小単位は、読み込みと書き込みです。使用されるWindowsのディスクは、通常、セクタは512バイトです。しかし、ディスクは、セクタの論理面での読み取りおよび書き込みのWindowsユニットは、クラスタの整数倍です。ディスク容量の異なる機能は、クラスターは、1キロバイト(1つのクラスタ= 2つのセクタ)、2キロバイト、4キロバイト、8キロバイト、16キロバイト、32キロバイト(1つのクラスタは= 64個のセクタ)512バイト(1つのクラスタ= 1つのセクタ)であってもよいです。クラスタとセクタサイズは同じです。

ハードドライブまたはフロッピーディスクかどうか、別のファイルが同じクラスタに格納されていない、それ以外の場合は、ファイルの片側のみにつながる削除することはできません。だから、どんなに小さなファイルは、スペースのクラスタを占有しません。その結果、すべてのファイルが1つのクラスタの整数倍のスペースを占有します。

次のように私たちは、比較的簡単になり、実験を行うために、フロッピーディスクを使用して、我々は最初のフロッピーディスクをフォーマットし、フロッピーディスクの空き容量にフォーマット

次に、我々は、保存txtファイルを、ファイル内の文字を入力して、文書が実際にあったこの時間はわずか1つのバイトを占めるが、我々は、ディスクのプロパティを見て、512バイトを占有します

その後、我々はファイルサイズが使用領域の512のバイトは512バイトに達したとき、何かを書き続け、私たちは、文字を書き続けたときに、私たちは、ディスクスペースのプロパティを開くと、1024のワードとなっていることがわかりますセクション(= 2つのクラスタ)、私たちはこの実験によって証明することができますが、保存するために、クラスタディスクユニットです。

参考記事:

ディスク

ディスクキャッシュ

仮想記憶

「プログラムがアップ実行される方法章IV。」

http://www.intohard.com/article-436-1.html

自分のために、次の宣伝は歓迎世間の注目ビルダー号Javaのように、メイン番号を共有し、まとめることに熱心読書のようなJavaテクノロジー・スタック、愛の技術、ですが、私は一人一人があなたに成長軌道に共有するのが良い記事を与えることができることを望みます。番号002は、特別にあなたのために準備注目返信まくるを描き、あなたは愛とコレクションします。

おすすめ

転載: www.cnblogs.com/cxuanBlog/p/11776310.html