[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:19049] Re: システムコールの追加



海老原と申します。

# 昨日質問を拝見しましたが、思わず無視してしまいました。(^^;
# 悪意はないんですが。

> 林です
:
> 最終的にはUDPで送られてきたものをカーネルで捕まえて
> そのままユーザのメモリにデータを置く。というとこまで先にすすまねばなりま
> せん。そのデータの中身は、プロセスIDとデータを置くアドレスと実際のデータ
> が含まれる予定です。

なぜカーネルで捕まえてユーザーメモリに置かなきゃならないんでしょうか?
事情背景が分かりませんが、UDPのサーバを立てるんではだめなんですか?

それともう一つ。

> 林といいます。只今、slinkでカーネル2.2.12を使っています。
:
> P1,P2はただmallocをして数値を入れ、その後スリープさせておきます。
> 問題のシステムコールを呼び出すのはP3で引数はP1,P2のプロセスIDと
> mallocでとったそれぞれのアドレスの4つを引数にし、
> P1でmallocをして代入された値をP2でmallocした値にコピーする
> といったものです。

じゃ、まあ物は試しでこれで実験し見てくださいな。

#include <stdio.h>
int main(){
        char *p=(char*)malloc(1024);
        printf("pointer=%p\n",p);
        for(;;) ;   /*無限ループ CTRL+C で止めてね*/
}

1キロバイトのメモリを確保して、そのポインターを表示するだけです。
実行したらアドレスが表示されます。その数値覚えといてくださいね。
CTRL+C押さないで、プロセスを動かしたままにしておいてくださいね。

じゃ、別な端末(ALT+F2など)からログインして、もう一個同じプロセスを
動かして見てください。

そのアドレスいくつになりました?
同じになるはずです。

# 家ではこうなりました。  pointer=0x80494b0

UNIX ではプロセスが違うと全然別のメモリ空間を持つので(多重仮想記憶)
プロセス間でポインター渡しても全然意味ないです。

-----------
えびはら
みつびしでんき
なごや