0

HIGHMEM についてのアイデアを得るために [1] を読んでいます。この記事には、「カーネルがシステムの物理メモリに直接アクセスできるようにしたい場合は、そのメモリをアドレス空間のカーネルの部分にマップするページテーブルを設定する必要があります」と書かれています。それはまさに私が混乱している場所です。物理メモリに直接アクセスするとはどういう意味ですか? それは物理アドレスを明示的に記述することを意味しますか?(私の知る限り、Linuxカーネルでは不可能です)そして、「そのメモリをアドレス空間のカーネルの部分にマップするページテーブルを設定する必要がある」と述べ続けます。それはHIGHMEMソリューションで行うことですよね?HIGHMEM ソリューションにつながる問題を理解するのを手伝ってください。

[1] http://lwn.net/Articles/75174/

4

2 に答える 2

1

1 ただし、カーネルがシステムの物理メモリに直接アクセスできるようにしたい場合は、そのメモリをアドレス空間のカーネルの部分にマップするページ テーブルを設定する
必要がありますメモリー。

2 t は、そのメモリをアドレス空間のカーネルの部分にマップするページ テーブルを設定する必要があります。アドレス空間 のカーネル部分も、そのメモリをマップするページ テーブルを必要としますが、ハイ メモリには直接のカーネル マッピングがありません。その記事には、「カーネルが高メモリ内のページを操作する必要がある場合、最初にカーネルのアドレス空間にマップする特別なページ テーブルを明示的に設定する必要があります。」という文が見つかります。

于 2013-05-10T02:34:29.293 に答える
0

まず、これは x86-32 アーキテクチャにのみ関連します

記事を注意深く読むと、概念が理解できます。以下は、それを見るための単純化された(そしてやや大雑把な)方法です。

1) カーネルは、32 ビット プラットフォーム用に完全にマップされたアドレス可能なメモリ (利用可能な実際のメモリに関係なく) から開始し、ユーザー空間用に 1GB、3GB と表示します。

2) このようにメモリ空間を共有すると、パフォーマンスが大幅に向上するため (ルックアップなどは非常に簡単で高速です)、カーネルが 0xc0000000 から始まる世界を作成します。

3) ハードウェア ベンダーは、4 GB を超えるメモリを潜在的にアドレス指定できる奇妙なページング モードを追加し続けました。カーネル開発者は、32 ビットでより大きなサイズを処理するために多くの奇妙なコードを追加したくなかったため、最大 8GB から 16GB まで

繰り返しになりますが、32 ビット ワードは 4GB のメモリしか直接アドレス指定できないという問題があります。

于 2013-05-10T02:56:16.660 に答える