アプリ版:「スタンプのみでお礼する」機能のリリースについて

IA-32のカーネルは、1Gの仮想空間を、物理アドレスの下位からストレートマップしてる故、1G(896M)を超える物理アドレスにアクセスできない。従って、理屈はともかく、HIMEM空間を通して、物理アドレスをアクセスする必要がある。となんとなく理解しています。

そこでふと思ったのですが、上の理解が妥当だとすると、HIMEMはあくまでカーネル空間だけの話で、プロセス空間は3G、しかも連続してマップする必要のないユーザプロセスでは、ページテーブルを設定すれば言いだけの話で、従って1Gを超える物理メモリを搭載した環境で、あえてHIMEM領域を設定しなくても、カーネルはちゃんとユーザプロセスに1Gを超える物理メモリを割り当てることができる。と思いに至った次第です。この認識、正しいでしょうか?

A 回答 (2件)

> 1G(896M)を超える物理アドレスにアクセスできない。


> カーネルはちゃんとユーザプロセスに1Gを超える物理メモリを割り当てることができる。

「1Gを超える物理アドレスにアクセスできない」と最初に書いてある理解から、どうして「1Gを超える物理メモリを割り当てられる」という結論になったのでしょうか…
カーネルがアクセス出来ないのに、割り当てるも何も無いと思います。

この回答への補足

物理アドレスにアクセス。というのでなく、カーネルモードとして動作できる物理アドレス。ということでした。ことば足らずで申し訳ありませんでした。

補足日時:2010/03/02 15:17
    • good
    • 0

32bitアドレッシングでは4Gバイトまで連続でアクセスできますが、Linuxでは下位3Gがユーザー空間、上位1G弱がkernel空間にマップされるようになっています。


Highmemが必要なのはkernel空間で1Gを越えるメモリを必要とする場合だけ(アドレスレンジが足りなくなるため)ですので、おっしゃるとおりユーザー空間にはHighmemは関係ありません。普通にMMUを使って3Gまでマップできます。
詳しいことは下記を参照して下さい。

参考URL:http://itpro.nikkeibp.co.jp/article/COLUMN/20080 …
    • good
    • 1
この回答へのお礼

回答ありがとうございました。これでなんかすっきりいたしました。早々に教えていただいた記事を読んでさらに理解を深めたいと思います。

お礼日時:2010/03/02 21:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!