議論/プロセス間通信/2003_07_30


Top / 議論 / プロセス間通信 / 2003_07_30

Monaにおけるプロセス間通信案[2003/07/30]

[ユーザープロセス] ⇒(システムコールsend)⇒(アドレス変換)⇒[あて先へ]
                          ユーザー      |        カーネル
メッセージサーバは特権レベルで動作
⇒なぜ。現時点ではメッセージコピーが複数アドレス空間にまたぐため。
あ、そうか。ページディレクトリテーブル等の情報を知ることの出来るものでないとダメなのか。つまり情報が。
未整理

頭を整理するために、メッセージサーバがカーネル空間に所属して特権レベルで動作する場合 

条件

A:ユーザープロセスA(空間Aに存在)
B:ユーザープロセスB(空間Bに存在)
メッセージサーバ:
  1. ユーザープロセスA(空間Aに存在)がユーザープロセスB(空間Bに存在)に文字列strAを送信したい。
  2. AはシステムコールSENDを発行する。そのさいvirtual address strAを引数としてセットする。
  3. システムコールにより特権レベルに遷移するがプロセス空間はAのままである。ただしスタックはカーネル。
    1. カーネル空間への切替
    2. メッセージキューにメッセージをvirtual addressのまま格納
    3. プロセスAを実行可能キューからはずす
    4. もしメッセージサーバーがsleepしていたらwakeup
    5. スケジューラで別のタスクへ
  4. メッセージサーバーの実行状態になったとき
    1. メッセージキューからメッセージを取り出す
    2. virtual addressの解決ここが怪しい
    3. メッセージをvirtual address Bにセットここも怪しい
    4. まだメッセージがあれば繰り返す。
  5. 続く

シナリオ

  1. fromプロセスはメッセージを送信したいプロセスを識別する。
  2. fromプロセスはメッセージ、引数構造体をセットしてsendをコールする。
  3. int21hで特権レベルへ遷移しfromプロセスは休止する。(休止はfromプロセスのtickにより解除される。toプロセスがメッセージを受け取って処理をしたかにはよらない?)
  4. カーネルはfromプロセスのメッセージをtoプロセスが読み込むことの出来る領域にセットする。
  5. そしてスケジューラを起動して再スケジューリングする。
  6. toプロセスがwakeupされたとき、メッセージを待っていればメッセージを取得できる。

プロセス間通信サーバー

public class プロセス間通信サーバ {
    public void main() {メッセージ待ち{メッセージ送信}}
    public static addMessage(Message);
}
some() {
   new プロセス間通信サーバ->main();
}

関数のインターフェース案

int MessageManager#send(toProcess, message, argStruct);
int waitForMessage();
int receiveMessage(&message, argStruct);

コメントはありません。 コメント/議論/プロセス間通信/2003_07_30?

お名前:

MENU

now: 1

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 4431, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3793d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.027 sec.