2011-12-16 24 views
1

物理メモリと仮想メモリ内のファイル(ハードドライブなど)の変数をコンピュータがどのように割り当てるかをコンピュータが判断する方法。どちらのメモリストレージタイプでもほとんどランダムに見えますが、すでに別のプロセスで占有または割り当てられているハードドライブのメモリアドレスまたはセクタ(任意の場所)にデータを格納することができないためではありません。私が古いW95システム上でNortonのスピードディスク(ハードドライブ上のファイルをデフラグメントするプログラム)を研究していたとき、私はプログラムのハードドライブのデータ(色分けされた異なるデータタイプのビジュアルマップ、例えばスワップファイル一番上にあった。)、未使用領域が空いているハードディスク全体に広がった多くのファイルで構成されていた。加えて、これらの領域のいくつかでは、データと空きスペースが混在しているように見えるものが不規則なパターンを見せていました。私はそれが起こるためにそのランダムを考えたいと思う。私がCで書いた簡単なプログラムのメモリアドレスを勉強していたとき、変更後のプログラムを再コンパイルした後のプログラムの各バージョンが、セグメントとオフセットのアドレスが違うことに気付きました。私はコンピュータを再コンパイルするときに同じアドレスを使用することを期待していました。ときどき同じアドレスが使用され、それ以外のときは別のアドレスが使用されることがあります。繰り返しますが、プログラムによって選択されるメモリ位置についてもランダムであると考えています。私はメモリ割り当てやファイルの書き込みは、連続して書かれた最初の空きスペースに基づいていると思いました。物理メモリと仮想メモリのデータ割り当ての動作

一般的なコンピュータのロジック作業でどのようにデータがどのような場所(物理RAMまたはダイナミック)でデータを書き込むかを決めるのは私の質問です。 ?コンピュータサイエンスのどの領域(アセンブリ言語でない場合)を、これを説明する勉強する必要がありますか、ほとんどランダムな動作ですか?アドバンス

答えて

0

おかげであなたはvirtual memory and TLB (translation lookaside buffer)またはpagingをご覧ください。

仮想メモリとページングを実装することは自明ではありません。システム全体のパフォーマンスは、システムによって異なります。それが正しく行われていない場合、システムはthrashになります。

ウィキペディアは今のために行う必要がありますので、ここは早朝です:http://en.m.wikipedia.org/wiki/Translation_lookaside_buffer

EDIT

あなたのデフラグで見たものの色のスポットは、あなたのHDD上の塊でした。各チャンクは特定のサイズです。お使いのHDDがどのように断片化に応じて、次のようになり、あなたのHDDの一部かもしれません:*は完全な意味

*-*-***-***-* 

を、そして - これは(上記の)可能性があり、空の

を意味し、 1つのアプリケーション/ファイルまたは複数のファイルの一部。私は、私の例を単純化するために、1つのファイルがそれらのファイルに分割されていると仮定します。各*の最後には、次のチャンクがある次の場所へのポインタがあります(これはlinked listと呼ばれます)。あなたのHDDが断片化されるほど、次のチャンクへのポインタの数が増えます。これは、データのためのスペースを使用する代わりに、次のポインタのためにより多くのスペースを使用し、結果は、そのデータを読むときにオーバーヘッドになります。これがディスク上のファイルであれば、データがグループ化されていない場合(場所の原則)、複数のシーク(遅いために悪い)が発生します。デフラグを使用すると、すべてのチャンクが(可能な限り)移動してグループ化されます。

*-*-***-***-* 

OSがページングおよび仮想メモリアドレッシング(および)を決定

*********---- 

なります。 TLBは、このプロセスを支援するハードウェア(キャッシュ)です(高速ルックアップのために物理メモリを仮想メモリアドレスにマッピングします)。 CPUは、あなたは、オペレーティング・システムを研究する必要があり

  • あなたの質問に答えるためにMMU

    を経由してTLBと通信します。

  • はいHDDにファイルを配置する場所は、OSによって決定されます。ファイルを削除してもう一度ダウンロードした場合、そのファイルが同じ場所に置かれる保証はありません。

私がここで述べたこれらのコンポーネントと原則の素敵な概要は、Click Hereです。これは、リアルタイムオペレーティングシステムの書籍のスライドを含むpptです(私が使用したものと同じであると誤解されていない場合)

+0

フラットメモリモデルがセグメント化されたメモリタイプに取って代わると、私はページングがなくなったと思った – kjwilliams

+0

プログラマはフラットなメモリ空間のように感じられますが、フラットではありません。特にマルチスレッド/スレッドシステムでは、オペレーティングシステムにとってフラットなメモリ空間のように見えるものの上に、すべてのアプリケーション(LinuxとWindowsの2つの例です)に同じメモリモデルの外観を与えるためにMMUが使用されます。 –

+0

Apple Computerでは、メモリ配分やファイルマッピングのために彼らのブランドにとっては難解な別の方法を使用していますか、またはLinuxやWindowsと同様のアイデアをコピーしていますか? – kjwilliams

0

コンピュータサイエンスからもっと広く直接的にリンクされたリストがあります。 http://en.wikipedia.org/wiki/Linked_list

リンクリストがあり、最後にアイテムを追加した場合、これらのアイテムはメモリやディスクなどのどこかに線形的に存在するとします。しかし、リストの途中でいくつかの項目を削除すると、項目番号9に項目番号7の項目が表示され、項目番号8は削除されます。allocsや仮想メモリ、ハードドライブのセクタ割り当てなどのメモリ割り当てと同様に、次のアイテムを割り当てるために使用するアルゴリズムと関係があります。

ファイルシステムでは、リンクリストタイプスキームを使用して、どのセクタが1つのファイルに関連付けられているかを追跡できます。リンクリストを使用するのはすばやく簡単ですが、断片化を処理します。はるかに遅い方法は断片化を持たないが、ファイルを線形セクタに保持するためにファイルを常にコピー/移動することです。

malloc()割り当て方式とMMU割り当て方式もこのカテゴリに該当します。基本的に何かを取るときはいつでも分数にスライスし、それらの分数の前に仮想インターフェイスを置いてプログラマ/ユーザーに線形であるように見せます。 Malloc()(MMUを介して仮想メモリを数えない)は、その分数の線形チャンクの数を割り当ててallocの必要性を割り振り、alloc/freeスキームを使用して多くの大きなチャンクを利用可能にしようとする場合、場合によっては、悪いmallocシステムは、メモリの半分が空いているが、メモリ不足のエラーなしで動作する最大のmallocは、そのメモリのほんの一部であるmallocであり、ギグは無料で、 4096バイトを割り当てます。

+0

リンクされていないリストは、一般的なハードドライブなどの物理RAMまたはプラッタシステムのいずれであろうと、私がリンクされたリストを考えるとき、同じ方法で磁気テープストレージ(リールツーリール、カセットテープ、VCRテープなど)の下に落ちることができます。先に進むと、メモリの宛先に移動する必要があります。 – kjwilliams

+0

なぜハードディスクに最適化ツールがあると思いますか?ヘッドがプラッタを横切って前後に移動しなければならない回数を減らす。仮想メモリシステムであっても、あるアドレスのメモリにアクセスするには、他の物理アドレスのテーブルのリンクされたリスト/ディレクトリを経由しなければならないため、物理アドレスがどこにあるのかを知る必要があります。これらのテーブルには、これを高速化するための独自のキャッシュがありますが、仮想レベルを物理レベルに変換するには、別のレベルにリンクされた1つのレベルを押し下げなければなりません。 –

+0

http://ja.wikipedia.org/wiki/Fat32#FAT32 FAT12,16,32は、defagツールの必要性の根源です。ディスク全体がチャンクに分割され、FATのファイルアロケーションテーブルがテーブルに保持されます。ウィキペディアでそれについて読む、最初の段落またはそう話を伝えます。ディレクトリ内のエントリは脂肪の最初のクラスタを指し、その次のエントリポイントとリンクされたリストは、チェーンの最後に達するまで続きます。これはまた、ディスクの一部(ディレクトリ構造やfat自体)が破損したときに、孤立したファイル断片を取得する理由です。 –

関連する問題