![]() |
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。
|
|
Googleのunix.com
|
|||||||
| 高レベルのプログラミング は、 C 、 C + +についての質問の投稿は、 Java 、 SQL 、および他のプログラミング言語です。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| ELFフォーマットの共有ライブラリのですか? | wntrmead | 高レベルのプログラミング | 11 | 2007年11月16日 02:19午後 |
| 共有ライブラリ | areef4u | UNIXの詳細&エキスパートのためのユーザー | 1 | 2006年8月1日 02:14午前 |
| 未使用メモリを共有メモリ不足がたくさん | cjcamaro | UNIXの詳細&エキスパートのためのユーザー | 1 | 2004年10月13日 05:10午後 |
| 共有ライブラリの問題 | vinz | HP - UX | 1 | 2004年8月27日 10:57午前 |
| 共有ライブラリ | rajashekaran | 高レベルのプログラミング | 2 | 2002年8月3日 01:59午後 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
共有ライブラリ内の共有メモリ
私はDBのメモリにアクセスするには、共有ライブラリを作成する必要があります。は、 DB 、巨大ではないが、十分ごとに1つのプロセスの共有ライブラリを使用して持ち歩くに煩雑になる。幸い、それは非常に静的な情報、私は、共有ライブラリのインスタンス間でデータを同期することを心配する必要はありません。しかし、 1回程度、決して再びメモリの初期化を気にする必要がある私は何をすべきか。
私は図書館を愛するすべての共有ライブラリと変数のスコープが、私は可能だとは思わない。場合は、お知らせです...が、私は通常、共有ライブラリのデータセグメントの独自のコピーを取得各プロセスを知る。私はそこにフラグの方法は、ライブラリのすべてのインスタンス間で共有としては、データセグメントの一部だとは思わない。 だから、私は、メモリ内のDBを共有ライブラリにアクセスする必要があるわ。しかし、このライブラリの最初のインスタンスは、それに添付するには、共有メモリを作成する必要がありますを起動すると、他の可能なすべてのインスタンスをロードする前に使用することができます。どうすればこれを作成/共有メモリを一度に発生する初期化を保証する前に使用されているのですか? 最初は、私は非共有メモリセグメントのexistanceと思った...しかし、それを作成し、初期化の間に競合状態が存在するが、ライブラリの別のインスタンスにアクセスすることはできませんが、共有メモリを参照してくださいとこれはまだinitedされていません。私は保存することができます知っている のPOSIX ミューテックスを共有メモリ内の...ので、私は一人の使用することができますね。しかし、他の問題が存在する場合は、共有メモリセグメント" "以前の実行から任されている。 その後どうなるのか?だから...セグメントからのすべてのライブラリの"分離" 、しかし、それを破壊する。 ...新鮮な今のライブラリを再起動する必要がありますが、共有メモリのinitは次の時間が予定されていません。 そのアイディアHummm ... ?いくつかの方向ですか?どのような共有メモリsyncronizationを提供する一般的な方法は何ですか?私は、システムセマフォを使用する必要がありますか?それが"スタートの問題は、 "暖かい同じに苦しむか(共有ライブラリがメモリからプロセスを分離/まだ居住セマフォ) 。 これはAIXの5 、ところで、これらの興味のために書かされます。 |
|
||||
|
あなたが誰が作成し、シャットダウンは、共有メモリが仕事だと、さらに処理することがあります。このプロセスは、他のプロセスを添付することができますが、マネージャのプロセスを掃除し、最後に死ぬ行くのIPCのいくつかのフォームをデタッチしている可能性がある。
あなたは、クライアントライブラリによっては事前にされていないので、起動プロセスをフォーク/実行'エ管理とはsetuidビットは、適切な権利は、最初のユーザー以外に起動して実行することができます。 UNIXドメインソケットの場合は、クライアントが接続して、管理者は全員( )を使うことが世論調査では、マネージャーのプロセスに接続する場合は不潔にはまだ死ぬソケット接続を終了は、プロセスを生きている、監視します。 |
|
||||
|
引用:
Hummm .... もう1つの共有メモリの質問: 共有メモリのポインタを保存する(もちろん、共有メモリの他の部位に) 、この行うことができますか?私は答えをどのように処理すると、共有メモリを取り付けるにあると思いますか? shmatコールを見て、 2番目のパラメータは、メモリアドレスを指定します。私はこの仮定は、 "基本アドレス"は、共有メモリセグメントのためのプロセスに与えられています。私は、ポインタのみで、すべてのアプリケーションをすべてのアプリケーションと同様のセグメントを取り付けるときは、このパラメータを指定して共有メモリにアクセスする有効なのIFF推測されると思います。これは正しいですか? 上記の場合、私は私に添付するアドレスを他のアプリケーションと競合するかもしれないと推測が正しいか(図書館なども含めて)とは簡単に私は、私はしたいことを保証するためにアドレスを取得できない場合がありますされて。これを防ぐには、 OSのようなこのパラメータにNULLを渡すことは、 OSにマップするには、利用可能なアドレスを選択する1つのことができます。の場合には、本当に共有メモリでは、むしろ私のオフセットを格納する必要がありますし、アプリケーションの個々の"基本アドレスを追加することによって、実際のポインタの値を計算するポインタを格納できませんでした。 "これは明らかパフォーマンス....疲れる だから... ...方法は、 "障害"を克服通常は何ですか? |
|
||||
|
引用:
ヒュム設定する必要があります... ...かもしれないが、利用者に公平に値が設定されていないようだ。 Grrrrrrrr ...常にトレードオフ...高速で行うか、信頼性の高い....するは、信頼できるルート"オフセットとして...またはページ/オフセットのペアのすべての"ポインタを格納することです。しかし、実際には、アプリケーションは、常に私のポインタ型のポインタに翻訳しなければならないということ....遅い...退屈な、エラーを起こしやすい。 Grrrrrrrrrrrrr !!!!!!!!! |
|
||||
|
引用:
本質的に、私は、共有メモリ領域内でmallocして動的に連鎖操作は、 DBに格納されるハッシュテーブル内のアイテムを割り当てることがそれを使うのバージョンを作成することも考えていた。 ポインタを上の"パフォーマンスヒット"は、私は自分のルーチンmalloc ( )を介して共有メモリの割り当ては、バケツに何らかの"ポインタ"を格納する必要があります。どちらかが共有メモリへのネイティブポインタのポインタ、またはそれは、そのたびにアプリケーションコードがそれに反対の変換ルーチンを実行するための独立したアドレスの位置を取得する必要がありますが、共有メモリへのポインタにアクセスするために行くのオフセット。これは、配列または非ネイティブのポインタの方法のいずれかに必要となる。私以外の(ネイティブポインタ法)は、共有メモリへのアクセスポインタの文字と文字の配列には、巨大な配列の"インデックス"を伝えることを推測されているアプリケーションは、適切なデータ型にキャスト...しかし、このよう同じように醜い。 たぶん中間の" "は、共有メモリセグメントを作成しています... mallocライブラリのはばかげているけど、様々な動的にメモリセグメントへの静的なバケツサイズの大きさのスペースを無駄にすることなくデータを格納するためには良い方法を知っていることはありません。 編集DreamWarriorで最終; 2007年5月29日に 01:18午後.. |