1 / 10

共有メモリ

共有メモリ. 共有メモリのシステム概要  共有メモリの特徴と利用手順  共有メモリの操作  ipcs - IPC リソース情報の表示 ipcrm – IPC の各資源(メッセージキュー・セマフォ集合・共有メモリ ID )を削除する  shmget システムコール  shmat システムコール  shmdt システムコール shmctl システムコール. 共有メモリのシステム概要. プロセス A と B は、 同じ鍵を持っている. プロセス A と B は、 同じ鍵を持っている. 共有メモリを使うプロセス共通のキー. プロセス A shmget();

ziva
Download Presentation

共有メモリ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 共有メモリ • 共有メモリのシステム概要  • 共有メモリの特徴と利用手順  • 共有メモリの操作  • ipcs - IPC リソース情報の表示 • ipcrm – IPCの各資源(メッセージキュー・セマフォ集合・共有メモリ ID)を削除する  • shmgetシステムコール  • shmatシステムコール  • shmdtシステムコール • shmctlシステムコール

  2. 共有メモリのシステム概要 プロセスAとBは、 同じ鍵を持っている プロセスAとBは、 同じ鍵を持っている 共有メモリを使うプロセス共通のキー プロセスA shmget(); shmat(); write(); プロセスB shmget(); shmat(); read(); プロセス A プロセス B プロセス間通信 • パイプライン • シグナル カーネル 共有メモリ • 共有メモリ • セマフォ • ソケット カーネル

  3. 共有メモリプロセス間通信の特徴 共有メモリは、プロセス間通信に、プロセスの親子関係が不要 パイプラインは親子プロセスのみ 共有メモリを利用する手順 共有メモリ識別子を獲得(shmget)。メモリ上に共有メモリの領域が確保される。 共有メモリにアタッチ(shmat)。利用できる共有メモリの先頭アドレスが返される。 共有メモリにデータを書き込む/読込む。 共有メモリをデタッチ(shmdt) 共有メモリ領域を開放する(shmctl, ipcrmコマンド)。 (例)カット&ペースト mcut 標準入力から入力されたデータを共有メモリに入れる mpaste 共有メモリからデータを取出しプリントする 共有メモリの特徴と利用手順

  4. 共有メモリの操作 共有メモリの 利用状況 $ ipcs -m ------ シェアードメモリセグメント -------- キー shmid 所有者 権限 バイト nattch 状態 $ w | ./mcut $ ipcs -m ------ シェアードメモリセグメント -------- キー shmid 所有者 権限 バイト nattch 状態 0x61018088 360453 oida 666 4096 0 $ ./mpaste 12:04pm up 1:38, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT oida pts/0 pupa 11:33am 1:41 0.03s 0.03s -bash oida pts/1 pupa 11:43am 0.00s 0.05s 0.01s w $ ipcrm shm 360453 リソースを削除しました $ 利用者情報をカット 利用者情報をペースト shmid

  5. ipcs は、IPC リソース機能に関する情報を出力する。 -i を指定すると、後続の idで指定されたリソースの情報だけが出力される。 リソースの指定は次のようになる: -m シェアードメモリセグメントを指定する。 -q メッセージキューを指定する。 -s セマフォを指定する。 -a すべてのリソースの情報が出力される(ディフォルト)。 出力フォーマットの指定は、次のようになる: -t リソースが最後に変更された時間を出力する。 -p リソースの所有、作成、最終変更を示すプロセスIDを出力する。 -c リソースの作成ユーザーおよびグループの情報を出力する。 -l 各リソースの上限値を出力する。 -u 各リソースの使用状況を示すサマリが出力される. ipcs - IPC リソース情報の表示

  6. ipcrm は System V プロセス間通信 (interprocess communication, IPC) オブジェクトと、それに関連するデータ構造をシステムから削除する。 これらのオブジェクトを削除するためには、スーパーユーザーであるか、オブジェクトの作成者または所有者でなければならない。 メッセージキューオブジェクトとセマフォオブジェクトの削除は、 (他のプロセスがそのオブジェクトの IPC 識別子を持っていたとしても) 即座に行われる。 共有メモリオブジェクトが削除されるのは、現在付加 (attach) されている全てのプロセスが (shmdt(2) で) 仮想アドレス空間からオブジェクトを分離 (detach) してからである。 -M shmkey最後の分離が行われた後、 shmkeyで作成された共有メモリセグメントを削除する。 -m shmid最後の分離が行われた後、 shmidで識別される共有メモリセグメントを削除する。 -Q msgkeymsgkeyで作成されたメッセージキューを削除する。 -q msgidmsgidで識別されるメッセージキューを削除する。 -S semkeysemkeyで作成されたセマフォを削除する。 -s semidsemidで識別されるセマフォを削除する。 ipcrm – IPCの各資源(メッセージキュー・セマフォ集合・共有メモリ ID)を削除する

  7. shmgetシステムコール shmget 共有メモリを割当て、識別子を得る インクルードファイル #include <sys/ipc.h> #include <sys/shm.h> 書式 int shmget(key_t key, int size, int shmflg); 戻値 成功時 共有メモリ識別子 失敗時 -1 key:  共有メモリを使うプロセス共通のキー size: 確保する共有メモリのサイズ(バイト) shmflg: IPC_CREAT: 新規作成(同じキーで割当てられていれば、既にある 共有メモリを使う) IPC_EXCL: 同じキー値で既に割当てられていれば、エラーを返す アクセス権: ファイルの許可ビットと同じ 例:  IPC_CREAT|0666 新規作成、全ての人が読書可能 IPC_CREAT|IPC_EXCL|0666 割当てられていない新しいメモリ 一意に決まるキーの作り方 (1)IPC_PRIVATE: 親子関係プロセス用  (2)ファイル名と1文字からつくる: 関数ftok

  8. 共有メモリ プロセス shmat 戻値 shmatシステムコール shmat 共有メモリをプロセスにアタッチ インクルードファイル #include <sys/types.h> #include <sys/shm.h> 書式 void *shmat(int shmid, const void *shmaddr, int shmflg); 戻値 成功時 アタッチされた共有メモリの開始アドレス 失敗時 -1 int shmid:  共有メモリ識別子(shmgetの戻値) const void *shmaddr: アタッチするアドレス(共有メモリの先頭 からのオフセット) shmflg: 共有メモリの操作モード(SHM_RDONLYは、読取り モード、それ以外は、読書きモード)

  9. shmdtシステムコール shmdt 共有メモリをディスアタッチ インクルードファイル #include <sys/types.h> #include <sys/shm.h> 書式   int shmdt(const void *shmaddr); 戻値 成功時 0 失敗時 -1 共有メモリ プロセス shmdt

  10. shmctlシステムコール shmctl 共有メモリを監視・制御する インクルードファイル #include <sys/ipc.h> #include <sys/shm.h> 書式   int shmctl(int shmid, int cmd, struct shmid_ds *buf); 戻値 成功時 0 失敗時 -1 cmd:  IPC_STAT 共有メモリの状態を得る IPC_SET 共有メモリの状態を変更 IPC_RMID 共有メモリを削除

More Related