戦略ソフトウェア特論II - LPC 補足資料
TA   稲上克史(inagami@is.s.u-tokyo.ac.jp)
課題

LPC 課題ファイル(LPCServiceExperiments.pdf)
の、Question, Experiments が各3問づつあるので全てに回答してください
Experiments 1, 2 は実装課題ですが、ソースコードだけでなくプログラムの説明、および考察も書いてください

※ 提出方法・単位についてはこちら

LPCについて

まずはLPCに関する講義資料を読んでください

RPC(Remote Procedure Call)というネットワークを介したコミュニケーション手段がありますが、LPCはRPCと同様なメカニズムを、仮想的なネットワークポートであるPORTオブジェクトを用いて、異なる物理メモリ空間にマップされているローカルプロセス同志のコミュニケーションを実現します
特に、クライアントサブシステムがカーネルサービスを利用するのに使用します
ユーザモードプロセスがカーネルプロセスのメモり空間のデータにアクセスする必要があるとき、そのポインタをやりとりするのは危険です
そのため、クライアントプロセスはサーバプロセスにデータに対するハンドルとしてリクエストメッセージを送り、サーバプロセスはリクエストされたハンドルに応じて必要なデータだけを処理し、リプライメッセージとしてクライアントプロセスに送り返します
このLPC機構によって、クライアントプロセスはハンドルという形でしかカーネルメモリにアクセスできないので、カーネル空間を保護することができます

具体的な実装は、カーネルメモリ内に共有メモリ領域にサーバプロセスとクライアントプロセスの仮想メモリ空間をマップし、Sender がそこにメッセージを書き込み、Receiver がそこからメッセージを読み出すことでコミュニケーションを行います
これによって、データのコピーを行わずにすむので効率的なプロセス間コミュニケーションを実現できます

課題のヒント

Question 1

LPCオブジェクトに関してはLPCに関する講義資料11ページ以降に列挙されています

Experiment 1,2

LPCに関する講義資料の8ページ目に簡単な擬似コードがあります。
プログラムに必要なハンドラやデータ構造は"tokyodemo.h"の125行目以降に定義されています
ちなみにドキュメント内の変数名 Nt~ は "tokyodemo.h"内では Tok~ なので注意してください

LPCに関しては難しい Windows API はそれほど必要ありませんが、必要ならば金田さんの配ったレジュメ(HTMLPDF)を参考にしてください

Experiment 3

あるクライアントプロセスが、別プロセスと共有しているクライアントDLLに break point を設定すると、別プロセスがそのDLLを実行したとき . . .

Question 2

LPCに関する講義資料の10ページ目に注意してください

Question 3

separate port とは Connection Port(コネクションの確立に使用) と Communication Port(コネクション確立後のメッセージ通信に使用) のことだと思われます


課題およびこのページに関する質問はinagami@is.s.u-tokyo.ac.jp にメールしてください
ただし、お盆前後は実家にかえっていると思うのですぐに返信できないかもしれません

TOPへ戻る