The UNIX and Linux Forums  
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。

Go Back   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午後

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2007年5月21日
DreamWarrior DreamWarrior is offline
登録ユーザー
  
 

参加日: 2003年10月
投稿: 70
共有ライブラリ内の共有メモリ

私はDBのメモリにアクセスするには、共有ライブラリを作成する必要があります。は、 DB 、巨大ではないが、十分ごとに1つのプロセスの共有ライブラリを使用して持ち歩くに煩雑になる。幸い、それは非常に静的な情報、私は、共有ライブラリのインスタンス間でデータを同期することを心配する必要はありません。しかし、 1回程度、決して再びメモリの初期化を気にする必要がある私は何をすべきか。

私は図書館を愛するすべての共有ライブラリと変数のスコープが、私は可能だとは思わない。場合は、お知らせです...が、私は通常、共有ライブラリのデータセグメントの独自のコピーを取得各プロセスを知る。私はそこにフラグの方法は、ライブラリのすべてのインスタンス間で共有としては、データセグメントの一部だとは思わない。

だから、私は、メモリ内のDBを共有ライブラリにアクセスする必要があるわ。しかし、このライブラリの最初のインスタンスは、それに添付するには、共有メモリを作成する必要がありますを起動すると、他の可能なすべてのインスタンスをロードする前に使用することができます。どうすればこれを作成/共有メモリを一度に発生する初期化を保証する前に使用されているのですか?

最初は、私は非共有メモリセグメントのexistanceと思った...しかし、それを作成し、初期化の間に競合状態が存在するが、ライブラリの別のインスタンスにアクセスすることはできませんが、共有メモリを参照してくださいとこれはまだinitedされていません。私は保存することができます知っている のPOSIX ミューテックスを共有メモリ内の...ので、私は一人の使用することができますね。しかし、他の問題が存在する場合は、共有メモリセグメント" "以前の実行から任されている。

その後どうなるのか?だから...セグメントからのすべてのライブラリの"分離" 、しかし、それを破壊する。 ...新鮮な今のライブラリを再起動する必要がありますが、共有メモリのinitは次の時間が予定されていません。

そのアイディアHummm ... ?いくつかの方向ですか?どのような共有メモリsyncronizationを提供する一般的な方法は何ですか?私は、システムセマフォを使用する必要がありますか?それが"スタートの問題は、 "暖かい同じに苦しむか(共有ライブラリがメモリからプロセスを分離/まだ居住セマフォ) 。

これはAIXの5 、ところで、これらの興味のために書かされます。
  #2固定リンク)  
Old 2007年5月21日
ポーター porter is offline Forum Advisor  
登録ユーザー
  
 

参加日: 2007年1月
投稿数: 2,965
あなたが誰が作成し、シャットダウンは、共有メモリが仕事だと、さらに処理することがあります。このプロセスは、他のプロセスを添付することができますが、マネージャのプロセスを掃除し、最後に死ぬ行くのIPCのいくつかのフォームをデタッチしている可能性がある。

あなたは、クライアントライブラリによっては事前にされていないので、起動プロセスをフォーク/実行'エ管理とはsetuidビットは、適切な権利は、最初のユーザー以外に起動して実行することができます。

UNIXドメインソケットの場合は、クライアントが接続して、管理者は全員( )を使うことが世論調査では、マネージャーのプロセスに接続する場合は不潔にはまだ死ぬソケット接続を終了は、プロセスを生きている、監視します。
  #3固定リンク)  
Old 2007年5月24日
DreamWarrior DreamWarrior is offline
登録ユーザー
  
 

参加日: 2003年10月
投稿: 70
引用:
当初の投稿 ポーター
あなたが誰が作成し、シャットダウンは、共有メモリが仕事だと、さらに処理することがあります。このプロセスは、他のプロセスを添付することができますが、マネージャのプロセスを掃除し、最後に死ぬ行くのIPCのいくつかのフォームをデタッチしている可能性がある。

あなたは、クライアントライブラリによっては事前にされていないので、起動プロセスをフォーク/実行'エ管理とはsetuidビットは、適切な権利は、最初のユーザー以外に起動して実行することができます。

UNIXドメインソケットの場合は、クライアントが接続して、管理者は全員( )を使うことが世論調査では、マネージャーのプロセスに接続する場合は不潔にはまだ死ぬソケット接続を終了は、プロセスを生きている、監視します。
私はこのアプローチを検討して、その動作する場合があります...が、私は自分自身に、なぜわざわざ共有メモリを使用して考えた場合、ソケットを接続しているつもりだ。の場合には、僕も監督を処理するだけで全体の要求を中継させることができるし、彼とは、メモリの共有をしない決定。

Hummm ....

もう1つの共有メモリの質問:

共有メモリのポインタを保存する(もちろん、共有メモリの他の部位に) 、この行うことができますか?私は答えをどのように処理すると、共有メモリを取り付けるにあると思いますか? shmatコールを見て、 2番目のパラメータは、メモリアドレスを指定します。私はこの仮定は、 "基本アドレス"は、共有メモリセグメントのためのプロセスに与えられています。私は、ポインタのみで、すべてのアプリケーションをすべてのアプリケーションと同様のセグメントを取り付けるときは、このパラメータを指定して共有メモリにアクセスする有効なのIFF推測されると思います。これは正しいですか?

上記の場合、私は私に添付するアドレスを他のアプリケーションと競合するかもしれないと推測が正しいか(図書館なども含めて)とは簡単に私は、私はしたいことを保証するためにアドレスを取得できない場合がありますされて。これを防ぐには、 OSのようなこのパラメータにNULLを渡すことは、 OSにマップするには、利用可能なアドレスを選択する1つのことができます。の場合には、本当に共有メモリでは、むしろ私のオフセットを格納する必要がありますし、アプリケーションの個々の"基本アドレスを追加することによって、実際のポインタの値を計算するポインタを格納できませんでした。 "これは明らかパフォーマンス....疲れる

だから... ...方法は、 "障害"を克服通常は何ですか?
  #4固定リンク)  
Old 2007年5月24日
ポーター porter is offline Forum Advisor  
登録ユーザー
  
 

参加日: 2007年1月
投稿数: 2,965
引用:
当初の投稿 DreamWarrior
だから... ...方法は、 "障害"を克服通常は何ですか?
1 。特定のOS上では、プロセスのメモリマップの理解。

2 。可能性は、プロセスの起動の初期の思い出として、他の保存活動には、使用を防ぐためには、共有メモリを添付してください。

3 。フォークの場合は、何かを確認するときに実行することはできません( )は、共有メモリが実際に分離される2つのプロセスが同じアドレスでは、共有メモリを使用する必要があります。かを調べる価値があるか?
  #5固定リンク)  
Old 2007年5月25日
DreamWarrior DreamWarrior is offline
登録ユーザー
  
 

参加日: 2003年10月
投稿: 70
引用:
当初の投稿 ポーター
1 。特定のOS上では、プロセスのメモリマップの理解。

2 。可能性は、プロセスの起動の初期の思い出として、他の保存活動には、使用を防ぐためには、共有メモリを添付してください。

3 。フォークの場合は、何かを確認するときに実行することはできません( )は、共有メモリが実際に分離される2つのプロセスが同じアドレスでは、共有メモリを使用する必要があります。かを調べる価値があるか?
これは、 2の部分は私の心配されています。は、 " "がそれに接続するメモリの特定の領域が主張している共有ライブラリの書き込みを発行する傾向があるようだ。しかし、さまざまな地域への添付への書き込みのためのポインタである場合、すべてのアプリケーションに接続する必要がありますが、同じ地域で有効であることが問題になりやすいようだ。

ヒュム設定する必要があります... ...かもしれないが、利用者に公平に値が設定されていないようだ。 Grrrrrrrr ...常にトレードオフ...高速で行うか、信頼性の高い....するは、信頼できるルート"オフセットとして...またはページ/オフセットのペアのすべての"ポインタを格納することです。しかし、実際には、アプリケーションは、常に私のポインタ型のポインタに翻訳しなければならないということ....遅い...退屈な、エラーを起こしやすい。 Grrrrrrrrrrrrr !!!!!!!!!
  #6固定リンク)  
Old 2007年5月25日
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unixのデーモン
  
 

参加日: 2001年8月
場所: Ashburn 、バージニア州
投稿数:9114
引用:
当初の投稿 DreamWarrior
...むしろ私のオフセットを格納する必要がありますし、アプリケーションの個々の"基本アドレスを追加することによって、実際のポインタの値を計算することができます。 "これは明らかパフォーマンス....疲れる

だから... ...方法は、 "障害"を克服通常は何ですか?
私はあなたの不安を覚えていないのパフォーマンスに関する情報を共有した。この事実上の定義を参照の配列を実行されると私はかなりの配列を使用しています。完全に配列し、自分のアプリの切り替えで、実際のパフォーマンスは、オプティマイザを使用して改善するかもしれないのポインタを使用することはありません。いずれにしても、多くの実装ではオプションに依存してはならないことは、共有メモリセグメントおよびポータブルのコードのアドレスを選択することができません。共有ライブラリ(位置独立コード) PICを使用して実際のパフォーマンスは、多くの場合、 PICはマイナーでヒットしていますにもかかわらず、コンパイルされています。共有データセグメントにも位置を独立している必要があります。この事業を行うためのコストだ。
  #7固定リンク)  
Old 2007年5月29日
DreamWarrior DreamWarrior is offline
登録ユーザー
  
 

参加日: 2003年10月
投稿: 70
引用:
当初の投稿 Perderabo
私はあなたの不安を覚えていないのパフォーマンスに関する情報を共有した。この事実上の定義を参照の配列を実行されると私はかなりの配列を使用しています。完全に配列し、自分のアプリの切り替えで、実際のパフォーマンスは、オプティマイザを使用して改善するかもしれないのポインタを使用することはありません。いずれにしても、多くの実装ではオプションに依存してはならないことは、共有メモリセグメントおよびポータブルのコードのアドレスを選択することができません。共有ライブラリ(位置独立コード) PICを使用して実際のパフォーマンスは、多くの場合、 PICはマイナーでヒットしていますにもかかわらず、コンパイルされています。共有データセグメントにも位置を独立している必要があります。この事業を行うためのコストだ。
その美しく場合、いくつかのバケツと基準へのインデックスで各バケットは、共有メモリを分割したいです。しかし、想定は、 DBのサイズの異なる情報で構成され、私はバケツサイズのいずれかを十分に格納何も(そして小さい空間に大きなものに廃棄物を選ぶ必要があります)またはIバケツサイズを動的に割り当てることを回すとポインタ(インデックスは、もはや仕事として) 。

本質的に、私は、共有メモリ領域内でmallocして動的に連鎖操作は、 DBに格納されるハッシュテーブル内のアイテムを割り当てることがそれを使うのバージョンを作成することも考えていた。

ポインタを上の"パフォーマンスヒット"は、私は自分のルーチンmalloc ( )を介して共有メモリの割り当ては、バケツに何らかの"ポインタ"を格納する必要があります。どちらかが共有メモリへのネイティブポインタのポインタ、またはそれは、そのたびにアプリケーションコードがそれに反対の変換ルーチンを実行するための独立したアドレスの位置を取得する必要がありますが、共有メモリへのポインタにアクセスするために行くのオフセット。これは、配列または非ネイティブのポインタの方法のいずれかに必要となる。私以外の(ネイティブポインタ法)は、共有メモリへのアクセスポインタの文字と文字の配列には、巨大な配列の"インデックス"を伝えることを推測されているアプリケーションは、適切なデータ型にキャスト...しかし、このよう同じように醜い。

たぶん中間の" "は、共有メモリセグメントを作成しています... mallocライブラリのはばかげているけど、様々な動的にメモリセグメントへの静的なバケツサイズの大きさのスペースを無駄にすることなくデータを格納するためには良い方法を知っていることはありません。

編集DreamWarriorで最終; 2007年5月29日に 01:18午後..
Closed Thread

ブックマーク

タグ
linuxの

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 09:12午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0