SunRPC の練習問題

分散システム

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/dsys-1998/1999-01-26 /sunrpc-exercise.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■プログラム番号

SunRPC で使うのプログラム番号は、16進数で 0x20000000 〜 0x40000000 の 間(10進で536879812〜1073741824)は、ユーザが自由に利用できる領域として いる。しかし、重複して使うと、同じプログラム番号のものが1つのホストで 同時に動かなくなる。間違ってシステムが使っているものをセットすると、問 題が起きることがある。

分散システムの授業で SunRPC の練習問題で使うプログラム番号は、重ならな いように次のようなルールで決めることにする。

	60iiiiiin
iiiiiiは、6桁の学籍番号。 nは、0〜9の任意の数(複数のプログラムを作る時に 使える)。

これで足りない人は、この範囲意外で、適当にぶつかりそうにない番号を使う 事。

■SunRPC の練習問題

★ベクトルの加減サービス

整数の加減サービス は、単純な整数の和と差を計算するものである。これをベクトル(配列)を取る ように変更しなさい。

固定長でもいいですが、可変長に対応していることが望ましい。可変長の時、 長さが違っていた時には、エラーを変えすようにしたした方が望ましい。

★ベクトルのスカラ倍、内積、その他

上の加減サービスと同様に、スカラ倍や内積、その他の手続きを入れなさい。

固定長でもいいですが、可変長に対応していることが望ましい。可変長の時、 長さが違っていた時には、エラーを変えすようにしたした方が望ましい。

★行列の加減サービス

整数の加減サービス は、単純な整数の和と差を計算するものである。これを行列(2次元配列)を取 るように変更しなさい。

固定長ではなく、可変長に対応していることが望ましい。可変長の時、大きさ が違っていた時には、エラーを変えすようにしたした方が望ましい。

ヒント:C言語では、2次元配列は連続番地に置かれることが決まっている。 これを1次元配列としてまとめて送ってしまう方法がある。配列の行の数と列 の数は、別のパラメタで送る。

2次元配列をポインタの配列で表現する方法もある。

★getenv/putenv

putenv() と getenv() を使って、RPCサーバの環境変数を読み書きするような プログラムを作りなさい。

注意:putenv() の引数は、strdup() すること。(同じ名前の環境変数がある と、ゴミが出てきてしまうが、この課題ではよしとする。)

★ rusers クライアント

rusers コマンドと類似のクライアント・プログラムを作りなさい。この課題 では、サーバ側を作る必要はない。インタフェースは、次の場所にある。
~yas/dsys/sunrpc-4.0/rpcsvc/rnusers.x
このインタフェースに適合するようなクライアント側のプログラムを作りなさ い。

以下、rusers コマンドの実行例。

% who [←]
kirane     ttyq0         2月  9日 00時01分
yas        ttyq1         2月  9日 00時37分
% rusers localhost [←]
localhost                        kirane yas
% rusers -l localhost [←]
kirane   localhost:ttyq0                Feb  9 00:01       8 (greenwich.softla)
yas      localhost:ttyq1                Feb  9 00:37         (hlla.hlla.is.tsu)
% []

★RPC化

今まで自分が作ったプログラムの中から1つ選んで、それをRPCのプログラム に変更しなさい。ただし、次のような条件を持つものとする。

★その他

その他、上の練習問題と同程度の難しさの課題を設定して、解きなさい。

■ヒント

◆結果がうまく返されない

サーバ側で return する res を static にするのは、もちろん、res に含ま れているポインタの先も static は malloc() した領域である必要があります。

malloc() する例は、 日付時刻サービス にあります。

◆クライアント側で bus error や segmentation fault が出る

クライアント側では可変長配列を含む引数を渡す時には、 にあるように、独立に配列の領域 を確保する必要があります。単に送る構造体を宣言しただけでは、その中に含 まれているポインタの先は無効です。普通の変数(クライアント側の引数の先 は auto変数でもよい)の番地を自分でセットするか、malloc() で取ります。

◆クライアント側での入出力

この課題は、RPC の課題です。データをファイルやキーボードから与える必要 はありません。プログラムの中に固定してしまってもかまいません。

int data1[] = { 1, 2, 3, 4, };



■SunRPCのレポート

上の課題を1つ選んで時なさい。 締切は、2月9日(当日の日付有効。)
                             1999

      January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2      1  2  3  4  5  6      1  2  3  4  5  6
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   7  8  9 10 11 12 13
10 11 12 13 14 15 16  14 15 16 17 18 19 20  14 15 16 17 18 19 20
17 18 19 20 21 22 23  21 22 23 24 25 26 27  21 22 23 24 25 26 27
24 25 26 27 28 29 30  28                    28 29 30 31
31                                          

■レポートの出し方

レポートは、次のような形式の電子メールで送ること。

----------------------------------------------------------------------
To: yas
Subject: [dsys/report1] <内容に関したサブジェクト>

学籍番号 i965432(各自の学籍番号で置き換える)
名前 漢字の名前

<本文>
----------------------------------------------------------------------

<内容>

To: は、学類の O2 からは、yas だけでもかまいません。その他のホ ストからは、yas@jks.is.tsukuba.ac.jp とします。 Subject: には、dsys とレポートの番号(reportN, N は1,2,3,...) を必ず含めること。

電子メールの本文の先頭に学籍番号と名前(漢字の名前がある人は、漢字で) を書くこと。

内容は、日本語で書くこと。文章には、述語を付けること。体言止めは、使わ ないこと。単にプログラムを含めるのではなく、「以下に○○のプログラムを 示す」と書くこと。実行結果を付けること。

送られたレポートには、「手動で」確認応答(acknowledge)のメールを送ります。 すぐには送られてきません。 3日たっても確認応答が届かない時には、もう一度送り、 yas@is.tsukuba.ac.jpに、その旨連絡すること。

送ったレポートは、講義が終るまで保存すること。

授業に関連した質問・要望などは、レポートとは別に次のような形式で送ること。

----------------------------------------------------------------------
To: yas@is.tsukuba.ac.jp
Subject: [dsys] <内容に関したサブジェクト>

----------------------------------------------------------------------
Subject: には、report を含めないこと。report に含まれた質問は、返事が 遅くなります。
[SunRPC] [SunRPCデータ型] [SunRPC練習問題] [NFS] [Pthread] [Pthread同期]
↑[もどる] ←[1月19日] ・[1月26日] →[2月2日]
Last updated: 1999/02/09 01:21:35
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>