こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

64bit Linux上で32bitアプリケーションを使って共有メモリアクセス

64bit Linux と共有メモリとの関係についてどなたか教えて
いただけないでしょうか。
 (現段階では、マシンもOSも64bitのものは無く、導入前での
  検討段階です)

使いたいと思っているのは Red Hat Enterprise Linux 3.0
です。
現在動かしているアプリケーションが使っている共有メモリの
サイズが大きくなってきたために64bitのLinuxを検討しています。
ただし、プログラム移行の手間を最小限にするめ、64bit環境上で
32bitライブラリにリンクしてmakeし直す程度の対応で済ませたいと
思っています(言語はCです)。

このような32bitアプリケーションが発行する共有メモリ関係の
API‥たとえば、shmget()とかshmat()‥の呼び出しは、どこかの
レイヤで最終的に64bit化されて動くと想像しています。
そうすると、32bit用のインターフェースに破綻を来たさない限りは、
総量で4GB超の共有メモリをアクセス可能(具体的には、総量として
4GBを越えて取得でき、参照時にはマッピングサイズが小さければ、
それらのいずれの部分もマッピングできる)と想像しているのですが
そのような理解で良いでしょうか。

ちなみに、4GB超の大きなメモリを1つ使うわけではなく、100個前後
に分散した取得/マッピングをしています。つまり個々のブロックは
小さなサイズです。

よろしくお願いします。

投稿日時 - 2005-08-04 15:50:39

QNo.1559303

困ってます

質問者が選んだベストアンサー

回答が付かないようなので、推測で書いてみます。

>32bitライブラリにリンクしてmakeし直す程度の対応
64bit用にコンパイルするか、32bit用にコンパイルするかしかないように思いますが。
ライブラリだけ32bitでは辻褄が合わないような気がします。

>総量で4GB超の共有メモリをアクセス可能
shmget,shmatはシステムコールでカーネルが64bitで動作していますから、同時にshmat()しないなら可能でしょう。
アドレス空間は4GBですから、通常のメモリ(ヒープ、スタック)等と合計のサイズが4GB以下の必要があります。
また、分断化はされるでしょうから、厳密には4GBよりは多少小さいでしょう。

しかし、共有メモリが4GB以上必要ってちょっと用途が想像つきませんが・・・。


それと、多分32bitだとカーネルも同じアドレス空間だったような気がするので、カーネルがいなくなる分アプリケーションのアドレス空間も広くなってると思います。

投稿日時 - 2005-08-08 17:32:35

お礼

terra5さん
回答感謝します。

> 64bit用にコンパイルするか、32bit用にコンパイルするかしかないように
> 思いますが。
> ライブラリだけ32bitでは辻褄が合わないような気がします。

そうですか。64bit環境下で32bitアプリを動かすための互換ライブラリ
のようなものがあるのかと勝手に思っていました。

> shmget,shmatはシステムコールでカーネルが64bitで動作していますから、
> 同時にshmat()しないなら可能でしょう。
> アドレス空間は4GBですから、通常のメモリ(ヒープ、スタック)等と合計
> のサイズが4GB以下の必要があります。
> また、分断化はされるでしょうから、厳密には4GBよりは多少小さいでしょう。

分かりました。
はい、「同時にshmat()しない」は大丈夫です。ある瞬間にマッピング
するメモリ空間は常に少しです。

> それと、多分32bitだとカーネルも同じアドレス空間だったような気がす
> るので、カーネルがいなくなる分アプリケーションのアドレス空間も広く
> なってると思います。

こちらも分かりました。
どうも丁寧なご回答をいただきありがとうございました。

投稿日時 - 2005-08-08 22:57:27

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問