-PR-
解決済み

共有メモリについて

  • すぐに回答を!
  • 質問No.95697
  • 閲覧数550
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 33% (5/15)

Linux関連でプログラムの作成をしているのですが、
共有メモリについての知識がほとんどありません。
それで
1.共有メモリの最大サイズ(カーネルの設定によると思いますが、デフォルトの値など)
2.共有メモリを使用するさいの排他処理について

などがわかる方、もしくは解説したHPなどがありましたらどうか教えてください。
よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル9

ベストアンサー率 71% (59/82)

プログラミングのセクションで尋ねればもっと
早く回答が得られたと思いますよ。

1.について。

 SHMMAX:1セグメント(1回のshmgetで割り当てられる
 共有メモリ領域)あたりの最大バイト数
 SHMALL:システム全体の共有メモリの最大ページ数

 1.1 /proc/sys/kernel/shmmax, /proc/sys/kernel/shmall
    をcatで見れば、現在のshmmaxとshmallの値が分かると思います。
 1.2 man shmgetに書いてないでしょうか?
 1.3 カーネルソースをインストールしていれば、ソースを見てみると
     どこかに書いてあると思います。
     /usr/src/linux/include/asm-i386/page.h
     /usr/src/linux/include/asm-i386/shmparam.h
     などがそうじゃないかと思います。

 ページサイズは.../page.hの中で、1UL << 12となっています。
 1を12回左シフトすると読めば、4096バイトでしょうか?

2.SysV IPCには排他制御の仕組みとしてセマフォを実現する関数群
(semget, semctl, semop)が用意されていますが、どうせ共有メモリ
を使用するなら、自分でセマフォのようなものを作られたら良いと
思います。
 例えば、共有メモリの先頭にchar型1文字分の領域を確保しておいて、
共有メモリへの読み書きの前には必ずそこをチェックし、0ならば
それを1に変更してから読み書きをする。読み書きが終われば0に戻す。
チェック時に1ならば0になるまで待つ。というようにすれば簡単な
排他制御ができます。データは共有メモリの先頭からchar1個分だけ
ずれたところから格納するようにします。

 工夫次第で色んな形の排他制御ができます。例えば、上記のcharを
読み出し用と書き込み用を用意すると、読み出しは重複して行って
も良いが、書き込みはダメ、というような排他制御が行えます。
(ただしその際は上記のチェックアルゴリズムでは不十分で、
 ひと工夫必要です。)

 また、共有メモリ領域を複数の部分に分けてそれぞれについて
排他制御を行うと、一々共有メモリ全体がロックされることがないので、
共有メモリへのアクセスが頻繁に行われるようなら、効率があがる
と思います。

 あるいは、排他制御用のcharフラッグとデータ領域を一まとめにした
構造体やクラスを宣言して、メモリ領域のポインタを構造体ポインタに
キャストして、構造体やクラスのメンバ関数を通してのみ共有メモリに
アクセスするようにすると、排他制御機構を構造体やクラスのなかに
隠すことができ、プログラムがすっきりすると思います。
お礼コメント
clow_h

お礼率 33% (5/15)

詳しい解説、ありがとうございました。
とても参考になりました。
投稿日時 - 2001-06-29 14:23:56
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 66% (6/9)

turbolinuxで良ければ参考URLを見てみて下さい。 他のlinuxも同様かと思います。 ※共有メモリ等はいろいろなプログラムで既に使用されている場合があるのでipcs等で使用状況を把握してからID 等を割り振ったほうが良いと思います。 ...続きを読む
turbolinuxで良ければ参考URLを見てみて下さい。
他のlinuxも同様かと思います。
※共有メモリ等はいろいろなプログラムで既に使用されている場合があるのでipcs等で使用状況を把握してからID
等を割り振ったほうが良いと思います。
お礼コメント
clow_h

お礼率 33% (5/15)

ありがとうございます。
参考URL、とっても勉強になりました。
投稿日時 - 2001-06-29 14:25:12


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ