[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 ではプロセスが違うと全然別のメモリ空間を持つので(多重仮想記憶)
プロセス間でポインター渡しても全然意味ないです。
-----------
えびはら
みつびしでんき
なごや