[スイッチ]マザーボードチップセットとメモリマッピング



Motherboard Chipset



元のタイトル:マザーボードチップセットとメモリマップ

元のアドレス:http://duartes.org/gustavo/blog/



[注:レベルは限られています。翻訳するには、外国の専門家から素晴らしい記事をいくつか選ぶ必要があります。自分で確認して共有しましょう。 ]

最新のオペレーティングシステムカーネルがどのように機能するかを明らかにするために、コンピューターの内部に関する一連の記事を書きます。これらの記事が、コンピューター愛好家やプログラマー、特にそのようなトピックに興味はあるが知識がない人に役立つことを願っています。議論の焦点は、Linux、Windows、およびIntelプロセッサにありました。システムの内部を研究するのが私の趣味です。カーネルモードのコードをたくさん書いたのですが、しばらく書いていません。この最初の記事では、最新のIntelマザーボードのレイアウト、CPUがメモリにアクセスする方法、およびシステムのメモリマップについて説明します。



出発点として、今日のインテルコンピューターがどのようにコンポーネントを接続するかを見てみましょう。次の図は、マザーボードの主要コンポーネントを示しています。

最新のマザーボードの概略図であるノースブリッジとサウスブリッジがチップセットを形成しています。



写真を見るときは、CPUが何に接続されているかを知らないという重大な事実に留意してください。グループを介したCPUのみ ステッチ 外の世界と相互作用することは、外の世界が何を持っているかを気にしません。それはコンピューターのマザーボードである可能性がありますが、トースター、ネットワークルーター、脳に埋め込まれたデバイス、またはCPUテストベンチである可能性もあります。 CPUは、メモリアドレス空間、I / Oアドレス空間、および割り込みの3つの方法で外界と相互作用します。

今のところ、私たちはマザーボードとメモリだけを気にしています。マザーボード上で外界と通信するポータルは、CPUをノースブリッジに接続するフロントサイドバスです。このバスは、CPUがメモリの読み取りまたは書き込みを行う必要がある場合に常に使用されます。 CPUは、ピンの一部を介して読み取りおよび書き込みを行う物理メモリアドレスを転送し、他のピンは、書き込みまたは受信するデータを送信するために使用されます。 Intel Core 2 QX6600には、物理​​メモリアドレスを転送するための33ピン(233のアドレス位置を表すことができます)とデータの送受信用に64ピンがあります(したがって、データは8バイトのデータである64ビットチャネルで転送されます)。ピース)。これにより、CPUは64GBの物理メモリ(233アドレスに8バイトを掛けたもの)を制御できますが、ほとんどのチップセットは8GBのRAMしかサポートできません。

今では理解するのが最も難しい部分です。メモリはRAMを指し、さまざまなプログラムによって読み書きされると考えていたかもしれません。実際、CPUからのメモリ要求のほとんどは、ノースブリッジによってRAMマネージャに転送されますが、すべてではありません。物理メモリアドレスは、マザーボード上のさまざまなデバイス間の通信にも使用できます。この通信方法は メモリマッピング I / O。このようなデバイスには、グラフィックカード、ほとんどのPCIカード(スキャナーやSCSIカードなど)、およびBIOSのフラッシュメモリが含まれます。

ノースブリッジは、物理メモリアクセス要求を受信すると、要求の転送先を決定する必要があります。RAMに送信されますか?それともグラフィックカードですか?特定の問題は、メモリアドレスマッピングテーブルによって決定されます。マッピングテーブルは、各物理メモリアドレス領域に対応するデバイスを認識しています。ほとんどのアドレスはRAMにマッピングされ、残りのアドレスはマッピングテーブルによって使用され、このアドレスのアクセス要求に応答しているデバイスをチップセットに通知します。デバイスにマップされたこれらのメモリアドレスは、640KBから1MBのPCメモリ間の古典的な穴を形成します。グラフィックカードとPCIデバイス用にメモリアドレスが予約されている場合、より大きな穴が作成されます。これが、32ビットオペレーティングシステムが すべてを使用することはできません 4GBのRAM。 Linuxでは、 / proc / iomem このファイルには、これらの空のアドレス範囲が簡潔にリストされています。次の図は、IntelPCのローエンド4GB物理メモリアドレスによって形成される一般的なメモリマップを示しています。

Intelシステムでは、ローエンドの4GBメモリアドレス空間のレイアウト。

実際のアドレスと範囲は、特定のマザーボードとコンピューターに接続されているデバイスによって異なりますが、ほとんどのCore 2システムでは、状況は上の図に非常に近いものです。すべての茶色の領域は、デバイスアドレスによってマップされます。これらはすべてマザーボードバスで使用されることを忘れないでください。 実在住所 。 CPUで 内部 (私たちが作成して実行しているプログラムのように)、 論理アドレス メモリにアクセスするためにバスに公開する前に、CPUによって物理アドレスに変換する必要があります。

論理アドレスを物理アドレスに変換するこのルールはより複雑で、その時点のCPUに依存します。 動作モード (リアルモード、32ビットプロテクトモード、64ビットプロテクトモード)。使用される変換メカニズムに関係なく、CPUの動作モードによって、アクセスできる物理メモリの量が決まります。たとえば、CPUが32ビットプロテクトモードで動作している場合、4GBの物理アドレス空間しかアドレス指定できません(もちろん、次のような例外があります。 物理アドレス拡張 ただし、当面はこのテクノロジーを無視してください)。上位1GBの物理アドレスはマザーボード上のデバイスにマップされているため、CPUは実際には約3GBのRAMしか使用できません(Vistaがインストールされているコンピューターを使用したことがありますが、2.4GBしか使用できません))。 CPUが動作している場合 リアルモード の場合、1MBの物理アドレス空間のみをアドレス指定できます(これは、以前のIntelプロセッサでサポートされている唯一のモードです)。 CPUが64ビットプロテクトモードで動作している場合、64GBのアドレス空間をアドレス指定できます(ただし、このような大きなRAMをサポートするチップセットはほとんどありません)。 64ビットプロテクトモードの場合、CPUはマザーボード上のデバイスによってマップされたRAMスペースの領域にアクセスすることができます(つまり、穴の下のRAMにアクセスします)。これを実現するには、システムにロードされているRAMアドレス領域よりも高いアドレスを使用する必要があります。このテクニックはと呼ばれます リサイクル (再生)だけでなく、チップセットの協力。

記憶に関するこれらの知識は、次の記事への道を開くでしょう。次回は、マシンのブートプロセスについて説明します。電源投入から、ブートローダーがオペレーティングシステムカーネルを実行するためにジャンプする準備ができるまでです。これらのことについてもっと知りたい場合は、Intelのマニュアルを強くお勧めします。私は直接の情報をリストしましたが、Intelのマニュアルは非常によく書かれていて正確です。ここにいくつかの情報があります:

「IntelG35チップセットのデータシート」では、Core2プロセッサをサポートする代表的なチップセットについて説明しています。これは、この記事の主な情報源でもあります。

「IntelCore2 Quad-Core Q6000シーケンスのデータシート」は、プロセッサのデータシートです。プロセッサ上の各ピンの役割を記録します(ピンを機能別にグループ化すると、それほど多くはありません)。いくつかのビットの説明はかなり曖昧ですが、素晴らしい情報です。

インテルソフトウェア開発者マニュアルは優れたドキュメントです。建築のさまざまな部分を美しく説明し、曖昧さをまったく感じさせません。第1巻と第3巻のパートAは読む価値があります(「巻」という言葉に怖がらないでください。各巻は長くなく、選択的に読むことができます)。

PádraigBradyは、UlrichDrepperの記事にリンクすることを提案しました 記憶についての優れた記事 。それは確かに良いことです。私はこのリンクをストレージについて説明している記事に入れるつもりでしたが、ここにリストされているほど良いです。